首页 > 解决方案 > 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 文件夹时。

标签: androidandroid-ndk

解决方案


我发现了错误。

由于 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"
    }
}

推荐阅读