构建与发布

55 阅读2分钟

第八章:构建与发布

应用打包与签名

生成签名密钥

首先需要生成一个用于应用签名的密钥:

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 要求

  1. 应用图标和截图

    • 高清应用图标(512x512px)
    • 至少 2 张应用截图
    • 特色图片(1024x500px)
  2. 应用描述

    # 应用描述示例
    我们的应用是一款...
    
    主要特点:
    - 功能点1
    - 功能点2
    - 功能点3
    
    技术支持:support@example.com
    
  3. 隐私政策

    <privacy-policy>
      <section>
        数据收集和使用
        我们收集的信息包括...
      </section>
      
      <section>
        数据安全
        我们采用业界标准的安全措施...
      </section>
    </privacy-policy>
    

发布检查清单

  1. 应用基本信息

    • 应用名称
    • 包名唯一性
    • 版本号规范
  2. 技术要求

    • 适配 Android 版本范围
    • 权限使用合理性
    • 性能和内存占用
  3. 内容合规

    • 用户协议
    • 隐私政策
    • 敏感权限说明
  4. 发布材料

    应用信息:
      - 应用名称
      - 简短描述: 限制在 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 开发的魅力所在。建议从一个小项目开始,逐步应用所学知识。

记住,在开发过程中遇到问题时:

  1. 查阅官方文档
  2. 使用 Stack Overflow
  3. 加入开发者社区
  4. 阅读优秀开源项目的代码

祝一帆风顺!