sba*_*aar 13 android abi gradle android-gradle-plugin developer-console
我正在尝试使用以下代码在我的gradle中进行abi分割
splits {
abi {
enable true
reset()
include 'x86', 'armeabi-v7a'/*, 'arm64-v8a', 'x86_64'*/
universalApk true
}
}
def abiVersionCodes = ['armeabi-v7a': 1, 'x86': 2, /*'arm64-v8a': 2,'x86_64': 4*/]
android.applicationVariants.all { variant ->
// assign different version code for each output
variant.outputs.each { output ->
def filter = output.getFilter(OutputFile.ABI)
if (filter != null) {
output.versionCodeOverride = abiVersionCodes.get(output.getFilter(OutputFile.ABI)) * 1000000 + android.defaultConfig.versionCode
}
}
}
Run Code Online (Sandbox Code Playgroud)
它正在生成正确命名的输出,当我使用apk分析器时,在lib目录下,armeabi-v7a apk将只包含一个lib/armeabi-v7a目录,同样适用于x86 apk.但是,armeabi-v7a还包含一个armeabi和x86文件夹,只有一个META-INF文件夹只包含一个MANIFEST.MF文件,不是这样.
将这些多个apks上传到开发控制台时,每个拆分apk都列在
区分apk详细信息:原生平台无(+ 3常见)
和通用apk有
本机平台arm64-v8a,x86_64(+ 3常见)控制台上的arm和通用apk错误是
"完全投影APK PROBLEM此APK不会被提供给任何用户,因为它完全被一个或多个具有更高版本代码的APK所遮蔽.解决方案从您的版本中删除此APK或查看您所包含的APK的定位和版本代码在这个版本中."
当我添加包装选项时
packagingOptions {
exclude '**/x86/**'
}
Run Code Online (Sandbox Code Playgroud)
然后生成的apks,split和universal,将不支持x86.但是,我没有看到为每个应用程序变体指定packagingOptions的方法,因此这不是一个可行的解决方案,并且它显然不是正确的方法,即使它是.问题似乎是apk被认为是支持x86只是因为它有一个x86目录,即使它大部分都是空的,并且这导致两个分裂apx通告他们支持完全相同的体系结构,当他们不支持时.
奇怪的是,通用apk说它支持arm64-v8a,armeabi,armeabi-v7a,x86,x86_64,这不是我在调用reset()后所期望的并且在abi块中包含'x86','armeabi-v7a' .为了防止包含64位arch,我必须在defaultConfig中添加
ndk {
abiFilters "armeabi-v7a", "x86"
}
Run Code Online (Sandbox Code Playgroud)
但它仍然包含一个空的armeabi文件夹.
分割abi的正确方法是什么,以便开发控制台只能看到apk实际支持的内容?删除空目录的方法是否正确?有没有理由创建我可以追踪的空目录?
其他一些未使用的库正在生成空文件夹。通过在一个空白项目中反复试验,我复制了依赖项和分割的 gradle 代码,将范围缩小到了 CWAC 的 Markdown 生成器。将其从 .2 升级到 .4 解决了该问题。
归档时间: |
|
查看次数: |
1297 次 |
最近记录: |