Rust Trip 系列
Coding

Tauri2.0的安卓开发

本文主要介绍了如何在Tauri2.0Beta中进行安卓APP开发

Hako Chest
更新于
37031 字
27 min read
Tauri2.0的安卓开发

下面的内容主要是我在tauri2.0还在beta的时候写的,实际上正式版之后会省事很多,但是packageInfo的问题还是需要手动配置

很多内容重复且没有必要,但是我也懒得去删减了,就当作是一个历史的杂记吧,我发出来也只是方便自己来配置packageInfo

今日就简单记录一下tauri的安卓APP开发吧

环境准备与一般工作流

  1. NDK_HOME
  2. ANDROID_HOME
  3. JAVA_HOME

唯一比较麻烦的一点就是每次更改或者新增环境变量都需要重启一次电脑才能生效

踩坑都是出现的一些能够熟练解决的问题

gradle默认生成的版本是8.0,然后会提示不支持jdk22,后面去安装jdk17再改一下环境变量就解决了

主要要用到的网站就先列出来了

NDK JDK17

实质上因为之前配置过基础的Android Studio以及对应的ADB的Pixel模拟器,也就省掉了从零环境开始的踩坑,只踩了一部分的坑

指令上的工作流是这样的

npm create tauri-app@latest -- --beta
; 后面补充,这里以后用 -- --rc
; 然后配置一些常见参数

cd tauri-app
npm i
npm run tauri android init
npm run tauri android dev

; 进行开发,开发结束后

npm run tauri android build


; 如果是rust前端的话,那就把npm run 改成cargo即可

如果要发行的话,老生常谈的,还是要更改tauri.conf.json里面的一些com.tauri.dev成自己的,然后要删除gen文件夹才能再次init,之后才能执行build指令

后记:新的报错

PS D:\CodeZone\RustZone\ApplicationZone\jluvcard_shower> cargo tauri android build
    Error The bundle identifier "com.jluvcardshower.app" set in `tauri.conf.json identifier`. The bundle identifier string must contain only alphanumeric characters (A-Z, a-z, and 0-9), hyphens (-), and periods (.).

好不容易build成功了,手机上安装的时候提示package info is null

然后在stackoverflow上面找到了同样的问题,但是没有得到很好的回答

我觉得要么是少签名,要么是tauri.conf.json少东西,先看看签名问题吧


按照官网提供的docs,大概分为如下几步

  1. keytool生成upload密钥(应该是为了上传google play而做准备,但是都是rsa签名,无所谓了能用就行)
    1. 再一次遇到了path过长的问题,直接去改注册表即可,以后应该需要一个注册表,或者说,环境变量设置修改工具,原理就是直接改注册表
keytool -genkey -v -keystore %userprofile%\upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload

因为注册表还没有生效,我就直接去jdk的bin文件夹直接运行了,好在对不同地方的运行没有影响

  1. 配置local.properties (没有的话,就在gen/andorid里面新建一个)

直接这样写就好

storePassword=******
keyPassword=******
keyAlias=upload
storeFile=C:\\Users\\Chest\\upload-keystore.jks
  1. 配置build.gradle.kts (注意!是在app文件夹内)

首先开头加上这些

import java.util.Properties
import java.io.FileInputStream

val localPropertiesFile = rootProject.file("local.properties")
val localProperties = Properties()
localProperties.load(FileInputStream(localPropertiesFile))

然后下面andorid里面配置这些

    signingConfigs {
      create("release") {
          keyAlias = localProperties["keyAlias"] as String
          keyPassword = localProperties["keyPassword"] as String
          storeFile = file(localProperties["storeFile"] as String)
          storePassword = localProperties["storePassword"] as String
      }
    }

最后在buildTypes里面的getByName("release")里面加上一行就好了

signingConfig = signingConfigs.getByName("release")

最后看看能不能行吧,这个打包发行也挺慢的,一次需要六七分钟左右

以后看看是不是有哪些地方还可以优化的

这次打包很快!成功了!可以安装了!

现在来测试一下能否只去更改好少量的配置就实现多端的跨平台

直接运行npm run tauri dev 能够在桌面平台跑起来,这说明成功了!

那也试试build吧,绝对能行,然后爆了一个Network Error,下不了nsis,两次不行

