Android 平台规范与 Google Play 上架合规指南
本文档为 MyPHP 维护者及后续 Coding Agent 提供 Android 平台开发、打包与 Google Play 上架合规的准则。
---
一、Google Play 核心政策与合规铁律
1. 严禁远程下发可执行代码(DDA 4.9 条红线)
- 条款规定:Google Play 开发者分发协议(DDA)第 4.9 条明确禁止应用从任何非 Google Play 渠道动态下载、安装或更新可执行代码(包括原生二进制、动态加载的 DEX 或篡改核心功能的脚本)。
- 合规做法:
- 应用的 PHP 源码、前端资源及扩展二进制必须作为离线静态 Assets 一同封装在安装包内;
- 严禁通过远程服务器下载外部
.so、.dex或在线替换 PHP 执行主入口; - 遵循与 React Native、Unity、Flutter 同类的内嵌解释运行时合规范式。
2. Android 15+ 16KB 内存页面对齐(2025 年强制新规)
- 规则要求:针对 Google Play 新应用及更新,编译的目标原生共享库(
.so)必须支持 16KB 物理内存页面(Page-size alignment 16384 bytes)。 - 技术实现:
- NDK 编译原生二进制时,必须显式传递链接参数:
-Wl,-z,max-page-size=16384; - 验证命令:
```bash
readelf -l build/android/libs/arm64-v8a/*.so | grep -E "LOAD|align"
```
确认所有 LOAD 段的对齐为 align 2**14(16384 字节)。
3. 正式发布签名(Release Keystore)
- 禁止项:严禁将使用默认
debug.keystore(密码android,别名androiddebugkey)签名的包提交到 Google Play Console,会被系统直接报错拒绝。 - 签名配置:
打包时通过环境变量指定开发者的生产签名证书:
```bash
export ANDROID_KEYSTORE_PATH="/path/to/your/release.jks"
export ANDROID_KEYSTORE_PASS="your-keystore-password"
export ANDROID_KEY_ALIAS="your-key-alias"
export ANDROID_KEY_PASS="your-key-password"
```
4. 提交格式要求(.aab 格式)
- Google Play 官方强制要求新上架应用必须提交 Android App Bundle (
.aab) 格式,单一.apk仅用于开发调试与离线分发。
---
二、Android UI 与渲染架构铁律
1. 纯 GPU 即时模式渲染,不退化为 WebView 伪原生:
- 界面使用 EGL + GLES 3.2 绘制在
SurfaceView,由AChoreographer120Hz/60Hz VSYNC 脉冲驱动; - 仅当明确需要展示 Web 页面时,才通过
Platform\Android\WebView叠放嵌入;
2. 软键盘与窗口策略(adjustNothing):
AndroidManifest.xml中 Activity 统一使用android:windowSoftInputMode="adjustNothing";- 保持底层 GPU 缓冲区尺寸永远恒定,软键盘弹起时由
WindowInsets.Type.ime()同步安全区,不让系统强行向上顶飞或缩放窗口;
3. 自适应图标(Adaptive Icon)规范:
- 必须配置 Android 8.0+(API 26+)自适应图标:
res/mipmap-anydpi-v26/ic_launcher.xml,区分独立的前景矢量图层(ic_launcher_foreground)与背景色图层(ic_launcher_background),适配圆形、圆角矩形等多种系统遮罩裁切。