我有一个Android项目,将一堆源代码链接在一起形成单个的JNI库。我想将这个单个库拆分成多个较小的库,并在它们之间建立一些依赖关系。如何使用新的gradle构建系统实现这一点?
我有一个Android项目,将一堆源代码链接在一起形成单个的JNI库。我想将这个单个库拆分成多个较小的库,并在它们之间建立一些依赖关系。如何使用新的gradle构建系统实现这一点?
root
+ lib -> 'com.android.model.native'
+ lub -> 'com.android.model.native'
+ aar -> 'com.android.model.library'
+ app -> 'com.android.model.application'
build.gradle
configure([project(':lib'), project(':lub'), project(':aar'), project(':app')]) {
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.6.0-alpha5'
}
}
}
lib/build.gradle
apply plugin: "com.android.model.native"
model {
android {
compileSdkVersion 23
ndk {
moduleName "foo"
}
sources {
main {
jni {
exportedHeaders {
srcDir "src/main/headers"
}
}
}
}
}
lub/build.gradle
apply plugin: "com.android.model.native"
model {
android {
compileSdkVersion 23
ndk {
moduleName "bar"
}
sources {
main {
jni {
exportedHeaders {
srcDir "include"
}
}
}
}
}
aar/build.gradle
apply plugin: "com.android.model.library"
model {
android {
buildToolsVersion '23.0.2'
compileSdkVersion 23
ndk {
moduleName "aggregate-jni"
stl "stlport_shared" // using cpp?
}
sources {
main {
jni {
dependencies {
project ":lib"
project ":lub"
}
}
}
}
}
app/build.gradle
apply plugin: 'com.android.model.application'
model {
android {
buildToolsVersion '23.0.2'
compileSdkVersion 23
defaultConfig {
applicationId "com.example.app"
minSdkVersion.apiLevel 21
targetSdkVersion.apiLevel 23
versionCode 1
versionName "1.0"
}
}
}
dependencies {
compile project(':aar')
}
libfoo.so libbar.so libaggregate-jni.so libstlport.so
并且你的镜像Java类。你可以简单地
System.load("aggregate-jni");
libaggregate-jni.so
。请注意,静态链接一堆东西到STL是不好的,因为您将最终得到多个STL副本。这可能会真正搞砸事情。gcc
工具链现已停用。最好使用:model {
android {
ndk {
toolchain 'clang'
stl 'c++_shared'
}
}
}
dependencies { project ":lib" project ":lub" }
只获取第一个项目。如果我交换它们,缺失的依赖项就会切换,但似乎不会添加两者。 - Anthony