Downloading https://github.com/tauri-apps/nsis-tauri-utils/releases/download/nsis_tauri_utils-v0.3.0/nsis_tauri_utils.dll
    Error failed to bundle project: `https://github.com/tauri-apps/nsis-tauri-utils/releases/download/nsis_tauri_utils-v0.3.0/nsis_tauri_utils.dll: Connection Failed: Connect error: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 (os error 10060)`

那就说明也没啥大问题了,直接开始移植吧

刚到官网了解到还有AstroDB这个东西啊

七月份新增的部分

这个时候我已经确立的前端内容的主导地位了,所以,直接clone自己之前的astro项目,然后把src-tauri复制过来 即可

ignore加上target,似乎不用,因为里面有,之前是复制求和的,我看了下完整的项目是这样的

# build output
dist/
.output/
.json/

# dependencies
node_modules/

# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
yarn.lock
package-lock.json

# environment variables
.env
.env.production

# macOS-specific files
.DS_Store

# ignore .astro directory
.astro

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

然后package.json新增如下内容

  "scripts": {
    "tauri": "tauri"
  },

  "dependencies": {
    "@tauri-apps/api": ">=2.0.0-beta.0",
    "@tauri-apps/plugin-shell": ">=2.0.0-beta.0"
  },

  "devDependencies": {
    "@tauri-apps/cli": ">=2.0.0-beta.0",
    "internal-ip": "^7.0.0"
  }

我印象中到后面无法显示的时候还是要解决一些问题的,需要暴露其他端口IPV4好像是,这个再看之前配置即可

再去配置tauri,好像就不需要了,但是记忆中确实有东西是需要开口的

哦哦,那就应该是桌面端不能用localhost?绝对不是

PS D:\CodeZone\WebZone\ApplicationZone\hakomori> npm i
npm error code ECONNRESET
npm error syscall read
npm error errno ECONNRESET
npm error network request to https://registry.npmjs.org/@astrojs%2fmdx failed, reason: read ECONNRESET
npm error network This is a problem related to network connectivity.
npm error network In most cases you are behind a proxy or have bad network settings.
npm error network If you are behind a proxy, please make sure that the
npm error network 'proxy' config is set properly.  See: 'npm help config'
npm error A complete log of this run can be found in: C:\Users\Chest\AppData\Local\npm-cache\_logs\2024-07-16T14_19_08_157Z-debug-0.log
PS D:\CodeZone\WebZone\ApplicationZone\hakomori> npm i
npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm warn deprecated npmlog@5.0.1: This package is no longer supported.
npm warn deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm warn deprecated are-we-there-yet@2.0.0: This package is no longer supported.
npm warn deprecated gauge@3.0.2: This package is no longer supported.

added 763 packages, and audited 764 packages in 1m

272 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
PS D:\CodeZone\WebZone\ApplicationZone\hakomori> npm run tauri android init

> astroplate@3.4.5 tauri
> tauri android init

Generating Android Studio project...
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri" relative to "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\gen/android\\hakomori" is "..\\..\\..\\"
victory: Project generated successfully!
    Make cool apps! 🌻 🐕 🎉
PS D:\CodeZone\WebZone\ApplicationZone\hakomori> npm run tauri android dev

> astroplate@3.4.5 tauri
> tauri android dev

    Info Starting emulator Pixel_3a_API_34_extension_level_7_x86_64
    Info Waiting for emulator to start...
    Info Waiting for emulator to start...
    Info Waiting for emulator to start...
    Info Detected connected device: Pixel_3a_API_34_extension_level_7_x86_64 (sdk_gphone64_x86_64) with target "x86_64-linux-android"
    Info Using 192.168.0.112 to access the development server.
    Running BeforeDevCommand (`npm run dev`)

> astroplate@3.4.5 dev
> yarn generate-json && astro dev

yarn run v1.22.22
$ node scripts/jsonGenerator.js
Done in 0.75s.
    Warn Waiting for your frontend dev server to start on http://192.168.0.112:4321/...
22:29:46 [WARN] [config] The feature "astro:env getSecret" is experimental and subject to change (used by @astrojs/vercel/serverless).
22:29:46 [types] Added src/env.d.ts type declarations.
22:29:46 [vite] Port 4321 is in use, trying another one...

 astro  v4.11.5 ready in 4048 ms

 Local    http://localhost:4322/
 Network  use --host to expose

    Warn Waiting for your frontend dev server to start on http://192.168.0.112:4321/...
    Warn Waiting for your frontend dev server to start on http://192.168.0.112:4321/...
22:30:00 watching for file changes...
    Warn Waiting for your frontend dev server to start on http://192.168.0.112:4321/...

我就知道,所以还需要改一下tauri.confi里面的build"beforeDevCommand": "npm run dev --host",不对不对,是package.json里面去改"dev": "yarn generate-json && astro dev --host",

然后就开始愉悦下包了

实际上纯web端的话,你这个项目自己npm run dev也就行了

致敬传奇下包超时

Exception in thread "main" java.io.IOException: Downloading from https://services.gradle.org/distributions/gradle-8.4-bin.zip failed: timeout
        at org.gradle.wrapper.Download.downloadInternal(Download.java:110)
        at org.gradle.wrapper.Download.download(Download.java:67)
        at org.gradle.wrapper.Install$1.call(Install.java:68)
        at org.gradle.wrapper.Install$1.call(Install.java:48)
        at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:69)
        at org.gradle.wrapper.Install.createDist(Install.java:48)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:107)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:63)
Caused by: java.net.SocketTimeoutException: Connect timed out
        at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:551)
        at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:602)
        at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
        at java.base/java.net.Socket.connect(Socket.java:633)
        at java.base/sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:304)
        at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:178)
        at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:534)
        at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:639)
        at java.base/sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:948)
        at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:762)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1688)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589)
        at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:224)
        at org.gradle.wrapper.Download.downloadInternal(Download.java:87)
        ... 7 more
    Error Failed to assemble APK: command ["D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\gen/android\\gradlew.bat", "--project-dir", "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\gen/android"] exited with code 1: command ["D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\gen/android\\gradlew.bat", "--project-dir", "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\gen/android"] exited with code 1

这种手机web-app的开发,实际上还是适合webview,这里套壳就完事了

第二次也超时了,我试试关一下代理,还是下不下来,这个就纯玄学了

Compiling hakomori v0.0.0 (D:\CodeZone\WebZone\ApplicationZone\hakomori\src-tauri)
   Compiling tauri-runtime-wry v2.0.0-beta.20
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 15.74s
    Info symlinking lib "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\x86_64-linux-android\\debug\\libhakomori_lib.so" in jniLibs dir "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\gen/android\\app/src/main/jniLibs/x86_64"
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\x86_64-linux-android\\debug\\libhakomori_lib.so" requires shared lib "libandroid.so"
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\x86_64-linux-android\\debug\\libhakomori_lib.so" requires shared lib "libdl.so"
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\x86_64-linux-android\\debug\\libhakomori_lib.so" requires shared lib "liblog.so"
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\x86_64-linux-android\\debug\\libhakomori_lib.so" requires shared lib "libm.so"
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\x86_64-linux-android\\debug\\libhakomori_lib.so" requires shared lib "libc.so"
    Info symlink at "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\gen/android\\app/src/main/jniLibs/x86_64\\libhakomori_lib.so" points to "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\x86_64-linux-android\\debug\\libhakomori_lib.so"
Downloading https://services.gradle.org/distributions/gradle-8.4-bin.zip

输入网址https://services.gradle.org/distributions/gradle-8.4-bin.zip,包能下载下来的吧,10s完事了,要么就是vscode这里的命令行没有配置代理,我这边五五开,两次代理都失败了,两次裸连也是,127MB

我觉得这个包下不下来应该是最近才有的事情

模拟器重启了,实际上也无所谓了

手机套壳之后怎样都行

但是第六次成功了23333,这种就是多试

Downloading https://services.gradle.org/distributions/gradle-8.4-bin.zip
............10%............20%.............30%............40%.............50%............60%.............70%............80%.............90%............100%
<-------------> 0% INITIALIZING [857ms]
<-------------> 0% CONFIGURING [1m 16s]
> IDLE
> IDLE
> Building buildSrc > :buildSrc > Resolve files of :buildSrc:classpath > kotlin-util-io-1.9.10.jar
> Building buildSrc > :buildSrc > Resolve files of :buildSrc:classpath > kotlin-gradle-plugin-idea-proto-1.9.10.jar > 235.9 KiB/2.7 MiB downloaded
> Building buildSrc > :buildSrc > Resolve files of :buildSrc:classpath > kotlin-gradle-plugin-1.9.10-gradle81.jar > 5.9 MiB/13.3 MiB downloaded
> Building buildSrc > :buildSrc > Resolve files of :buildSrc:classpath > kotlin-compiler-embeddable-1.9.10.jar > 397.4 KiB/55.8 MiB downloaded
> IDLE
> IDLE
> IDLE
> IDLE

然后就是开起来了

> IDLE                                                       Compiling vswhom-sys v0.1.2[3m 39s]
   Compiling ring v0.17.8TING [3m 39s]
   Compiling rustls-pki-types v1.7.0
   Compiling spin v0.9.8
   Compiling untrusted v0.9.0
   Compiling rustls v0.23.11
   Compiling subtle v2.6.1ING [3m 39s]
   Compiling zeroize v1.8.1
   Compiling wry v0.41.0
   Compiling webpki-roots v0.26.3 40s]
   Compiling rustls-pemfile v2.1.227.0.0.1:50283 conn_id=0
   Compiling tauri-runtime-wry v2.0.0-beta.20
   Compiling vswhom v0.1.0ING [3m 41s]
   Compiling embed-resource v2.4.241s]
   Compiling tauri-winres v0.1.1m 42s]
   Compiling tauri-build v2.0.0-beta.19
   Compiling tauri v2.0.0-beta.24 49s]
   Compiling hakomori v0.0.0 (D:\CodeZone\WebZone\ApplicationZone\hakomori\src-tauri)
w: C:\Users\Chest\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tauri-2.0.0-beta.24\mobile\android\src\main\java\app\tauri\plugin\PluginMethodData.kt: (11, 23): Parameter 'methodDecorator' is never used
   Compiling tauri-plugin-shell v2.0.0-beta.9
   Compiling rustls-webpki v0.102.59s]
   Compiling tokio-rustls v0.26.0 4s]
   Compiling hyper-rustls v0.27.2 5s]
   Compiling reqwest v0.12.5G [4m 5s]
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 50.45s
    Info symlinking lib "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\x86_64-linux-android\\debug\\libhakomori_lib.so" in jniLibs dir "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\gen/android\\app/src/main/jniLibs/x86_64"
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\x86_64-linux-android\\debug\\libhakomori_lib.so" requires shared lib "libandroid.so"
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\x86_64-linux-android\\debug\\libhakomori_lib.so" requires shared lib "libdl.so"
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\x86_64-linux-android\\debug\\libhakomori_lib.so" requires shared lib "liblog.so"
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\x86_64-linux-android\\debug\\libhakomori_lib.so" requires shared lib "libm.so"
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\x86_64-linux-android\\debug\\libhakomori_lib.so" requires shared lib "libc.so"

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.4/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
Performing Streamed Install
Success
Starting: Intent { cmp=com.hako.dev/.MainActivity }
--------- beginning of main
07-16 14:48:12.895  4427  4427 I com.hako.dev: Late-enabling -Xcheck:jni
07-16 14:48:12.945  4427  4427 I com.hako.dev: Using CollectorTypeCC GC.
07-16 14:48:12.947  4427  4427 W com.hako.dev: Unexpected CPU variant for x86: x86_64.
07-16 14:48:12.947  4427  4427 W com.hako.dev: Known variants: atom, sandybridge, silvermont, goldmont, goldmont-plus, tremont, kabylake, default
07-16 14:48:13.389  4427  4427 W ziparchive: Unable to open '/data/app/~~6aCT5R-vg0jxd7eVGJx2lA==/com.hako.dev-UXZclnZnN6rUc7UJkahwVw==/base.dm': No such file or directory
07-16 14:48:13.389  4427  4427 W ziparchive: Unable to open '/data/app/~~6aCT5R-vg0jxd7eVGJx2lA==/com.hako.dev-UXZclnZnN6rUc7UJkahwVw==/base.dm': No such file or directory
    Info Watching D:\CodeZone\WebZone\ApplicationZone\hakomori\src-tauri for changes...
