我正在使用 gradle 实验插件 0.7.3。
在我的项目中,我有几个本机模块,它们静态链接到我的 android 库模块,其中从它们构建共享库并在库 java 代码中使用。
然后,库模块将用作应用程序的依赖项。
依赖项添加如下:
dependencies {
compile project(path: ':library-module')
}
当我使用 android studio 运行应用程序时,它失败了,因为找不到库的方法。我在 gradle 控制台中检查了它,它只构建应用程序本身,而不构建库,因为它只执行“:app-module:assembleArm7Debug”。
我想这是实验性插件的一个错误,因为它在非实验版本上运行良好。
我已经尝试了一种解决方法,并将以下内容添加到应用程序 build.gradle 中:
project.afterEvaluate{
assembleArm7Debug.dependsOn(':library-module:assembleArm7Debug')
}
但这只会导致 gradle 错误,指出该应用程序没有属性 assembleArm7Debug,即使我可以使用 ./gradlew 调用它。
还有其他可能的方法来实现这项工作吗?
编辑:
库模块如下所示:
apply plugin: 'com.android.model.library'
model {
android {
compileSdkVersion 24
buildToolsVersion "24.0.0"
defaultConfig {
minSdkVersion.apiLevel 19
targetSdkVersion.apiLevel 24
versionCode 1
versionName "1.0.0"
}
ndk {
moduleName = 'android_lib'
toolchain = 'gcc'
stl "gnustl_static"
platformVersion "android-19"
ldLibs.addAll(['android_libs'])
cppFlags.addAll([
'more_flags',
"-I" + "includes",
])
}
buildTypes {
release {
minifyEnabled false
}
debug {
ndk {
debuggable true
}
minifyEnabled false
}
}
abis {
create("armeabi-v7a") {
CFlags.addAll([
'some_flags'
])
}
create("arm64-v8a") {
CFlags.addAll([
'some_flags'
])
}
create("x86") {
}
}
sources {
main {
java {
source {
srcDir "/src/main/java"
}
}
res {
source {
srcDir "res"
}
}
assets {
source {
srcDir "assets"
}
}
jni {
source {
srcDirs += [
"src_dirs"
]
}
dependencies {
project ":native-lib" linkage "static" buildType "debug"
library "prebuilt_lib" linkage "static"
}
exportedHeaders {
srcDirs = [
"src_dirs"
]
}
}
}
}
productFlavors {
create("arm7") {
ndk.abiFilters.add("armeabi-v7a")
}
create("arm8") {
ndk.abiFilters.add("arm64-v8a")
}
create("x86") {
ndk.abiFilters.add("x86")
}
}
}
repositories {
libs(PrebuiltLibraries) {
prebuilt_lib {
binaries.withType(StaticLibraryBinary) {
staticLibraryFile = file("/lib/${targetPlatform.getName()}/liblib.a")
}
}
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:support-annotations:24.1.1'
}
编辑:
该问题似乎是由应用程序模块无法正确解决的产品风格引起的。我当前的解决方法是删除此模块的产品风格,并为我的所有架构添加 ndk.abiFilters。它以更多编译时间为代价解决了依赖性问题。