环境与输入
需要JDK17、Android SDK compile36、对应NDK、Python3.11、Gradle8.13。重建原生媒体还需Bash/make/tar/Perl,Pillow兼容库需要相应CMake。已有原生输出时可以只构建APK;全新环境的AGP/Gradle/Python依赖需缓存或仓库访问,只有保留原生源归档部分明确支持无网络重建,不能声称整APK在任意空环境离线构建。
APK release构建需要原签名文件和安全提供的TINGWEN_SIGNING_PASSWORD。脚本若缺原签名或密码会直接失败,不随意创建新密钥替换;该密钥未上传GitHub。调试构建使用调试签名,不可覆盖原正式发布。
可复核的构建步骤
# 从相应Android工程根目录执行,路径按实际环境提供
export ANDROID_SDK_ROOT=/path/to/android/sdk
export ANDROID_NDK_HOME=/path/to/android/ndk/28.2.13676358
export TINGWEN_NDK_ROOT="$ANDROID_NDK_HOME"
export TINGWEN_CMAKE_BIN="$ANDROID_SDK_ROOT/cmake/3.22.1/bin/cmake"
bash scripts/build-media.sh
bash scripts/build-pillow-libs.sh
python3 native-compat/verify_libraries.py
# 原签名及密码由维护人员安全恢复,本文不展示密钥值
bash scripts/build-apk.sh release
以上重建脚本按当前工程保留的macOS工具链路径编写;Linux/Windows不能仅改环境变量便假定原生重建可用,需要适配对应NDK host路径。build-pillow-libs读取TINGWEN_NDK_ROOT及ANDROID_SDK_ROOT/ANDROID_HOME,CMake可由TINGWEN_CMAKE_BIN指定。build-apk选择环境TINGWEN_JAVA_HOME或保留Zulu工具链,设置项目Gradle缓存;存在保留Gradle则使用,否则wrapper。release执行assembleRelease,debug执行assembleDebug及assembleDebugAndroidTest。产物默认在app/build/outputs/apk/release/app-release.apk;脚本本身不自动复制到dist、桌面或GitHub。
APK核验顺序
- aapt读取applicationId、versionName/code、应用标签与Manifest provider。
- apksigner验证实际签名,核对原证书公开指纹。
- zipalign
-c -P 16 4核对ZIP对齐;另执行原生ELF/符号检查。 - 解包比较45项资源与最终源文件、4个ABI媒体程序及Python归档业务;正式版检查无trial_limits,试用版检查额度常量与专属路由。
- 保存SHA256和实际字节数,再复制桌面、比对桌面与构建完全一致。
- 完成源/文档归档,排除jks、密码、Key、用户任务、草稿、ledger、日志及缓存;不重写原Git历史。
- 推main,Release指定已验证源码提交,上传ASCII文件名APK、SHA256SUMS与验证JSON。
- 用GitHubAPI核对Release非draft、目标提交、附件uploaded和服务端SHA256与桌面一致;正式版作为latest,试用版独立发布。
本次实际产物
| 版本 | 文件/Release下载 | 字节数 | SHA256 |
|---|---|---|---|
| 正式 | tingwen-android-v1.0.2.apk | 44,472,826 | aaa415bd54c1d48c3fd67099d12e37ca240ba4814fb60b7e2e2273182bd53b9a |
| 试用 | tingwen-android-trial-v1.0.2.apk | 44,492,954 | 0357aa2c91858797e2f87ef426a324b33fb00795c602d2295d7b9e1b5b3dbab1 |
公开证书SHA256为88184f3d44642ff29c1dba48018fa123ba8d2dcded94d83b6ad26e67a1a865f7,RSA3072,APK v2核验通过。该指纹不是私钥;它可帮助判断是否沿用原发布身份。同一应用覆盖升级须保持包名/密钥并提高versionCode。
项目GitHub为私有仓库;版本源码和附件链接需对应权限。本轮源归档不含用户作品或敏感运行资料,APK仅包含产品资源和代码。正式/试用独立包可并存;两者同code10002不相互覆盖。