07-16 14:48:15.093  4427  4427 W com.hako.dev: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (unsupported, reflection, allowed)
07-16 14:48:15.094  4427  4427 W com.hako.dev: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (unsupported, reflection, allowed)
07-16 14:48:15.130  4427  4427 W OpenGLRenderer: Unknown dataspace 0
07-16 14:48:15.204  4427  4497 W OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
07-16 14:48:15.206  4427  4497 W OpenGLRenderer: Failed to initialize 101010-2 format, error = EGL_SUCCESS
07-16 14:48:15.453  4427  4497 I Gralloc4: mapper 4.x is not supported
07-16 14:48:15.481  4427  4497 E OpenGLRenderer: Unable to match the desired swap behavior.
07-16 14:48:15.506  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:15.506  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name color
07-16 14:48:15.651  4427  4427 I WebViewFactory: Loading com.google.android.webview version 113.0.5672.136 (code 567263637)
07-16 14:48:15.659  4427  4427 W ziparchive: Unable to open '/data/app/~~O8fFWMMxqZ5ZE3s19Dl3ug==/com.google.android.trichromelibrary_567263637-f3iX7On-SrcFgKD1raqVOA==/TrichromeLibrary.dm': No such file or directory
07-16 14:48:15.659  4427  4427 W ziparchive: Unable to open '/data/app/~~O8fFWMMxqZ5ZE3s19Dl3ug==/com.google.android.trichromelibrary_567263637-f3iX7On-SrcFgKD1raqVOA==/TrichromeLibrary.dm': No such file or directory
07-16 14:48:15.660  4427  4427 W com.hako.dev: Entry not found
07-16 14:48:15.849  4427  4427 W com.hako.dev: Accessing hidden method Landroid/os/Trace;->isTagEnabled(J)Z (unsupported, reflection, allowed)
07-16 14:48:15.849  4427  4427 W com.hako.dev: Accessing hidden method Landroid/os/Trace;->traceBegin(JLjava/lang/String;)V (unsupported, reflection, allowed)
07-16 14:48:15.849  4427  4427 W com.hako.dev: Accessing hidden method Landroid/os/Trace;->traceEnd(J)V (unsupported, reflection, allowed)
07-16 14:48:15.849  4427  4427 W com.hako.dev: Accessing hidden method Landroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V (unsupported, reflection, allowed)
07-16 14:48:15.850  4427  4427 W com.hako.dev: Accessing hidden method Landroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V (unsupported, reflection, allowed)
07-16 14:48:15.863  4427  4427 I cr_WVCFactoryProvider: Loaded version=113.0.5672.136 minSdkVersion=29 isBundle=false multiprocess=true packageId=2
07-16 14:48:15.903  4427  4513 I cr_VariationsUtils: Failed reading seed file "/data/user/0/com.hako.dev/app_webview/variations_seed_new"
07-16 14:48:15.903  4427  4513 I cr_VariationsUtils: Failed reading seed file "/data/user/0/com.hako.dev/app_webview/variations_seed"
07-16 14:48:15.905  4427  4513 I cr_VariationsUtils: Requesting new seed from IVariationsSeedServer
07-16 14:48:15.958  4427  4427 I cr_LibraryLoader: Successfully loaded native library
07-16 14:48:15.966  4427  4427 I cr_CachingUmaRecorder: Flushed 8 samples from 8 histograms.
07-16 14:48:16.491  4427  4537 W chromium: [WARNING:dns_config_service_android.cc(115)] Failed to read DnsConfig.
07-16 14:48:16.492  4427  4500 I RustStdoutStderr: [WARNING:dns_config_service_android.cc(115)] Failed to read DnsConfig.
07-16 14:48:17.199  4427  4543 W cr_media: BLUETOOTH_CONNECT permission is missing.
07-16 14:48:17.202  4427  4543 W cr_media: registerBluetoothIntentsIfNeeded: Requires BLUETOOTH permission
07-16 14:48:17.705  4427  4427 E Tauri/Console: File:  - Line 1 - Msg: Uncaught TypeError: Cannot read properties of undefined (reading 'metadata')
07-16 14:48:17.720  4427  4427 E Tauri/Console: File:  - Line 1 - Msg: Uncaught TypeError: Cannot read properties of undefined (reading 'metadata')

warn - The safelist pattern `/^swiper-/` doesn't match any Tailwind CSS classes.
warn - Fix this pattern or remove it from your `safelist` configuration.
warn - https://tailwindcss.com/docs/content-configuration#safelisting-classes
22:48:24 [200] / 189ms
07-16 14:48:24.264  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:24.265  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name color
07-16 14:48:24.275  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name inPosition
07-16 14:48:24.275  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name inColor
07-16 14:48:24.275  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name inTextureCoords
07-16 14:48:24.301  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name resolveLevel_and_idx
07-16 14:48:24.301  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name p01
07-16 14:48:24.301  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name p23
07-16 14:48:24.301  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 3 name fanPointAttrib
07-16 14:48:24.310  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:24.310  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name color
07-16 14:48:24.317  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name inPosition
07-16 14:48:24.317  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name inColor
07-16 14:48:24.317  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name inCircleEdge
07-16 14:48:24.324  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name fillBounds
07-16 14:48:24.324  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name color
07-16 14:48:24.324  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name locations
07-16 14:48:24.335  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:24.335  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name localCoord
07-16 14:48:24.520  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name radii_selector
07-16 14:48:24.520  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name corner_and_radius_outsets
07-16 14:48:24.520  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name aa_bloat_and_coverage
07-16 14:48:24.520  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 3 name radii_x
07-16 14:48:24.520  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 4 name radii_y
07-16 14:48:24.521  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 5 name skew
07-16 14:48:24.521  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 6 name translate_and_localrotate
07-16 14:48:24.521  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 7 name color
07-16 14:48:24.532  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name pts01Attr
07-16 14:48:24.533  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name pts23Attr
07-16 14:48:24.533  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name argsAttr
07-16 14:48:24.548  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:24.549  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name color
07-16 14:48:24.549  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name localCoord
07-16 14:48:25.770  4427  4427 E Tauri/Console: File: http://tauri.localhost/@vite/client - Line 1223 - Msg: Uncaught (in promise) SyntaxError: Failed to construct 'WebSocket': The URL 'ws://localhost:undefined/' is invalid.
07-16 14:48:25.785  4427  4446 I com.hako.dev: Background concurrent copying GC freed 29942(2484KB) AllocSpace objects, 17(1144KB) LOS objects, 49% free, 4182KB/8365KB, paused 7.661ms,77us total 100.329ms
07-16 14:48:26.060  4427  4427 I Tauri/Console: File: https://cdn.vercel-insights.com/v1/script.debug.js - Line 1 - Msg: %c[Vercel Web Analytics]%c Debug mode is enabled by default in development. No requests will be sent to the server. color: rgb(120, 120, 120) color: inherit
07-16 14:48:26.065  4427  4427 I Tauri/Console: File: https://cdn.vercel-insights.com/v1/script.debug.js - Line 1 - Msg: %c[Vercel Web Analytics]%c [pageview] http://tauri.localhost/ color: rgb(120, 120, 120) color: inherit [object Object]
22:48:27 [200] /_image 698ms
07-16 14:48:26.455  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:26.455  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name localCoord
22:48:27 [200] /_image 1022ms
22:48:27 [200] /_image 1062ms
07-16 14:48:26.686  4427  4427 I Tauri/Console: File: http://tauri.localhost/node_modules/.vite/deps/chunk-UWR4THM3.js?v=d000236a - Line 21551 - Msg: %cDownload the React DevTools for a better development experience: https://reactjs.org/link/react-devtools font-weight:bold
22:48:27 [200] /_image 1141ms
07-16 14:48:27.438  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name inPosition
07-16 14:48:27.439  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name inColor
07-16 14:48:27.445  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name inCircleEdge
07-16 14:48:27.452  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name a_vertex
07-16 14:48:27.456  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:27.456  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name localCoord
07-16 14:48:27.463  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:27.463  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name localCoord
07-16 14:48:27.472  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:27.472  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name localCoord
07-16 14:48:27.481  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:27.481  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name localCoord
07-16 14:48:27.488  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:27.488  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name color
07-16 14:48:27.488  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name localCoord
07-16 14:48:27.497  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:27.497  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name localCoord
07-16 14:48:27.506  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:27.506  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name localCoord
07-16 14:48:27.514  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:27.515  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name localCoord
07-16 14:48:27.523  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:27.523  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name color
07-16 14:48:27.524  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name localCoord
07-16 14:48:27.532  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:27.532  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name color
07-16 14:48:27.532  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name localCoord
07-16 14:48:27.539  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name inPosition
07-16 14:48:27.539  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name inColor
07-16 14:48:27.540  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name inCircleEdge
07-16 14:48:27.554  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:27.555  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name color
07-16 14:48:27.555  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name localCoord
07-16 14:48:27.555  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 3 name texSubset
07-16 14:48:27.563  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name radii_selector
07-16 14:48:27.563  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name corner_and_radius_outsets
07-16 14:48:27.563  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name aa_bloat_and_coverage
07-16 14:48:27.564  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 3 name radii_x
07-16 14:48:27.564  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 4 name radii_y
07-16 14:48:27.565  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 5 name skew
07-16 14:48:27.565  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 6 name translate_and_localrotate
07-16 14:48:27.565  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 7 name color
07-16 14:48:27.567  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:48:27.567  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name color
07-16 14:48:27.568  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name localCoord
07-16 14:48:27.568  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 3 name texSubset
07-16 14:48:27.577  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name inPosition
07-16 14:48:27.577  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name inColor
07-16 14:48:27.577  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name inEllipseOffset
07-16 14:48:27.577  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 3 name inEllipseRadii
07-16 14:48:30.359  4427  4547 E chromium: [ERROR:ssl_client_socket_impl.cc(992)] handshake failed; returned -1, SSL error code 1, net_error -101
07-16 14:48:30.359  4427  4500 I RustStdoutStderr: [ERROR:ssl_client_socket_impl.cc(992)] handshake failed; returned -1, SSL error code 1, net_error -101
07-16 14:48:30.660  4427  4547 E chromium: [ERROR:ssl_client_socket_impl.cc(992)] handshake failed; returned -1, SSL error code 1, net_error -101
07-16 14:48:30.661  4427  4500 I RustStdoutStderr: [ERROR:ssl_client_socket_impl.cc(992)] handshake failed; returned -1, SSL error code 1, net_error -101
07-16 14:49:10.806  4427  4427 W com.hako.dev: Accessing hidden method Landroid/view/MotionEvent;->getEventTimeNano()J (unsupported, reflection, allowed)
07-16 14:49:13.086  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:49:13.086  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name color
07-16 14:49:13.086  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 2 name localCoord
07-16 14:49:17.712  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 0 name position
07-16 14:49:17.713  4427  4500 I RustStdoutStderr: s_glBindAttribLocation: bind attrib 1 name color

