Gradle实验性android库模块依赖项未执行

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 {

我正在使用gradle实验插件0.7.3。 在我的项目中,我有几个本机模块,它们静态地链接到我的android库模块,其中一个共享库由它们构建,并在库java代码中使用。 然后将库模块用作应用程序的依赖项。 添加的依赖项如下所示:

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上: