gpt4 book ai didi

android - 具有 ABI 拆分的特定架构的 Gradle 依赖性

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:15:02 27 4
gpt4 key购买 nike

我正面临这个似乎无法解决的问题。这是场景:

我正在构建使用 gradle 依赖项的 apk,并且此依赖项是特定于体系结构的,因此对于 x86 的 apk,我需要不同的依赖项,对于 arm 也需要不同的依赖项。

我用产品口味解决了这个问题:

productFlavors {

dev { ... }
develx86 { ... }
production { ... }
productionx86 { ... }

}

然后我这样定义依赖:

develCompile 'dependency_for_arm'
develx86Compile 'dependency_for_x86'

这很好用。但最近我不得不在我的应用程序中添加 renderscript 的用法。我是这样做的:

renderscriptTargetApi 22
renderscriptSupportModeEnabled true

在此之后,当我在 Google Play 上上传 apk 时,它说它的 apk 适用于 arm,x86。我不知道这怎么可能。正如您所想的那样,它会在具有不同 CPU 的设备上崩溃(如果我为 arm 生成 apk 并且用户将在 x86 应用程序上执行它)。

所以我决定使用 ABI 拆分:

splits {
abi {
enable true
reset()
include 'armeabi', 'x86'
universalApk false
}
}

//Ensures architecture specific APKs have a higher version code
//(otherwise an x86 build would end up using the arm build, which x86 devices can run)
ext.versionCodes = [armeabi:0, x86:1]

import com.android.build.OutputFile

android.applicationVariants.all { variant ->
// assign different version code for each output
variant.outputs.each { output ->
int abiVersionCode = project.ext.versionCodes.get(output.getFilter(OutputFile.ABI)) ?: 0
output.versionCodeOverride = android.defaultConfig.versionCode + abiVersionCode
}

但是现在当我看到生成的 apk 文件时,我的flavor-specific 依赖项没有包含在 apk 中,当我打开使用来自该依赖项的 API 的部分时 apk 会崩溃。

有人知道如何解决这个问题吗?或者有人知道为什么 Google Play 在我包含 renderscript 时说 apk 适用于两种架构? (没有它它可以正常工作,但我需要渲染脚本)。

感谢您的宝贵时间。我将不胜感激任何帮助。

最佳答案

如果您查看您的 APK,在 lib 文件夹下,您应该看到渲染脚本支持模式为您支持的架构之外的其他架构添加了库。

您可以保留具有 ABI 特定风格的早期配置。但是为了确保不包含其他架构的库,请尝试将 abiFilters 添加到您的口味中:

productFlavors {

dev { ... ndk.abiFilters 'armeabi-v7a' }
develx86 { ... ndk.abiFilters 'x86' }
production { ... ndk.abiFilters 'armeabi-v7a' }
productionx86 { ... ndk.abiFilters 'x86' }

}

关于android - 具有 ABI 拆分的特定架构的 Gradle 依赖性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36008963/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com