5 Android

原文链接: https://tauri.app/distribute/sign/android/

要在 Play Store 上发布,你需要用数字证书为应用签名。

Android App Bundle 和 APK 在上传分发之前必须先签名。

Google 还为在 Play Store 中分发的 Android App Bundle 提供了额外的签名机制。 更多信息请参阅 Play 应用签名官方文档。

创建 keystore 与上传密钥

Android 签名需要一个 Java Keystore 文件,可以用官方 keytool CLI 生成:

操作系统

keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
keytool -genkey -v -keystore $env:USERPROFILE\upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload

该命令会把 upload-keystore.jks 文件存放在你的主目录中。 如果你想把它存到别处,请修改传给 -keystore 参数的值。

操作系统

1
/opt/android-studio/jbr/bin/keytool ...args

Android Studio 的目录路径取决于你的 Linux 发行版

1
/Applications/Android\ Studio.app/Contents/jbr/Contents/Home/bin/keytool ...args
1
C:\\Program Files\\Android\\Android Studio\\jbr\\bin\\keytool.exe ...args

更多信息请参阅官方文档。

配置签名密钥

创建一个名为 [project]/src-tauri/gen/android/keystore.properties 的文件,其中包含对你的 keystore 的引用:

password=<执行 keytool 时定义的密码>
keyAlias=upload
storeFile=<keystore 文件的位置,例如 /Users/<user name>/upload-keystore.jks 或 C:\\Users\\<user name>\\upload-keystore.jks>

你通常会在 CI/CD 平台生成这个文件。下面的片段包含一个 GitHub Actions 的示例 job 步骤:

1
2
3
4
5
6
7
- name: setup Android signing
  run: |
    cd src-tauri/gen/android
    echo "keyAlias=${{ secrets.ANDROID_KEY_ALIAS }}" > keystore.properties
    echo "password=${{ secrets.ANDROID_KEY_PASSWORD }}" >> keystore.properties
    base64 -d <<< "${{ secrets.ANDROID_KEY_BASE64 }}" > $RUNNER_TEMP/keystore.jks
    echo "storeFile=$RUNNER_TEMP/keystore.jks" >> keystore.properties

在这个示例中,keystore 通过 base64 -i /path/to/keystore.jks 导出为 base64,并设置为 ANDROID_KEY_BASE64 secret。

配置 Gradle 使用签名密钥

通过编辑 [project]/src-tauri/gen/android/app/build.gradle.kts 文件,配置 gradle 在 release 模式下构建应用时使用你的上传密钥。

  1. 在文件开头添加所需的 import:

    1
    
    import java.io.FileInputStream
    
  2. 在 buildTypes 块之前添加 release 签名配置:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    signingConfigs {
        create("release") {
            val keystorePropertiesFile = rootProject.file("keystore.properties")
            val keystoreProperties = Properties()
            if (keystorePropertiesFile.exists()) {
                keystoreProperties.load(FileInputStream(keystorePropertiesFile))
            }
    
            keyAlias = keystoreProperties["keyAlias"] as String
            keyPassword = keystoreProperties["password"] as String
            storeFile = file(keystoreProperties["storeFile"] as String)
            storePassword = keystoreProperties["password"] as String
        }
    }
    
    buildTypes {
        ...
    }
    
  3. 在 buildTypes 块的 release 配置中使用新的 release 签名配置:

    1
    2
    3
    4
    5
    
    buildTypes {
        getByName("release") {
            signingConfig = signingConfigs.getByName("release")
        }
    }
    

现在你的应用 release 构建就会自动签名了。

最后修改 September 26, 2026: 更新 (630b11f59)