响应式的书写体验还是非常好的,并且是很好的虚拟机调试

体感比RN和expo要好很多,或者说,就是绝杀,需要配置的东西很少,并且是用的正统前端框架

现在就看看打包能不能成功了

退出命令行,手机关机,模拟器关闭

可以看到他的build原理,但是,最后build失败了

Error Unable to find your web assets, did you forget to build your web app? Your frontendDist is set to "../dist" (which is `\\?\D:\CodeZone\WebZone\ApplicationZone\hakomori\dist`).

这个是tauri报的错

翻阅上面的日志,发现是hybrid导致的,因为之前配置了vervel

22:55:44 [build] output: "hybrid"
22:55:44 [build] directory: D:\CodeZone\WebZone\ApplicationZone\hakomori\.vercel\output\

改成这个"frontendDist": "../.vercel/output"就好啦

前端构建->Rust下包->IDLE构建

Finished `release` profile [optimized] target(s) in 3m 28s
    Info symlinking lib "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\aarch64-linux-android\\release\\libhakomori_lib.so" in jniLibs dir "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\gen/android\\app/src/main/jniLibs/arm64-v8a"
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\aarch64-linux-android\\release\\libhakomori_lib.so" requires shared lib "libandroid.so"
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\aarch64-linux-android\\release\\libhakomori_lib.so" requires shared lib "libdl.so"
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\aarch64-linux-android\\release\\libhakomori_lib.so" requires shared lib "liblog.so"
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\aarch64-linux-android\\release\\libhakomori_lib.so" requires shared lib "libm.so"
    Info "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\aarch64-linux-android\\release\\libhakomori_lib.so" requires shared lib "libc.so"
    Info symlink at "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\gen/android\\app/src/main/jniLibs/arm64-v8a\\libhakomori_lib.so" points to "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\aarch64-linux-android\\release\\libhakomori_lib.so"
    Info symlink at "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\gen/android\\app/src/main/jniLibs/x86_64\\libhakomori_lib.so" points to "D:\\CodeZone\\WebZone\\ApplicationZone\\hakomori\\src-tauri\\target\\x86_64-linux-android\\debug\\libhakomori_lib.so"
