android studio 签名打包教程

这是一份非常详细且适合新手的 Android Studio 签名打包(生成 APK/AAB)教程。

我们将分步进行,从创建签名密钥到最终生成安装包。

准备工作

在开始之前,请确保你的项目能够正常编译和运行。


第一部分:生成签名密钥(Keystore)

这个密钥是证明应用身份的唯一凭证,务必妥善保管。如果丢失,你将无法更新你的应用。

  1. 在 Android Studio 中,点击顶部菜单栏的 Build

  2. 选择 Generate Signed Bundle / APK

  3. 在弹出的窗口中,你会看到两个选项:

    • Android App Bundle (.aab):推荐用于上传到 Google Play。格式更小,包含所有设备配置信息,由 Google Play 商店动态生成适合用户设备的 APK。
    • APK (.apk):通用的安卓安装包,可以直接安装在设备上,用于其他应用市场或直接分发。

    我们先选择 APK 来进行演示,AAB 的流程几乎完全相同。点击 Next

  4. 现在你需要指定一个密钥存储路径。如果你还没有密钥,点击 Create new...

  5. 会弹出"New Key Store"窗口,你需要填写以下信息:

    • Key store path :密钥存储的位置和文件名。建议放在项目根目录下,并以 .jks 结尾(例如 my-release-key.jks)。点击右边的文件夹图标选择路径。
    • Password :为密钥库设置一个强密码。记住它!
    • Confirm:确认密码。
    • Alias :密钥的别名,可以理解为这个密钥的名字(例如 my-key-alias)。
    • Password (for Key) :为这个别名密钥设置一个密码。可以和上面的库密码相同,也可以不同。 同样要记住。
    • Confirm:确认密钥密码。
    • Validity (years):有效期(年)。Google 要求至少 25 年,建议设置为 25 年以上。
    • Certificate :证书信息。至少需要填写 First and Last Name(你的姓名或公司名),其他信息可选。

    填写完成后,点击 OK

  6. 系统会自动创建 .jks 文件,并回到上一个窗口,此时路径和别名等信息已经自动填充。再次输入密码。


第二部分:配置构建类型和签名

  1. 在填充好密钥信息的窗口下方,你需要选择 Build Variants (构建变体)。选择 release,因为我们要打正式发布包。

  2. 勾选 V2 (Full APK Signature)。这是 Android 7.0 引入的更安全、更快速的签名方案。建议始终勾选。

  3. 点击 Next


第三部分:选择构建版本和最终生成

  1. 现在你需要选择 Destination Folder,即 APK 文件的输出目录。建议选择一个你容易找到的文件夹,例如桌面的一个新建文件夹。

  2. Build Variants 这里再次确认你选择的是 release

  3. 点击 Finish

  4. Android Studio 会开始编译和打包。你可以在底部的 Build 窗口看到进度。

  5. 完成后,会有一个提示框弹出,告诉你构建成功。你可以点击链接直接定位到生成的 APK 文件。

恭喜!你已经成功生成了一个签名的 Release APK 文件,可以将其安装到设备或分发到各大应用市场了。


进阶:更安全的方式 - 使用环境变量(推荐)

将密码直接写在 IDE 中并不安全,特别是团队协作时。最佳实践是使用环境变量。

  1. 在项目的根目录 下创建一个名为 keystore.properties 的文件(此文件已被 .gitignore 排除,不会上传到代码库)。

  2. 在该文件中填入你的密钥信息:

    properties 复制代码
    storePassword=your_store_password
    keyPassword=your_key_password
    keyAlias=your_key_alias
    storeFile=your_store_file_path
    • storeFile.jks 文件相对于项目根目录的路径,例如 ../keys/my-release-key.jks
  3. Module 级build.gradle.kts (Kotlin DSL) 或 build.gradle (Groovy DSL) 文件顶部,android {} 块之前,添加以下代码来读取这个属性文件:

    Kotlin DSL (build.gradle.kts):

    kotlin 复制代码
    // 加载 keystore.properties 文件
    val keystorePropertiesFile = rootProject.file("keystore.properties")
    val keystoreProperties = java.util.Properties()
    keystoreProperties.load(java.io.FileInputStream(keystorePropertiesFile))
    
    android {
        ...
    }

    Groovy DSL (build.gradle):

    groovy 复制代码
    // 加载 keystore.properties 文件
    def keystorePropertiesFile = rootProject.file("keystore.properties")
    def keystoreProperties = new Properties()
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    
    android {
        ...
    }
  4. android {} 块内,配置 signingConfigsbuildTypes

    Kotlin DSL (build.gradle.kts):

    kotlin 复制代码
    android {
        signingConfigs {
            create("release") {
                keyAlias = keystoreProperties["keyAlias"] as String
                keyPassword = keystoreProperties["keyPassword"] as String
                storeFile = file(keystoreProperties["storeFile"] as String)
                storePassword = keystoreProperties["storePassword"] as String
            }
        }
    
        buildTypes {
            getByName("release") {
                signingConfig = signingConfigs.getByName("release")
                // 其他 release 配置,如混淆
                isMinifyEnabled = true
                proguardFiles(
                    getDefaultProguardFile("proguard-android-optimize.txt"),
                    "proguard-rules.pro"
                )
            }
        }
    }

    Groovy DSL (build.gradle):

    groovy 复制代码
    android {
        signingConfigs {
            release {
                keyAlias keystoreProperties['keyAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile file(keystoreProperties['storeFile'])
                storePassword keystoreProperties['storePassword']
            }
        }
    
        buildTypes {
            release {
                signingConfig signingConfigs.release
                // 其他 release 配置,如混淆
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
    }

配置完成后:

以后你只需要点击 Android Studio 右侧 Gradle 面板 -> 你的项目 -> app -> Tasks -> build -> assembleRelease ,或者直接使用 ./gradlew assembleRelease 命令,就可以一键生成带签名的 Release APK,无需再通过图形界面输入密码。

生成的 APK 文件路径通常在:app/build/outputs/apk/release/


关于 Android App Bundle (.aAB)

生成 AAB 的流程与 APK 完全一样 。唯一的不同是在第一步时选择 Android App Bundle

AAB 文件不能直接安装到手机 ,它只用于上传到 Google Play Console。Google Play 会利用这个 Bundle 为不同设备生成最优化的 APK。

重要提醒

  • 备份密钥 :将你的 .jks 文件和 keystore.properties(如果你用了)备份到绝对安全的地方(如加密的 U 盘、安全的云存储)。丢失意味着你无法对应用进行任何更新。
  • 不要泄露密码:切勿将密钥和密码提交到代码仓库(如 GitHub)。
  • 使用强密码:为密钥库和密钥使用复杂且唯一的密码。

希望这份教程对你有帮助!

相关推荐
csj507 小时前
android studio设置
android
hifhf7 小时前
Android Studio gradle下载失败报错
android·ide·android studio
正经教主7 小时前
【问题】Android Studio 2025版本汉化错误:invalid plugin descriptor
android studio·intellij-idea·汉化
陈老师还在写代码7 小时前
android studio,java 语言。新建了项目,在哪儿设置 app 的名字和 logo。
android·java·android studio
2501_916007479 小时前
Fastlane 结合 开心上架(Appuploader)命令行实现跨平台上传发布 iOS App 的完整方案
android·ios·小程序·https·uni-app·iphone·webview
listhi52011 小时前
Vue.js 3的组合式API
android·vue.js·flutter
用户693717500138411 小时前
🚀 Jetpack MVI 实战全解析:一次彻底搞懂 MVI 架构,让状态管理像点奶茶一样丝滑!
android·android jetpack
潮汐退涨月冷风霜12 小时前
VSCode SSH远程连接失败 最速解决方案
ide·vscode·ssh
2501_9159184112 小时前
iOS 上架应用市场全流程指南,App Store 审核机制、证书管理与跨平台免 Mac 上传发布方案(含开心上架实战)
android·macos·ios·小程序·uni-app·cocoa·iphone