应用过滤与多APK

小米应用商店支持Google Play的应用过滤与Multiple APK(多APK)规则,按照符合Google规范开发的Android的应用,可以分发给合适的用户,避免无法支持的设备下载到您的应用,影响应用口碑与评分。

应用商店的过滤

随着MIUI支持的设备越来越多,您也许会开发仅支持部分设备的应用,比如仅支持Android4.0以上系统,或者仅支持高通的GPU。应用过滤可以满足这方面的需求,保证您的应用在合适的设备上展示和分发。
目前,小米应用商店支持基于Manifest文件内容的的过滤项如下:
(您可以点击链接查看Google官方的文档)

Manifest项目 名称 说明
<supports-screens> 屏幕尺寸 supports-screens项声明了您的应用支持的屏幕尺寸等信息,如无特殊需求,可以无需指定,默认支持各种尺寸的设备。小米、红米系列手机均为normal尺寸
<compatible-screens> 兼容屏幕类型 【Google官方建议: 正常情况下,您不需要使用本项目】compatible-screens项可以详细声明应用兼容屏幕的尺寸、像素密度,考虑到Android设备分裂比较严重,除非您明确的了解本项目,请不要使用本项目,错误的声明了本项目,可能导致大量的用户无法下载您的应用。
<uses-sdk> Android系统版本 uses-sdk项声明了您的应用支持的API Level系统版本。您可以用android:minSdkVersion声明支持的最低系统版本。同时Google官方建议不要声明android:maxSdkVersion,该属性可能导致使用未来发布的Android系统的用户无法下载您的应用。您可以在这里找到Android版本号和API Level的对照关系
<supports-gl-texture> OpenGL纹理压缩 如果您需要支持高通、英伟达等不同GPU的OpenGL纹理压缩,需要声明此项。详情请查看Google官方文档

基于上述4项元素,您可以自由的指定应用支持的设备类型。不过对于绝大多数应用开发者来说,可能仅需要声明<uses-sdk>项即可。添加较多的限制可能会导致用户无法看到、下载您的应用

如下是一些错误实例,请勿模仿:

  • 声明了maxSdkVersion为14,意味着使用Android 4.0.3以后的版本的用户将无法看到您的应用。
  • 声明了supports-gl-texture为GL_EXT_texture_compression_dxt1,意味着仅Tagra芯片的手机能看到您的应用,比如小米手机3 TD版。
  • 仅声明了compatible-screens为screenSize=”small” screenDensity=”xhdpi”,意味着几乎没有人能看到您的应用,因为这条声明要求屏幕尺寸小于3寸,且像素密度大于320,不存在这种设备。

多APK支持 - Multiple APK

Google官方强烈建议用一个APK支持全部机型和版本的设备,但是在实际开发过程中,开发者因为APK包尺寸、系统支持等原因,需要为不同的设备提供不同的APK包。为了满足这一需求,Google设计了Multiple APK机制,通过多APK机制,可以实现以下功能:

  • 通过多APK机制,开发者可以发布多个同一package name的APK包
  • 每个APK可以支持不同的Android系统版本: <uses-sdk>
  • 每个APK可以支持不同的OpenGL纹理压缩: <supports-gl-texture>
  • 每个APK可以支持不同的屏幕尺寸: <supports-screens>和<compatible-screens>

多APK发布会增加后续开发者维护的成本,因此强烈建议用一个APK支持全部机型。仅当您的APK因为不同尺寸的资源文件而过大时考虑采用多APK机制。

如果您确定要使用多APK机制,请务必仔细阅读这篇文章。其中会提到一些重点注意事项:

  • 如果您使用关于屏幕尺寸的项目,请尽量不要同时引入<supports-screens>和<compatible-screens>,这两个项目中的定义可能会冲突。如果冲突,我们会优先采用不支持的结果,可能导致大量用户无法看到您的应用
  • 如果您使用关于API Level,请务必规划好VersionCode,并确保多个APK的VersionCode符合这一规则:支持更高版本系统的APK,有更高的VersionCode,这一设计是为了保证用户升级之后仍然可以获得应用的新版本。关于版本管理,请参考这篇文章
  •  多APK必须是同一个包名、同一个签名、不同的VersionCode

在规划中,未来我们会支持基于上述多APK机制,目前已经实现支持基于<uses-sdk>的多APK。您可以在发布应用的时候,选择发布多APK应用,完成发布。

关于应用过滤与多APK支持,Google官方主要提供了以下文档: