由于重叠的abis,在Play开发者控制台上完全隐藏了APK

时间:2017-10-11 01:47:28

标签: android gradle android-gradle abi 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
        }
    }
}

正在生成正确命名的输出,当我使用apk分析器时,在lib目录下,armeabi-v7a apk将只包含lib / armeabi-v7a目录下的内容,同样适用于x86 apk。但是,armeabi-v7a还包含一个armeabi和x86文件夹,只包含一个仅包含MANIFEST.MF文件的META-INF文件夹,不是这样。

将这些多个apks上传到开发控制台时,每个拆分apk都列在

区分apk详细信息: 原生平台 无(+ 3常见)

和通用apk已经

原生平台 arm64-v8a,x86_64(共3个) arm和universal apk控制台上的错误是

“完全隐藏的APK 问题 此APK不会向任何用户投放,因为它完全被一个或多个具有更高版本代码的APK所遮蔽。 解析度 从您的版本中删除此APK或查看您在此版本中包含的APK的定位和版本代码。 “

当我在包装选项下添加

packagingOptions {
    exclude '**/x86/**'
}

然后生成的apks,split和universal,将不支持x86。但是,我没有看到为每个应用程序变体指定packagingOptions的方法,因此这不是一个可行的解决方案,并且它显然不是正确的方法,即使它是。问题似乎是apk被认为是支持x86只是因为它有一个x86目录,即使它大部分都是空的,并且这导致两个分裂apx通告他们支持完全相同的架构,当他们不支持时。

奇怪的是,通用apk说它支持arm64-v8a,armeabi,armeabi-v7a,x86,x86_64,这不是我在调用reset()并包含'x86','armeabi-v7a'之后的预期。 abi块。为了防止包含64位arch,我必须添加defaultConfig

ndk {
    abiFilters "armeabi-v7a", "x86"
}

但它仍然包含一个空的armeabi文件夹。

分割abi的正确方法是什么,以便开发控制台只能看到apk实际支持的内容?删除空目录的方法是否正确?有没有理由创建我可以追踪的空目录?

1 个答案:

答案 0 :(得分:0)

其他一些未使用的库正在生成空文件夹。通过在我复制了我的依赖项和拆分gradle代码的空白项目中的试错,我将其缩小到cwac的降价生成器。将它从.2升级到.4解决了这个问题。