Abi过滤器-被一个或多个具有更高版本代码的APK遮盖

时间:2018-07-19 06:04:21

标签: android android-ndk

我有一个使用vlc库的媒体播放器应用程序。 VLC具有用于“ armeabi-v7a”和“ arm64-v8a”的jni库。 现在要减小大小,我想分别为这两种体系结构上载apk,因此我在gradle中做了一些尝试。 gradle中的调味代码如下所示: flavourDimensions“默认”

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)遮盖。

这是为什么发生的任何想法,当存在libs文件夹时,该文件夹根据哪个playstore识别风味的差异。

1 个答案:

答案 0 :(得分:1)

我发现了错误。

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