2

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

4

0 回答 0