Tauri 安卓踩坑日记 简单记录一下使用 Tauri 2.0 开发安卓应用踩的小坑
打包签名 apk 官网上其实写的很清楚,但是就是有两个 🐖 眼睛瞎了
首先你要有一个密钥库,可以通过 Android Studio 生成密钥,也可以用 keytool 生成,这里我们通过命令行使用 keytool
1 keytool -genkey -v -keystore $env:USERPROFILE \upload-keystore .jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload
你的 keytool 安装在 Android Studio 附带的 JDK 中,例如C:\\Program Files\\Android\\Android Studio\\jbr\\bin\\keytool.exe
然后在[project]/src-tauri/gen/android/keystore.properties
位置创建文件,这个文件包含对你密钥库的引用信息
注意你的密钥库和 keystore.properties 都应该是私密的
最后,我们只需要在 Gradle 中配置签名选项即可
在**[project]/src-tauri/gen/android/app/build.gradle.kts
**文件中,添加如下引用
1 2 import java.util.Propertiesimport java.io.FileInputStream
在buildTypes
代码块之前的signingConfigs
中添加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["keyPassword" ] as String storeFile = file(keystoreProperties["storeFile" ] as String) storePassword = keystoreProperties["storePassword" ] as String } } buildTypes { ... }
最后在buildTypes
块的release
中使用新的配置
1 2 3 4 5 buildTypes { getByName("release" ) { signingConfig = signingConfigs.getByName("release" ) } }
看上去很简单,但是就是有 🐖 分不清src-tauri\gen\android\build.gradle.kts
和src-tauri\gen\android\app\build.gradle.kts
注意着两个文件同名但路径不同,功能也不同
使用 HTTP 客户端插件 这里官网的文档说的不是很详细
我们使用的是 JavaScript API 版本,通过
安装插件
在官方文档中,给出的配置允许访问的 URL 的配置文件如下
1 2 3 4 5 6 7 8 9 10 { "permissions" : [ { "identifier" : "http:default" , "allow" : [ { "url" : "https://*.tauri.app" } ] , "deny" : [ { "url" : "https://private.tauri.app" } ] } ] }
但是我们找到src-tauri/capabilities
中,并没有发现base.json
文件
直接创建一个base.json
文件并粘贴代码肯定是错误的,我按照我对 Tauri 配置的诸多理解进行了修改,也依然报错
最简单的方式是直接在default.json
中复制代码块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 { "$schema" : "../gen/schemas/desktop-schema.json" , "identifier" : "default" , "description" : "Capability for the main window" , "windows" : [ "main" ] , "permissions" : [ "core:default" , "opener:default" , { "identifier" : "http:default" , "allow" : [ { "url" : "https://*.*" } , { "url" : "http://*.*" } ] } ] }
然后就可以正常使用了
使用 SQL 插件 构建配置 这个插件官方的文档也有点小问题
首先,在Cargo.toml
文件中添加以下内容
1 2 3 4 [dependencies.tauri-plugin-sql] features = ["sqlite"] # or "postgres", or "mysql" git = "https://github.com/tauri-apps/plugins-workspace" branch = "v2"
然后使用以下命令下载插件
1 npm add https://github.com/tauri-apps /tauri-plugin-sql
我们在 Tauri 中注册插件
1 2 3 4 5 6 7 fn main () { tauri::Builder::default () .plugin (tauri_plugin_sql::Builder::default ().build ()) .run (tauri::generate_context!()) .expect ("error while running tauri application" ); }
官网的说明就到这里,实际上,你还需要在src-tauri\src\lib.rs
中添加如下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #[tauri::command] fn greet (name: &str ) -> String { format! ("Hello, {}! You've been greeted from Rust!" , name) } #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run () { tauri::Builder::default () .plugin (tauri_plugin_http::init ()) .plugin (tauri_plugin_opener::init ()) .plugin (tauri_plugin_sql::Builder::default ().build ()) .invoke_handler (tauri::generate_handler![greet]) .run (tauri::generate_context!()) .expect ("error while running tauri application" ); }
类型转换 不知道为什么,我们通过execute
执行 sql 语句,拿回来的 Date 类型和 Boolean 类型都变成了字符串类型,而且 TypeScript 并看不出来变量的实际类型,导致类型转换的时候还要套一层unkown
1 const completed = JSON .parse (rawPlan.completed as unknown as string );
使用自定义动态库 先 🕊 着