Gradle
Gradle support for Android projects. For command line build, `gradle assembe` will trigger build phase - Config for Android .so file generation - Commented build.gradle - Automatic file copy after build - Dummy AndroidManifest file
This commit is contained in:
parent
4df4752b63
commit
f58ea87c26
113
build.gradle
113
build.gradle
@ -10,28 +10,11 @@ buildscript {
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
}
|
||||
}
|
||||
|
||||
// Output: Shared library (.so) for Android
|
||||
apply plugin: 'com.android.library'
|
||||
|
||||
android {
|
||||
compileSdkVersion 24 // Android 7.0
|
||||
|
||||
// External Native build
|
||||
// - Use existing CMakeList.txt
|
||||
// - Give path to CMake. This gradle file should be
|
||||
// neighbor of the top level cmake
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
path "CMakeLists.txt"
|
||||
}
|
||||
}
|
||||
compileSdkVersion 25 // Android 7.0
|
||||
|
||||
// Target ABI
|
||||
// - This option controls target platform of module
|
||||
@ -40,72 +23,76 @@ android {
|
||||
// if bad, both toolchains might not support it
|
||||
splits {
|
||||
abi {
|
||||
// Be general, as it can...
|
||||
enable true
|
||||
universalApk true
|
||||
// We can specify platforms, like...
|
||||
// reset()
|
||||
// include "x86", "x86_64", "armeabi-v7a", "arm64-v8a"
|
||||
// Be general, as much as possible ...
|
||||
// universalApk true
|
||||
|
||||
// Specify platforms for Application
|
||||
reset()
|
||||
include "x86", "x86_64", "armeabi-v7a", "arm64-v8a"
|
||||
}
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 21 // Android 5.0+
|
||||
targetSdkVersion 24 // Follow Compile SDK
|
||||
targetSdkVersion 25 // Follow Compile SDK
|
||||
versionCode 16 // Follow release count
|
||||
versionName "4.1.0" // Follow Official version
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
|
||||
// - Specify Android STL
|
||||
// - Additional flags
|
||||
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
arguments "-DANDROID_STL=c++_shared"
|
||||
"-DBUILD_SHARED=true"
|
||||
arguments "-DANDROID_STL=c++_shared" // Specify Android STL
|
||||
arguments "-DBUILD_SHARED_LIBS=true" // Build shared object
|
||||
arguments "-DFMT_TEST=false" // Skip test
|
||||
arguments "-DFMT_DOC=false" // Skip document
|
||||
cppFlags "-std=c++14"
|
||||
}
|
||||
}
|
||||
println("Gradle CMake Plugin: ")
|
||||
println(externalNativeBuild.cmake.cppFlags)
|
||||
println(externalNativeBuild.cmake.arguments)
|
||||
}
|
||||
|
||||
// External Native build
|
||||
// - Use existing CMakeList.txt
|
||||
// - Give path to CMake. This gradle file should be
|
||||
// neighbor of the top level cmake
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
path "CMakeLists.txt"
|
||||
// buildStagingDirectory "./build" // Custom path for cmake output
|
||||
}
|
||||
//println(cmake.path)
|
||||
}
|
||||
|
||||
sourceSets{
|
||||
// gradle assemble
|
||||
main.setRoot('./')
|
||||
// Android Manifest for Gradle
|
||||
main {
|
||||
manifest.srcFile 'support/AndroidManifest.xml'
|
||||
}
|
||||
}
|
||||
// // Custom SourceSet for JNI adapter
|
||||
// // - Source path/directory for Gradle
|
||||
// sourceSets {
|
||||
// // gradle assemble
|
||||
// main.setRoot('droid/main')
|
||||
// // main {
|
||||
// // manifest.srcFile 'droid/main/AndroidManifest.xml'
|
||||
// // java.srcDirs = ['droid/main/java']
|
||||
// // jniLibs.srcDirs = ['droid/main/jniLibs']
|
||||
// // res.srcDirs = ['droid/main/res']
|
||||
// // assets.srcDirs = ['droid/main/assets']
|
||||
// // }
|
||||
// // gradle connectedAndroidTest
|
||||
// androidTest.setRoot('droid/androidTest')
|
||||
// // androidTest {
|
||||
// // java.srcDir 'droid/androidTest/java'
|
||||
// // }
|
||||
// // If ABI includes `armeabi-v7a`, the following directory MUST exists.
|
||||
// // Notice that the path is relative to `build.gradle` file
|
||||
// // `droid/main/jniLibs/armeabi-v7a`
|
||||
// // `libs/armeabi-v7a`
|
||||
// // The library files in there will be installed automatically
|
||||
// main.jniLibs.srcDirs = ['droid/main/jniLibs', 'libs']
|
||||
// androidTest.jniLibs.srcDirs = ['droid/main/jniLibs', 'libs']
|
||||
// }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
|
||||
implementation 'com.android.support:appcompat-v7:24.+' // Follow target SDK
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'com.android.support.test:runner:1.0.1'
|
||||
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
|
||||
assemble.doLast
|
||||
{
|
||||
// Instead of `ninja install`, Gradle will deploy the files.
|
||||
// We are doing this since FMT is dependent to the ANDROID_STL after build
|
||||
copy {
|
||||
from 'build/intermediates/cmake'
|
||||
into 'libs'
|
||||
}
|
||||
// Copy debug binaries
|
||||
copy {
|
||||
from 'libs/debug/obj'
|
||||
into 'libs/debug'
|
||||
}
|
||||
// Copy Release binaries
|
||||
copy {
|
||||
from 'libs/release/obj'
|
||||
into 'libs/release'
|
||||
}
|
||||
// Remove empty directory
|
||||
delete 'libs/debug/obj'
|
||||
delete 'libs/release/obj'
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user