我正在使用 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。它以更多的编译时间为代价解决了依赖性问题。