<=------------> 13% EXECUTING [4s]
> :app:mergeUniversalReleaseResources
Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.4/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
    Finished 1 APK at:
        D:\CodeZone\WebZone\ApplicationZone\hakomori\src-tauri\gen/android\app/build/outputs/apk/universal/release/app-universal-release-unsigned.apk

    Finished 1 AAB at:
        D:\CodeZone\WebZone\ApplicationZone\hakomori\src-tauri\gen/android\app/build/outputs/bundle/universalRelease/app-universal-release.aab

PS D:\CodeZone\WebZone\ApplicationZone\hakomori>

意料之中是不行的,或者说经验之中确实是不行的

那就配置密钥一系列的了,和最上面写的是一样的

直接用之前生成的密钥看看能不能复用,然后重走流程发现自己之前写的不太清楚,还是对照着老项目配好的,然后补全了一下博客

不过安装下来就不对了,asset not found,我觉得还是dist设置的问题

他是放在static里面的,难崩

tauri里面只判断了文件夹是否存在,但是没判断有没有东西

所以要到/output/tauri这里

推测是正确的,并且外面的内容仅仅是给vercel用的,我的APP只需要下面的static就可以了,毕竟是静态的

记得给.vercel添加gitignore

其实上git消耗的大头还是在png这些资源上面,唉唉,等有时间再来配自己的图床了

Astro-Tarui的APP开发

因为tauri-cli默认是不提供astro的创建的

最好的方法还是先创建一个react的app然后直接移植代码

新建一个tauri2项目,然后从fork并且clone下来的astro项目里面把前端代码全部复制过来就好了,不过在这之前,先测试一下能否桌面端移动端在一个项目里面开发,这个就在上一章里面去记录了

D:\CodeZone\RustZone\PracticeZone\tauri_mobile_beta>npm create tauri-app@latest -- --beta
 Project name · tauri-astro-ori
 Choose which language to use for your frontend · TypeScript / JavaScript - (pnpm, yarn, npm, bun)
 Choose your package manager · npm
 Choose your UI template · React - (https://react.dev/)
 Choose your UI flavor · TypeScript
 Would you like to setup the project for mobile as well? · yes

Template created! To get started run:
  cd tauri-astro-ori
  npm install
  npm run tauri android init

For Desktop development, run:
  npm run tauri dev

For Android development, run:
  npm run tauri android dev


D:\CodeZone\RustZone\PracticeZone\tauri_mobile_beta>cd tauri-astro-ori

D:\CodeZone\RustZone\PracticeZone\tauri_mobile_beta\tauri-astro-ori>code .
  • 然后

    • 删除src和public
    • 替换package.json的内容
      • 这里需要非常注意不要误伤删除了tauri的api
  • 移植文件夹

    • .astro
    • .json
    • .yarn
    • config
    • docs
    • public
    • scripts
    • src
  • 整合文件

    • .gitignore直接复制求和
    • package.json直接把astro里面的复制过来,然后三个部分如下添加即可
  "scripts": {
    "tauri": "tauri"
  },
  "dependencies": {
    "@tauri-apps/api": ">=2.0.0-beta.0",
    "@tauri-apps/plugin-shell": ">=2.0.0-beta.0"
  },
  "devDependencies": {
    "@tauri-apps/cli": ">=2.0.0-beta.0",
    "internal-ip": "^7.0.0"
  }
  • 移除文件

    • index.html
    • tsc相关配置
    • vite配置
  • 移植文件

    • 除了ignore和package,直接全复制过来即可

然后看看能不能跑起来吧

看了下tauri.conf.json里面写的也是npm run dev,那就没问题的

npm i
; 成功!
npm run dev
; 成功!,开在4322上面了,由此可见自己忘记改端口到1420了
; 打开之后页面显示也是正常的,
; 查了下没找到4321,那还是把tauri.conf.json里面改成4321了

目前唯一不确定的是 “frontendDist”: ”../dist”这个是不是对的

博客搭建以及之后的事情

需要一个自己的同步服务器,来作为后端

以及需要一个CDN来做一个图床的存储,可能会用到OSS之类的,也许直到现在才确实地产生了这样的一个需求

会需要一个memo记录的移动端APP,直接上传同步到网页端的碎片里面即可,都是有待解决的东西,并且,也应当是可以显示与否的东西

#Tauri #Android #Gradle #NDK #Java