第八章:构建与发布
应用打包与签名
生成签名密钥
首先需要生成一个用于应用签名的密钥:
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
配置签名信息
在 app/build.gradle 中配置签名信息:
android {
signingConfigs {
release {
storeFile file("my-release-key.jks")
storePassword "your_key_store_password"
keyAlias "my-alias"
keyPassword "your_key_password"
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
}
代码混淆与优化
ProGuard 配置
在 proguard-rules.pro 文件中配置混淆规则:
# 保留模型类
-keep class com.example.app.data.model.** { *; }
# 保留 Retrofit 接口
-keep interface com.example.app.data.api.** { *; }
# 保留自定义View
-keep class com.example.app.ui.widget.** { *; }
# 第三方库混淆规则
-keepclassmembers class * implements android.os.Parcelable {
static ** CREATOR;
}
-keepattributes Signature
-keepattributes *Annotation*
资源优化
在 build.gradle 中配置资源优化:
android {
buildTypes {
release {
shrinkResources true // 移除未使用的资源
minifyEnabled true // 启用代码混淆
}
}
}
发布流程
生成 Release APK
# 使用 Gradle 命令
./gradlew assembleRelease
# 或使用 Android Studio
Build -> Generate Signed Bundle / APK
多渠道打包
使用 Flavor 配置不同渠道:
android {
flavorDimensions "version"
productFlavors {
google {
dimension "version"
manifestPlaceholders = [CHANNEL_VALUE: "google"]
}
xiaomi {
dimension "version"
manifestPlaceholders = [CHANNEL_VALUE: "xiaomi"]
}
huawei {
dimension "version"
manifestPlaceholders = [CHANNEL_VALUE: "huawei"]
}
}
}
应用商店审核要点
Google Play Store 要求
-
应用图标和截图
- 高清应用图标(512x512px)
- 至少 2 张应用截图
- 特色图片(1024x500px)
-
应用描述
# 应用描述示例 我们的应用是一款... 主要特点: - 功能点1 - 功能点2 - 功能点3 技术支持:support@example.com -
隐私政策
<privacy-policy> <section> 数据收集和使用 我们收集的信息包括... </section> <section> 数据安全 我们采用业界标准的安全措施... </section> </privacy-policy>
发布检查清单
-
应用基本信息
- 应用名称
- 包名唯一性
- 版本号规范
-
技术要求
- 适配 Android 版本范围
- 权限使用合理性
- 性能和内存占用
-
内容合规
- 用户协议
- 隐私政策
- 敏感权限说明
-
发布材料
应用信息: - 应用名称 - 简短描述: 限制在 80 字以内 - 完整描述: 限制在 4000 字以内 视觉材料: - 应用图标: 512x512 - 特色图片: 1024x500 - 应用截图: 至少 2 张 其他材料: - 隐私政策链接 - 支持邮箱 - 官网地址
上架后维护
// 版本更新检查
class UpdateChecker {
fun checkForUpdates() {
// 检查新版本
val currentVersion = BuildConfig.VERSION_NAME
val latestVersion = fetchLatestVersion()
if (currentVersion < latestVersion) {
showUpdateDialog()
}
}
private fun showUpdateDialog() {
// 显示更新提示
}
}
至此,我们完成了从 Web 前端开发者转向 Android 开发的全部基础知识学习。这个过程可能看起来很长,但很多概念都是相通的。随着实践的深入,你会发现 Android 开发的魅力所在。建议从一个小项目开始,逐步应用所学知识。
记住,在开发过程中遇到问题时:
- 查阅官方文档
- 使用 Stack Overflow
- 加入开发者社区
- 阅读优秀开源项目的代码
祝一帆风顺!