【Tauri2】044 移动端Android的初步配置
前言
这篇就来简单看看能否在移动端运行
前置要求 | Taurihttps://v2.tauri.app/zh-cn/start/prerequisites/#%E7%A7%BB%E5%8A%A8%E7%AB%AF%E9%85%8D%E7%BD%AE要想在移动端,那么肯定需要移动端的环境配置
正文
Android 准备
笔者下载Android Studio,可以不需要下载,需要安装对应的工具下载 Android Studio 和应用工具 - Android 开发者 | Android Developershttps://developer.android.google.cn/studio?hl=zh-cn
安装完成后。
笔者SDK选择是15
以及NDK和其它工具。
配置环境变量ANDROID_HOME 和 NDK_HOME 环境变量
可能在配置上还有其他关于Android的问题,遇到了,可以搜一搜。
比如说,可能没有配置Java的环境。有问题,不要慌。
开始
笔者新建了一个项目ta。
进入目录ta,安装前端的依赖 pnpm install
初始化Android
pnpm run tauri android init
如下
居然下载这么多个 ,不管这些。
总之,就会ta/src-tauri/gen发现新的目录android
里面文件就比较多了。
然后运行命令
pnpm run tauri android dev
下面是关于android dev的选项
选项 | 描述 |
---|---|
[DEVICE] | 指定运行的设备名称 |
-f, --features [<FEATURES>...] | 激活的 Cargo 功能列表 |
-v, --verbose | 启用详细日志 |
-e, --exit-on-panic | 发生 panic 时退出 |
-c, --config <CONFIG> | 合并默认配置的 JSON/JSON5/TOML 文件或字符串 |
--release | 以发布模式运行 |
--no-dev-server-wait | 跳过等待前端开发服务器启动(环境变量:TAURI_CLI_NO_DEV_SERVER_WAIT=) |
--no-watch | 禁用文件监视 |
-o, --open | 打开 Android Studio 而不是在设备上运行 |
--force-ip-prompt | 强制提示输入用于连接开发服务器的 IP |
--host [<HOST>] | 使用指定的公共网络地址(默认:无) |
--no-dev-server | 禁用内置静态文件开发服务器 |
--port <PORT> | 指定静态文件开发服务器端口(默认 1430,环境变量:TAURI_CLI_PORT=) |
-h, --help | 打印帮助信息 |
-V, --version | 打印版本信息 |
会安装一大推东西,笔者没有截屏,就不展示了。
运行过程中,笔者在Windows操作系统中,遇到了如下问题
Finished `dev` profile [unoptimized + debuginfo] target(s) in 8.86sInfo symlinking lib "C:\\Users\\26644\\Desktop\\test\\ta\\src-tauri\\target\\aarch64-linux-android\\debug\\libta_lib.so" in jniLibs dir "C:\\Users\\26644\\Desktop\\test\\ta\\src-tauri\\gen/android\\app/src/main/jniLibs/arm64-v8a"ELIFECYCLE Command failed with exit code 4294967295.
Failed to create a symbolic link from "C:\\Users\\26644\\Desktop\\test\\ta\\src-tauri\\target\\aarch64-linux-android\\debug\\libta_lib.so" to file "C:\\Users\\26644\\Desktop\\test\\ta\\src-tauri\\gen/android\\app/src/main/jniLibs/arm64-v8a\\libta_lib.so" (file clobbering enabled):
Creation symbolic link is not allowed for this system.For Windows 10 or newer:
You should use developer mode.
See https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-developmentFor Window 8.1 or older:
You need `SeCreateSymbolicLinkPrivilege` security policy.
See https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/create-symbolic-linksError Failed to create a symbolic link from "C:\\Users\\26644\\Desktop\\test\\ta\\src-tauri\\target\\aarch64-linux-android\\debug\\libta_lib.so" to file "C:\\Users\\26644\\Desktop\\test\\ta\\src-tauri\\gen/android\\app/src/main/jniLibs/arm64-v8a\\libta_lib.so" (file clobbering enabled):
Creation symbolic link is not allowed for this system.For Windows 10 or newer:
You should use developer mode.
See https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-developmentFor Window 8.1 or older:
You need `SeCreateSymbolicLinkPrivilege` security policy.
See https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/create-symbolic-links
笔者也搜到了这个问题
[bug][v2][android] Failed to create a symbolic link · Issue #10937 · tauri-apps/taurihttps://github.com/tauri-apps/tauri/issues/10937实际上,解决方法也很简单
Creation symbolic link is not allowed for this system.
For Windows 10 or newer:
You should use developer mode.
显而易见,使用开发者模式,笔者直接启用
再次运行,没有问题
又下载了许多东西之后,打包了一些时间后,
最后,总之,结果如下
运行没有问题。
对于不同的操作系统,遇到的问题可能不一样。笔者没尝试过在其他系统写tauri,就不细说了。
笔者后面几次运行时,可能是笔者开了梯子
遇到了ip问题
Info Using 172.xx.xxxx.xx to access the development server.Info Replacing devUrl host with 172.xx.xxxx.xx.
If your frontend is not listening on that address,
try configuring your development server to use the `TAURI_DEV_HOST`environment variable or 0.0.0.0 as host.
然后就请求不到了,如果是这种情况,按照提示,需要配置TAURI_DEV_HOST
按照dev选项,修改一下运行的ip,即在package.json或者使用命令行
"tauri:android":"tauri android dev --host 127.0.0.1"
使用自己的手机运行
这其实是adb的功能,不细说
ADB安装及使用详解(非常详细)从零基础入门到精通,看完这一篇就够了-CSDN博客https://blog.csdn.net/Python_0011/article/details/132040387总之,安装成功之后,配置环境变量后,看看
➜ adb --version
Android Debug Bridge version 1.0.41
Version 36.0.0-13206524
Installed as F:\xdb\platform-tools-latest-windows\adb.exe
Running on Windows 10.0.26200
手机连接电脑的热点
手机的开发者选项,笔者的位置是设置->系统管理->开发者选项
,
启用无线调试,可以选择二维码配对,或者配对码配对
在Android Studio中,对应选择
笔者使用配对码配对,或者使用命令
adb pair 【ip】:【port】
手机会显示IP和port
使用无线方式连接Android设备进行调试的两种方法_无线调试怎么使用配对码配对设备-CSDN博客https://blog.csdn.net/huaqianzkh/article/details/143199399总之,结果如下,连接成功
再次运行
感觉又点大
什么都没有,居然有152MB ,不对劲。
对于项目,笔者感觉像是下了30G的东西,不知道下了什么。。。。。。,本来C盘的就不多。。。
打包
运行打包命令
pnpm run tauri android build
结果没问题,打包如下包
如果要具体指定打包某个架构,需要指定某个值,命令参考如下
选项 | 描述 |
---|---|
-d, --debug | 以调试模式构建 |
-v, --verbose | 启用详细日志 |
-t, --target [<TARGETS>...] | 指定构建目标(默认全部,支持:aarch64, armv7, i686, x86_64) |
-f, --features [<FEATURES>...] | 激活的 Cargo 功能列表 |
-c, --config <CONFIG> | 合并默认配置的 JSON/JSON5/TOML 文件或字符串 |
--split-per-abi | 按 ABI 分割 APK 和 AAB |
--apk | 构建 APK |
--aab | 构建 AAB |
-o, --open | 打开 Android Studio |
--ci | 跳过值提示(环境变量:CI=true) |
-h, --help | 打印帮助信息 |
-V, --version | 打印版本信息 |
指定-t ,一般手机的架构是aarch64(ARM),因此打包这个,即
pnpm tauri android build -t aarch64
结果如下
打包成功 ,打包了一个aab文件
笔者没学过android的东西,不知道是什么,参考如下
Android 安装类型详解:APK 与 AAB 的区别及适用场景分析 - 云原生实践https://www.oryoy.com/news/android-an-zhuang-lei-xing-xiang-jie-apk-yu-aab-de-qu-bie-ji-shi-yong-chang-jing-fen-xi.html好像这个aab需要 Google Play 动态生成APK才行,
2024保姆级aab上架GooglePlay教程(纯aab上架/已上架apk转aab上架)_google上架怎么用自己的签名文件-CSDN博客https://blog.csdn.net/weixin_41733225/article/details/130991637而且还很复杂,算了,打包成功APK,即
pnpm tauri android build -t aarch64 --apk
打包成功
开发者证书
笔者在自己手机上安装,报错了,还需要开发者证书,这么麻烦
学习了一下
如何申请Android打包apk的签名证书(保姆级教程)_安卓证书申请-CSDN博客https://blog.csdn.net/m0_58665272/article/details/138176962
安卓代码签名 | Taurihttps://v2.tauri.app/zh-cn/distribute/sign/android/
参考官网、直接输入
keytool -genkey -v -keystore ta.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload
随便写一写,无所谓
回答了一推东西之后,生成了ta.jks文件
在src-tauri/gen/android目录下,创建keystore.properties文件
笔者把生成的ta.jks也放到src-tauri/gen/android,内容如下
storePassword=123456
keyPassword=123456
keyAlias=upload
storeFile=ta.jks
在文件src-tauri/gen/android/app/build.gradle.kts中
内容修改,关键代码如下,具体操作查看官网,笔者也不知道,不便细说。
import java.util.Properties
import java.io.FileInputStream
....
android {....signingConfigs {create("release") {val keystorePropertiesFile = rootProject.file("keystore.properties")val keystoreProperties = Properties()if (keystorePropertiesFile.exists()) {keystoreProperties.load(FileInputStream(keystorePropertiesFile))}keyAlias = keystoreProperties["keyAlias"] as StringkeyPassword = keystoreProperties["keyPassword"] as StringstoreFile = file(keystoreProperties["storeFile"] as String)storePassword = keystoreProperties["storePassword"] as String}}buildTypes {...getByName("release") {signingConfig = signingConfigs.getByName("release")}}...
}....
运行,报错了
Execution failed for task ':app:validateSigningUniversalRelease'.
> Keystore file 'F:\Users\26644\RustProject\ta\src-tauri\gen\android\app\ta.jks' not found for signing config 'release'.
额,这个就很简单,把ta.jks放到app目录下
实际上还是可以看看代码,虽然是kotlin
signingConfigs {create("release") {val keystorePropertiesFile = rootProject.file("keystore.properties")val keystoreProperties = Properties()if (keystorePropertiesFile.exists()) {keystoreProperties.load(FileInputStream(keystorePropertiesFile))}keyAlias = keystoreProperties["keyAlias"] as StringkeyPassword = keystoreProperties["keyPassword"] as StringstoreFile = file(keystoreProperties["storeFile"] as String)storePassword = keystoreProperties["storePassword"] as String}}
首先,看 rootProject.file("keystore.properties"),这是指这个配置文件
然后声明了一个keystoreProperties 是Properties类型的
然后判断keystore.properties文件是否存在?
存在就读取这个配置文件
后面就是从配置文件中取值。应该是这么回事。
虽然没学过。哈哈哈哈哈。
打包,安装,结果如下
安装成功。没问题。
github工作流打包
tauri action 这个工作流好像不可以打包移动端,笔者搜了搜,发现如下问题中,有人给出了解决方案
[Feature Request] Add mobile build support · Issue #525 · tauri-apps/tauri-actionhttps://github.com/tauri-apps/tauri-action/issues/525笔者尝试了一下,
里面搞了一大推,加密base64,又解密,
但是笔者又一想,好像不需要那么麻烦,笔者什么都有,在本地能够打包,
因此,管他三七二十一,笔者现在又不是在做项目,这就很简单了,配置环境,运行打包,上传就可以了。
如果需要,参考上面的使用。
笔者就搞简单点,因此,综上所示,工作流如下
name: 安卓打包
on:workflow_dispatch:inputs:version:description: 打包required: truetype: booleandefault: falsejobs:build:runs-on: ubuntu-latestpermissions:contents: writesteps:- name: 读取仓库uses: actions/checkout@v4- name: 安装nodeuses: actions/setup-node@v4with:node-version: 23- name: 安装pnpmuses: pnpm/action-setup@v4with:version: 10- name: 安装javauses: actions/setup-java@v4with:distribution: 'temurin'java-version: '17'- name: 安装 Android SDKuses: android-actions/setup-android@v3- name: 安装 NDKrun: sdkmanager "ndk;27.2.12479018"- name: 安装 Rust 和 需要的架构uses: dtolnay/rust-toolchain@stablewith:targets: aarch64-linux-android- name: 安装依赖run: pnpm install- name: 打包apkrun: pnpm tauri android build -t aarch64 --apkenv:NDK_HOME: ${{ env.ANDROID_HOME }}/ndk/27.2.12479018- name: 上传构建产物uses: actions/upload-artifact@v4with:name: tapath: src-tauri/gen/android/app/build/outputs/apk/universal/release/app-universal-release.apk
笔者只安装了aarch64,需要什么,随机应变,笔者懒得下载。
java版本,笔者选择了java17,因为从build.gradle.kt中,可以发现
jvmTarget = "1.8"
表示Kotlin 编译器将生成与Java 8兼容的字节码,如果java太高了,会出现兼容问题。
因此选择了Java17。
笔者不是很了解Java,用哪一个更好,笔者也不知道。
总之,结果如下
打包用了8分钟左右
笔者把结果分享出来,测试一下,能否运行,笔者手机没问题。哈哈哈哈
ta.zip - 蓝奏云文件大小:6.7 M|https://www.lanzour.com/i7Pqo2w3g3yb
只打包了arm,可能不是所有手机都可以。
笔者会把ta这个项目删了,因此没分享网址。