将多个密度拆分APK发布到Play商店

时间:2017-04-20 15:25:52

标签: android gradle google-play android-gradle build.gradle

背景

我使用两种口味和5种密度分割为我的应用构建了10个APK:

productFlavors {
    flavorA {
        ...
    }
    flavorB {
        ...
    }
}

// Builds APKs for mdpi, hdpi, xhdpi, xxhdpi, and universal
splits {
    density {
        enable true
        exclude "ldpi", "xxxhdpi"
    }
}

每个APK都会获得一个唯一的版本代码。每个APK只包含一个与所需目标密度匹配的可绘制文件夹。

在Play商店开发者控制台中创建新版本后,所有APK都已成功上传。在查看发布时继续向前显示以下错误消息:

  

完全投影的APK PROBLEM

     

此APK不会向任何用户投放   因为它被一个或多个具有更高的APK完全遮蔽   版本代码。解决方案从您的发布或评论中删除此APK   您要包含的APK的定位和版本代码   这个版本。

在APK上运行aapt会显示所有目标屏幕和密度都相同:

  

支持屏幕:'小' '正常' '大' ' XLARGE'

     

支持 - 任何密度:' true'

     

密度:' 160' ' 240' ' 320' ' 360' ' 65534'

值得一提的是,清单文件中没有明确设置上述任何内容。

问题

我期待每个密度分割APK自动添加Google Play filter,但似乎并非如此。这是我需要手动完成的事情,如果是这样的话怎么办?我无法在文档中找到解释它应该如何工作的任何内容。或者我只是错过了其他的东西?

2 个答案:

答案 0 :(得分:0)

splits {
    density {
        enable true
        exclude "ldpi", "xxxhdpi" //IMPORTANT: only if you want to exclude some density
        compatibleScreens 'small', 'normal', 'large', 'xlarge' // IMPORTANT: all supported by your application
    }
}

答案 1 :(得分:-1)

事实证明,您必须包含compatibleScreens才能将正确的过滤器添加到清单文件中。更新构建脚本看起来像这样可以解决问题:

splits {
    density {
        enable true

        // Optional: Exclude any screen densities your app doesn't support
        exclude "ldpi", "xxxhdpi"

        // Add all screen sizes your app supports (mine is a wearable app)
        compatibleScreens 'small'
    }
}

在新的APK上运行aapt会产生与之前相同的输出,但Play商店不再抱怨阴影。您还会看到类似

的内容
Screen layouts: small@hdpi

在Google Play控制台的APK详细信息下。