【问题标题】:Specify toolchainVersion and productFlavors in Gradle在 Gradle 中指定 toolchainVersion 和 productFlavors
【发布时间】:2015-11-25 13:49:22
【问题描述】:

我正在尝试设置 Android Studio 和 Gradle 以使用本机代码构建我们的 android 应用。

由于我们的依赖关系,我们使用 GCC 4.8 编译 armeabiarmeabi-v7ax86。 我尝试通过以下方式指定工具链和 abi:

model {
    android.ndk {
        moduleName = "my_native"
        toolchain = "gcc"
        toolchainVersion = "4.8"
        cppFlags.add("-std=c++11 -fexceptions -frtti")
        stl = "gnustl_static"
    }

    android.productFlavors {
        create("arm") {
            ndk.with {
                abiFilters.add("armeabi")
            }
        }
        create("armv7") {
            ndk.with {
                abiFilters.add("armeabi-v7a")
            }
        }
        create("x86") {
            ndk.with {
                abiFilters.add("x86")
            }
        }
    }
}

指定工具链可以正常工作,但 Gradle 会在同步时忽略 abiFilters 并为所有失败的 ABI 创建任务,因为在最新版本的 NDK(我相信是 r10e)中 arm64-v8a 不支持 GCC 4.8。

我正在使用gradle-experimental 插件的0.4.0 版本和Gradle 包装器的2.8 版本。 Android Studio 版本为1.5.0(最新稳定版)。

如何正确指定与一组 ABI 一起使用的工具链?

【问题讨论】:

    标签: android android-studio gradle android-ndk


    【解决方案1】:

    我有一个类似的问题,发现 this article 很有帮助。

    如果您一次为 3 个架构构建一个 APK,您应该在 app build.gradle 脚本中的模块 android.productFlavors 中再创建一项:

    android.productFlavors {
        create("abi3") {
            ndk.abiFilters.add("x86")
            ndk.abiFilters.add("armeabi")
            ndk.abiFilters.add("armeabi-v7a")
        }
    }
    

    现在将项目与 Gradle 文件同步将导致 Android Studio 自动创建另外两个构建变体(请参阅“构建变体”工具栏):abi3Debug 和 abi3Release。因此,您可以使用其中一种变体来构建您的项目。 现在我猜你正在使用默认的构建变体,它使用APP_ABI=all 键构建你的项目。

    【讨论】:

    • 我不想创建一个胖 APK,你的回答也没有涉及到指定工具链。
    • 在我的回答中,我假设工具链版本已在 android.ndk 模块中指定:toolchainVersion = "4.8"。但无论如何,如果您不创建胖 APK,那将毫无用处。我会进一步调查这个问题。如果您有任何解决方案,我将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 2018-05-06
    • 1970-01-01
    • 2017-12-02
    相关资源
    最近更新 更多