申请加入公约 | 公约成员 | Wiki | 文章列表 | SDK黑名单
示例App | 开发者网站
-
- 纯净 Android 公约旨在规范(而非限制)Android app 开发,改善 Android 生态环境和用户体验.
-
- 纯净 Android 公约为开发者自愿加入,加入公约即视为开发者认可公约内容并自觉遵守.
-
- 只有完全符合公约的 App 才可以加入本公约.
-
*
加入公约后,App 可在任意位置注明已加入本公约.
-
- 公约会随技术发展调整,建议您注明所遵循的公约版本.
-
- 在编号后标有
*
的为建议支持特性,这些特性可以有效改善 App 性能和用户体验,但不强制要求支持.
- 在编号后标有
-
- 至少设置28的 target sdk(通过逆向修改的原作者不再维护的App可放宽至23).
-
- 如果App存在
native lib
,必须提供 64 位lib
.
- 如果App存在
-
- 安装包不得存在任何影响性能的安全措施
-
- 安装包必须已经
对齐
(zipalign).
- 安装包必须已经
-
- 大于1M的安装包使用
v2
或v3
签名.
- 大于1M的安装包使用
-
- 安装包的图标应适配自适应图标.
-
- 若项目目标设备版本包含或高于7.x,则应适配圆形图标.
-
- 用户应能且被告知能够自行选择是否接收推送.
-
- 关闭推送后不得在后台保留推送服务.
-
- 使用系统级统一推送服务时不得在后台保留推送服务.
-
- 使用独立的子进程完成推送服务.
-
- 推送通知的图标不得添加蒙板.
-
- 若通知推送内容有多个类别,则需适配
Notification Channel
.
- 若通知推送内容有多个类别,则需适配
-
- 数据收集包括对设备信息,App 使用记录,网络信息,错误日志等的收集
Bugly
,Crashlytics
等错误收集服务属于数据收集.
- 数据收集包括对设备信息,App 使用记录,网络信息,错误日志等的收集
-
- 用户应能自行选择是否上传数据,若用户拒绝上传数据,数据仅能存储在本地.
-
- 请在用户使用流量之前告知用户.
-
- 不得申请与App功能无关的权限.
-
- 不得为获取IMEI而申请电话权限..
-
- 用户拒绝权限不得影响其他无需该权限功能的运行.
-
- 仅允许在用户将要需要权限的功能之前申请权限
-
manifest
中不得出现重复的权限.
-
manifest
中不得出现无用权限.
-
*
在申请权限时,应尽量向用户说明权限用途.
-
- 尽可能使用
Shizuku
而不是ADB
或Root
- 尽可能使用
-
- 对于用户主动直接或间接生成的文件,应使用
FileProvider
而不是直接传递文件Uri
.
- 对于用户主动直接或间接生成的文件,应使用
-
- 对于无需共享的文件,应存储于
data
目录内.
- 对于无需共享的文件,应存储于
-
- 对于缓存文件,应存储于
cache
目录内.
- 对于缓存文件,应存储于
-
- 对于用户被动直接或间接产生的文件,应在公共存储内以易辨识的目录命名存储,单个App仅允许在根目录下建立一个子文件夹,若需要额外分类,请在子文件夹内再建立文件夹.
-
- 对于不是缓存的可清理文件,App应提供并告知用户其含有主动清理功能.
-
*
提高缓存的复用率,不要缓存仅会使用一次的内容.
-
- 用户应自行选择是否允许自启动.
-
- 在没有运行功能的情况下,App于后台静置12小时后,cpu时间应小于0:05s.
-
- 非功能必须不得申请常驻后台.
-
- 在App下载时使用使用
分割
(split).
- 在App下载时使用使用
-
- 尽量避免内存泄漏.制作对于
native
层的内存回收机制.
- 尽量避免内存泄漏.制作对于
-
*
支持documentLaunchMode
多窗口.
-
*
支持分屏功能.
-
*
为所有功能提供开关,允许用户关闭所有的功能.
-
*
合理使用子线程异步处理,避免在主线程上长时间处理任务而触发ANR.
-
- 使用原生WebView
-
*
支持纯 IPv6 网络
-
*
对图片等资源进行无损压缩.
-
*
使用Vector
矢量代替传统位图.
-
*
使用webp
代替png
.
-
*
对于大量使用的图片资源,使用含有特殊图案的字体文件代替传统位图.
-
*
广告提供明显的关闭方式.
-
- 广告不得遮挡任何按钮.
-
- 完全支持或完全不支持横屏.
-
*
兼容自由式多窗口模式.
-
- 视频支持画中画模式.
-
- 适配深色模式.
-
- 至少为
Android P
优化刘海屏
- 至少为