【Android】正式打包发布
在 Android 工程里,Debug 与 Release 是 Gradle 内置好的 Build Variant(构建变体),它们在编译器、签名、性能、安全以及发布等方面都存在差异。
Build Variant 是由 Build Type(debug / release / 你自定的 staging…)和 Product Flavor(如果有,例如 free / paid)组成的,默认工程没有任何 flavor,所以新建工程项目都只有 debug 和 release 两种变体。
一、Debug 与 Release 区别
1、用途
- Debug 版本用于开发调试阶段。
- Release 版本用于正式发布到应用商店(即“正式版本”)。
2、 签名秘钥
签名密钥是一个加密文件(通常为 .jks 或 .keystore 格式),包含私钥(用于签名)和公钥(用于验证)。
(1) Debug 版本(调试秘钥)
使用 Android Studio 自动生成的调试密钥签名(debug.keystore),有效期 30 年,所有人机器上一样,用于开发阶段临时签名,不可用于发布。
(2)Release 版本(发布秘钥)
使用开发者自己提供并保管的正式密钥(xxx.jks 或 .keystore),用于应用商店发布的 APK/AAB 签名,必须严格保密。
3、构建开关与编译器优化
(1)Debug 版本
- isDebuggable = true (默认)
进程可被 jdwp/lldb attach,断点、Profiler 全部可用。默认为true,BuildConfig.DEBUG = true。 - isMinifyEnabled = false(默认)
不跑 R8/ProGuard,代码保持原样,编译快。 - isShrinkResources = false (默认)
不删除未用资源,包体大。
(2)Release 版本
- isDebuggable = false
进程拒绝调试,Play 商店会拒绝带 isDebuggable = true 的 APK。 - isMinifyEnabled = true,并配置 proguardFiles
开启 R8 压缩、混淆、优化,体积减小 20~50%,也增加逆向难度。 - isShrinkResources = true
把未用图片、字符串一并裁掉。
4、性能
-
Debug 版本
未启用代码优化(如 ProGuard/R8),运行时解释执行多,可能运行较慢、出现卡顿现象。 -
Release 版本
经过代码优化,运行速度更快,内存占用更低。启用混淆后的代码更难以逆向工程。
5、调试与日志
-
Debug 版本
包含完整的调试符号(如行号、变量名),方便断点调试。默认启用 Log.d()、Log.v() 等详细日志,方便排查问题(adb logcat 直接看),但敏感信息易泄露。支持 Android Profiler、内存分析器等工具。 -
Release 版本
删除调试符号和日志代码(如 Log 语句默认被移除),无法通过 Android Studio 附加调试器。
