为 Tauri APK 签名
Tauri 是一个可以开发跨平台应用的框架,支持使用前端技术(如 HTML、CSS、JavaScript)构建桌面和移动端应用。在 Android 平台上,生成的 APK 文件需要进行签名才能在设备上安装或发布到应用商店(如 Google Play)。
本文介绍使用 keytool
进行签名。
预先准备
从 Android Developers 网站下载并安装 Android Studio。
安装后配置环境变量 JAVA_HOME
值为 Android Studio 安装目录下的 jbr 目录。
接着打开设置安装 SDK。
勾选以上项目进行安装。
安装后,再增加两个环境变量。
ANDROID_HOME
,值为 Android SDK Location,我的设置为D:\Android\Sdk
。NDK_HOME
,值为 Android SDK Location 下的 ndk 安装目录。我的设置为D:\Android\Sdk\ndk\29.0.13113456
。
初始化项目
# 创建 tauri 项
pnpm create tauri-app 目
# 安装依赖
pnpm install
# 增加 Android 平台编译目标
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
# 初始化 Android 开发配置
npx tauri android init
# 测试 Android
npx tauri android dev
# 构建 Android
npx tauri android build
如果直接进行构建,尽管可以生成 APK 文件,但在安装时系统会提示安装包无效,无法安装。
这是因为没有证书导致的。
Android 系统要求所有 APK 在安装前都必须经过数字签名。这是为了确保应用的完整性和来源的可信性。未签名或使用错误密钥签名的 APK 将无法被安装或更新。
生成签名
keytool
是 Java 数据证书管理工具。
可以在 Android Studio 安装目录下的 /jbr/bin/
目录中找到 keytool.exe
。
keytool -genkey -v -keystore 自定义的数据文件名称 -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias 自定义的证书别名
之后按照提示进行输入即可。
如果是要上架应用商店的,要如实填写。否则可能会导致因信息不对从而上架失败。
输入完毕,确认后,工具会要求设置密码。记住密码,后面会用到。
完成以上操作后,在当前工作目录下会生成一个 自定义的数据文件名称.keystore
文件。
打包时签名
创建 src-tauri/gen/android/keystore.properties
文件。
文件内容如下:
storePassword=数据文件密码
keyPassword=证书密码
keyAlias=自定义的证书别名
storeFile=自定义的数据文件名称.keystore
需要注意,在 windows 下,storeFile 路径需要 C:\\Program Files\\Android
这样的格式。
随后找到 src-tauri/gen/android/app/build.gradle.kts
文件。
增加以下内容:
import java.io.FileInputStream
// ...
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
}
}
// ...
// ...
signingConfig = signingConfigs.getByName("release")
配置完毕之后,重新打包,APK 安装成功。