Gradle实验性android库模块依赖项未执行
我正在使用gradle实验插件0.7.3。 在我的项目中,我有几个本机模块,它们静态地链接到我的android库模块,其中一个共享库由它们构建,并在库java代码中使用。 然后将库模块用作应用程序的依赖项。 添加的依赖项如下所示:Gradle实验性android库模块依赖项未执行,android,android-studio,android-ndk,android-gradle-plugin,gradle-experimental,Android,Android Studio,Android Ndk,Android Gradle Plugin,Gradle Experimental,我正在使用gradle实验插件0.7.3。 在我的项目中,我有几个本机模块,它们静态地链接到我的android库模块,其中一个共享库由它们构建,并在库java代码中使用。 然后将库模块用作应用程序的依赖项。 添加的依赖项如下所示: dependencies { compile project(path: ':library-module') } apply plugin: 'com.android.model.library' model { android {
dependencies {
compile project(path: ':library-module')
}
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'
}
当我用android studio运行应用程序时,它失败了,因为找不到库的方法。我在gradle控制台中检查了它,它只构建应用程序本身而不构建库,因为它只执行“:app module:assembleerm7debug”
我猜这是实验插件的一个bug,因为它在非实验版本中运行良好。
我已经尝试了一种解决方法,并在app build.gradle中添加了以下内容:
project.afterEvaluate{
assembleArm7Debug.dependsOn(':library-module:assembleArm7Debug')
}
但这只会导致一个gradle错误,即该应用程序没有属性assembleerm7debug,即使我可以使用./gradlew调用它。
有没有其他可行的方法来实现这一点
编辑:
库模块如下所示:
dependencies {
compile project(path: ':library-module')
}
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。它以更多的编译时间为代价解决了依赖性问题。您的
:library module
build.gradle文件是什么样子的?在问题中对其进行了更新。好的,为什么您要调用:library module:assembleerm7debug
,而不是只调用:library module
?我的意思是,您实际上在哪里指定了库模块中的assembleArm7Debug?Android Studio的默认运行命令启动:app module:assembleArm7Debug
,但它从未解析依赖项。现在你问我,我进一步研究了构建过程,我注意到如果我运行:library module:assembleerm7debug
,它构建得很好,但是如果我启动:library module:assembleedbug
,它会尝试将我的本机库模块构建为共享的,而不是静态的。你有没有尝试过查看NDK示例在Github上: