我正在使用gradle实验插件0.7.3。 在我的项目中,我有几个本机模块,这些模块静态链接到我的android库模块,其中共享库是从它们构建的,并在库java代码中使用。 然后将库模块用作应用程序的依赖项。 依赖关系添加如下:
dependencies {
compile project(path: ':library-module')
}
当我用android studio运行应用程序时,它失败了,因为找不到库的方法。我在gradle控制台中检查它,它只构建应用程序本身而不构建库,因为它只执行':app-module:assembleArm7Debug'。
我想这是实验插件的一个错误,因为它与非实验版本一起工作正常。 我已经尝试了一种解决方法,并将以下内容添加到app 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。它以更多的编译时间为代价解决了依赖性问题。