Notes Since Tauri has been upgraded to v2, this post will primarily focus on version v2.
Project Creation
Packaging Icon Generate icons with various resolutions using the built-in tool in Tauri:
1 pnpm tauri icon /path/to/app-icon.png
First, initialize the Android project (this will generate the src-tauri/gen/android/app folder):
Prerequisites:
Prerequisites
Java must be version 17 or higher
You need to set ANDROID_HOME and NDK_HOME. You can download via Android Studio and then specify the environment variables.
For example, my ANDROID_HOME: D:\applications\sdk\
My NDK_HOME: D:\applications\sdk\ndk\29.0.13113456
1 2 3 tauri android build # 打包为apk文件 pnpm tauri android build --apk
Points to note when packaging for Android:
You can use the JDK’s built-in signature generator or use the official command. If the .jks file already exists, you will be prompted to enter the previous key password before generating a new one (it is recommended to create a new jks file).
1 keytool -genkey -v -keystore $env:USERPROFILE\upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload
- Configuration
Create a keystore.properties file under src-tauri/gen/android.
1 2 3 4 storeFile =upload-keystore.jks # 刚刚生成的文件名 storePassword =123456 # 你指定的密钥 keyAlias =upload # 别名,刚才命令最后一个参数就是 (-alias upload) keyPassword =123456 # 你指定的密钥
Add the path to the keystore configuration file in the build.gradle.kts file located at src-tauri/gen/android/app/.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 android { ... 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["keyPassword"] as String storeFile = file(keystoreProperties["storeFile"] as String) storePassword = keystoreProperties["storePassword"] as String } } ... buildTypes { getByName("debug") { ... } getByName("release") { signingConfig = signingConfigs.getByName("release") ... } } }
Gradle Dependency Download Timeout Issues
Modify the .kts files under src-tauri/gen/android.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 buildscript { repositories { mavenCentral() maven { url= uri("https://maven.aliyun.com/repository/google")} maven { url= uri("https://maven.aliyun.com/repository/gradle-plugin")} maven { url = uri("https://maven.aliyun.com/repository/public") } // maven { url= uri("http://maven.aliyun.com/nexus/content/groups/public/")} maven { url= uri("https://maven.aliyun.com/repository/google")} // maven { url = uri("http://maven.aliyun.com/nexus/content/repositories/jcenter") } // flatDir { dirs("libs") } google() } dependencies { classpath("com.android.tools.build:gradle:8.5.1") // classpath("com.android.tools.build:gradle:8.9") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.25") } } allprojects { repositories { maven { url= uri("https://maven.aliyun.com/repository/google")} maven { url= uri("https://maven.aliyun.com/repository/gradle-plugin")} maven { url = uri("https://maven.aliyun.com/repository/public") } // maven { url= uri("http://maven.aliyun.com/nexus/content/groups/public/")} maven { url= uri("https://maven.aliyun.com/repository/google")} // maven { url = uri("http://maven.aliyun.com/nexus/content/repositories/jcenter") } // flatDir { dirs("libs") } // maven { url= uri("https://maven.aliyun.com/repository/google")} // maven { url= uri("https://maven.aliyun.com/repository/gradle-plugin")} // maven { url = uri("https://maven.aliyun.com/repository/public") } google() mavenCentral() } } tasks.register("clean").configure { delete("build") }
The output location for the packaged APK file is: src-tauri\gen\android\app\build\outputs\apk\universal\release
Not yet covered.