android - Abi 过滤器 - 被一个或多个具有更高版本代码的 APK 遮蔽
问题描述
我有一个使用 vlc 库的媒体播放器应用程序。VLC 有用于“armeabi-v7a”和“arm64-v8a”的 jni 库。现在为了减小大小,我想分别为这两种架构上传 apk,所以我在 gradle 中制作了风味。gradle 中的调味代码如下所示: flavorDimensions "default"
productFlavors {
arm64 {
versionCode 73
versionName "1.0.4"
ndk.abiFilter "arm64-v8a"
}
arm {
versionCode 74
versionName "1.0.4"
ndk.abiFilter "armeabi-v7a"
}
}
我得到的 apk 有包含它们各自文件的libs文件夹,arm64 用于 arm64-v8a 和 armv7 用于 armeabi-v7a,这两个 apk 的大小不同。
现在的问题是,当我将这两个 apk 上传到 Beta 版或 Alpha 版的 Playstore 时,我收到错误消息:
"此 APK 将不会提供给任何用户,因为它完全被一个或多个具有更高版本代码的 APK 所掩盖。 "
如果我在 v8 之后上传 v7,v8 表示它将被更高版本(即 v7)所掩盖。
任何想法为什么会发生这种情况,当存在基于哪个 playstore 识别风味差异的 libs 文件夹时。
解决方案
我发现了错误。
由于 v8 向后兼容,armv8 也可以运行 v7 apk。所以 v8 apk 应该有比 v7 更高的版本代码,所以拥有 armv8 架构的用户应该使用 v8 apk。所以我不得不把它变成这样:
productFlavors {
arm64 {
versionCode 75 // <- higher version code than v7
versionName "1.0.4"
ndk.abiFilter "arm64-v8a"
}
arm {
versionCode 74
versionName "1.0.4"
ndk.abiFilter "armeabi-v7a"
}
}
推荐阅读
- php - 将图像插入到 imagestring() 的“字符串”部分
- hierarchy - 为一列中的值创建层次结构
- c - 使用C中的函数将大写字符串转换为小写的程序中的问题
- mysql - MySQL过程结果中的重复行
- sql-server - 还原数据库失败 - ElasticPool 中的 Azure SQL 数据库
- botframework - 为什么使用 DirectLine v3 客户端(Microsoft Bot 连接器)时连接会关闭
- java - 如何在 REST API 中使用版权和商标符号?
- c++ - 什么导致双向链表代码中的分段错误
- ios - 从 Firebase 填充的 CLLocationCoordinate2D 数组不会保留其条目。斯威夫特 4
- javascript - 删除不必要的重复