mirror of
https://github.com/jaywcjlove/reference.git
synced 2025-08-22 22:16:14 +08:00
doc: update docs/tauri.md (#996) 2e985e4fee
This commit is contained in:
344
CONTRIBUTORS.svg
344
CONTRIBUTORS.svg
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 14 MiB After Width: | Height: | Size: 14 MiB |
228
docs/tauri.html
228
docs/tauri.html
@@ -8,7 +8,7 @@
|
||||
<meta description="tauri 备忘清单
|
||||
===
|
||||
|
||||
这个 tauri 快速参考备忘单显示了它的常用命令使用清单
|
||||
tauri 是一个轻量、高性能的跨平台应用开发框架,这里展示了它的常用配置与命令清单
|
||||
|
||||
入门,为开发人员分享快速参考备忘单。">
|
||||
<meta keywords="tauri,reference,Quick,Reference,cheatsheet,cheat,sheet">
|
||||
@@ -44,10 +44,10 @@
|
||||
<path d="M47.913 95.577a104.766 104.766 0 0 1 36.419-14.842 73.46 73.46 0 0 0-4.116 33.3c-29.847 10.619-49.549 39.148-48.906 70.822.642 31.673 21.484 59.38 51.738 68.78 30.253 9.399 63.127-1.62 81.604-27.352a122.227 122.227 0 0 0 40.16-11.6c-13.736 44.169-54.812 74.1-101.064 73.645-46.252-.453-86.733-31.184-99.602-75.612-12.87-44.427 4.92-92.037 43.768-117.141Zm155.528 100.026-.5.25.5-.25Z" fill="#24C8DB"></path>
|
||||
</svg>
|
||||
<a aria-hidden="true" tabindex="-1" href="#tauri-备忘清单"><span class="icon icon-link"></span></a>tauri 备忘清单</h1><div class="wrap-body">
|
||||
<p>这个 <a href="https://tauri.app/">tauri</a> 快速参考备忘单显示了它的常用命令使用清单</p>
|
||||
<p><a href="https://tauri.app/">tauri</a> 是一个轻量、高性能的跨平台应用开发框架,这里展示了它的常用配置与命令清单</p>
|
||||
</div></header><div class="menu-tocs"><div class="menu-btn"><svg aria-hidden="true" fill="currentColor" height="1em" width="1em" viewBox="0 0 16 16" version="1.1" data-view-component="true">
|
||||
<path fill-rule="evenodd" d="M2 4a1 1 0 100-2 1 1 0 000 2zm3.75-1.5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zm0 5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zm0 5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zM3 8a1 1 0 11-2 0 1 1 0 012 0zm-1 6a1 1 0 100-2 1 1 0 000 2z"></path>
|
||||
</svg></div><div class="menu-modal"><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#入门">入门</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#快速开始">快速开始</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#依赖环境">依赖环境</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#启动-tauri-开发窗口">启动 Tauri 开发窗口</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#检测最新版本的-tauri">检测最新版本的 Tauri</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#更新-npm-包">更新 npm 包</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#更新-cargo-包">更新 Cargo 包</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#应用程序调试">应用程序调试</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#以编程方式打开-devtools">以编程方式打开 Devtools</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#在生产中使用检查器">在生产中使用检查器</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#启用开发工具功能">启用开发工具功能</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#安卓开发">安卓开发</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#环境变量">环境变量</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#准备目标">准备目标</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#编译">编译</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#签名">签名</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#配置">配置</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#配置结构">配置结构</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#tauri-配置">Tauri 配置</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#cliconfig">CliConfig</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#package-配置">Package 配置</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#windowconfig">WindowConfig</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#patternkind">PatternKind</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#棕地模式">棕地模式</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#隔离模式建议出于安全目的">隔离模式。建议出于安全目的</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#windowurl">WindowUrl</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#systemtrayconfig">SystemTrayConfig</a></div></div><div class="h1wrap-body"><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="入门"><a aria-hidden="true" tabindex="-1" href="#入门"><span class="icon icon-link"></span></a>入门</h2><div class="wrap-body">
|
||||
</svg></div><div class="menu-modal"><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#入门">入门</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#快速开始">快速开始</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#依赖环境">依赖环境</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#启动-tauri-开发窗口">启动 Tauri 开发窗口</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#检测最新版本的-tauri">检测最新版本的 Tauri</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#更新-npm-包">更新 npm 包</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#更新-cargo-包">更新 Cargo 包</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#应用程序调试">应用程序调试</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#以编程方式打开-devtools">以编程方式打开 Devtools</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#在生产中使用检查器">在生产中使用检查器</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#启用开发工具功能">启用开发工具功能</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#移动端开发">移动端开发</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#注意事项">注意事项</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#安卓开发">安卓开发</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#安装-android-studio">安装 Android Studio</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#环境变量">环境变量</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#编译目标">编译目标</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#创建-android-项目">创建 Android 项目</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#开发调试">开发调试</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#生成签名">生成签名</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#手动签名">手动签名</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#自动签名">自动签名</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#ios-开发">iOS 开发</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#预先准备">预先准备</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#签名">签名</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#开发调试-1">开发调试</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#环境搭建">环境搭建</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#安装-xcode">安装 Xcode</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#安装-homebrew">安装 Homebrew</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#使用-homebrew-安装-cocoapods">使用 Homebrew 安装 Cocoapods</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#增加编译目标">增加编译目标</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#创建-ios-项目">创建 iOS 项目</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#配置">配置</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#配置结构">配置结构</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#tauri-配置">Tauri 配置</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#cliconfig">CliConfig</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#package-配置">Package 配置</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#windowconfig">WindowConfig</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#patternkind">PatternKind</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#棕地模式">棕地模式</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#隔离模式建议出于安全目的">隔离模式。建议出于安全目的</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#windowurl">WindowUrl</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#systemtrayconfig">SystemTrayConfig</a></div></div><div class="h1wrap-body"><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="入门"><a aria-hidden="true" tabindex="-1" href="#入门"><span class="icon icon-link"></span></a>入门</h2><div class="wrap-body">
|
||||
</div></div><div class="h2wrap-body"><div class="wrap h3body-exist row-span-3"><div class="wrap-header h3wrap"><h3 id="快速开始"><a aria-hidden="true" tabindex="-1" href="#快速开始"><span class="icon icon-link"></span></a>快速开始</h3><div class="wrap-body">
|
||||
<!--rehype:wrap-class=row-span-3-->
|
||||
<p>Bash</p>
|
||||
@@ -88,11 +88,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<table><thead><tr><th align="left">软件</th><th align="left">描述</th></tr></thead><tbody><tr><td align="left"><a href="https://www.rust-lang.org/tools/install">rust</a></td><td align="left">rust安装</td></tr><tr><td align="left"><a href="https://nodejs.org/en">nodejs</a></td><td align="left">nodejs安装</td></tr><tr><td align="left"><a href="https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/">Windows Build Tools</a></td><td align="left">Microsoft C++ 生成工具 (for windows)</td></tr><tr><td align="left"><a href="https://developer.android.google.cn/studio?hl=zh-cn">Android Studio</a></td><td align="left">安卓开发工具</td></tr></tbody></table>
|
||||
<table><thead><tr><th align="left">软件</th><th align="left">描述</th></tr></thead><tbody><tr><td align="left"><a href="https://www.rust-lang.org/tools/install">rust</a></td><td align="left">rust安装</td></tr><tr><td align="left"><a href="https://nodejs.org/en">nodejs</a></td><td align="left">nodejs安装</td></tr><tr><td align="left"><a href="https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/">Windows Build Tools</a></td><td align="left">Microsoft C++ 生成工具 (for windows)</td></tr></tbody></table>
|
||||
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="启动-tauri-开发窗口"><a aria-hidden="true" tabindex="-1" href="#启动-tauri-开发窗口"><span class="icon icon-link"></span></a>启动 Tauri 开发窗口</h3><div class="wrap-body">
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">$ <span class="token function">npm</span> run tauri dev
|
||||
</span><span class="code-line">$ <span class="token function">yarn</span> tauri dev
|
||||
@@ -164,33 +160,215 @@
|
||||
</span><span class="code-line"><span class="token key attr-name">tauri</span> <span class="token punctuation">=</span> <span class="token value attr-value">{ version = "...", features = ["...", "devtools"] }</span>
|
||||
</span></code></pre>
|
||||
<p>在文件 <code>src-tauri/Cargo.toml</code> 中启用 <code>devtools Cargo</code> 功能</p>
|
||||
</div></div></div></div></div><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="移动端开发"><a aria-hidden="true" tabindex="-1" href="#移动端开发"><span class="icon icon-link"></span></a>移动端开发</h2><div class="wrap-body">
|
||||
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="注意事项"><a aria-hidden="true" tabindex="-1" href="#注意事项"><span class="icon icon-link"></span></a>注意事项</h3><div class="wrap-body">
|
||||
<!--rehype:wrap-class=col-span-2-->
|
||||
<p>Tauri 使用系统原生的 <code>Webview</code>,而不像 Electron 那样将完整的 <code>Chromium</code> 打包进应用,因此构建产物体积相当小。</p>
|
||||
<p>但各手机厂商对于 <code>Webview</code> 的支持程度不同,因此在部分设备可能会出现一些兼容性问题。</p>
|
||||
</div></div></div></div></div><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="安卓开发"><a aria-hidden="true" tabindex="-1" href="#安卓开发"><span class="icon icon-link"></span></a>安卓开发</h2><div class="wrap-body">
|
||||
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="环境变量"><a aria-hidden="true" tabindex="-1" href="#环境变量"><span class="icon icon-link"></span></a>环境变量</h3><div class="wrap-body">
|
||||
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist row-span-2"><div class="wrap-header h3wrap"><h3 id="安装-android-studio"><a aria-hidden="true" tabindex="-1" href="#安装-android-studio"><span class="icon icon-link"></span></a>安装 Android Studio</h3><div class="wrap-body">
|
||||
<!--rehype:wrap-class=row-span-2-->
|
||||
<p>在进行安卓开发之前,需要首先安装 <a href="https://developer.android.google.cn/studio?hl=zh-cn">Android Studio</a> 并配置好环境变量。</p>
|
||||
<p>安装后,打开 <code>Settings</code>,切换到 <code>Languages & Frameworks</code> > <code>Android SDK</code> 界面。</p>
|
||||
<blockquote>
|
||||
<p>可以在这个页面更改 <code>Android SDK Location</code> 以调整 SDK 安装目录</p>
|
||||
</blockquote>
|
||||
<p>安装以下内容:</p>
|
||||
<ul>
|
||||
<li>Android SDK Platform</li>
|
||||
<li>Android SDK Platform-Tools</li>
|
||||
<li>NDK (Side by side)</li>
|
||||
<li>Android SDK Build-Tools</li>
|
||||
<li>Android SDK Command-line Tools</li>
|
||||
</ul>
|
||||
</div></div></div><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="环境变量"><a aria-hidden="true" tabindex="-1" href="#环境变量"><span class="icon icon-link"></span></a>环境变量</h3><div class="wrap-body">
|
||||
<!--rehype:wrap-class=col-span-2-->
|
||||
<p><code>JAVA_HOME</code></p>
|
||||
<p><code>ANDROID_HOME</code></p>
|
||||
<p><code>NDK_HOME</code></p>
|
||||
</div></div></div><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="准备目标"><a aria-hidden="true" tabindex="-1" href="#准备目标"><span class="icon icon-link"></span></a>准备目标</h3><div class="wrap-body">
|
||||
<ul>
|
||||
<li>
|
||||
<p><code>JAVA_HOME</code>: 若无其他 JDK 环境,可以配置为 Android Studio 安装目录下的 jbr 目录。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><code>ANDROID_HOME</code>: 配置为 Android SDK Location 目录下的 sdk 目录。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><code>NDK_HOME</code>: 配置为 Android SDK Location 目录下的 ndk 下的 ndk 版本号目录。</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div></div></div><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="编译目标"><a aria-hidden="true" tabindex="-1" href="#编译目标"><span class="icon icon-link"></span></a>编译目标</h3><div class="wrap-body">
|
||||
<!--rehype:wrap-class=col-span-2-->
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">$ <span class="token function">npm</span> <span class="token function">install</span> @tauri-apps/cli@next @tauri-apps/api@next
|
||||
</span><span class="code-line">$ <span class="token function">npm</span> run tauri migrate
|
||||
</span><span class="code-line">$ rustup target <span class="token function">add</span> aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
|
||||
</span><span class="code-line">$ <span class="token function">rm</span> <span class="token parameter variable">-r</span> src-tauri/gen
|
||||
</span><span class="code-line">$ <span class="token function">npm</span> run tauri android init
|
||||
</span><span class="code-line">$ <span class="token function">npm</span> run tauri icon
|
||||
<p>Rust 默认只安装当前主机平台的编译目标(比如在 macOS 上默认就是 <code>x86_64-apple-darwin</code>)。
|
||||
如果你想编译到其它平台或架构,就需要使用 <code>rustup target add</code> 安装对应的编译目标。</p>
|
||||
<p>Android 应用打包时,一般会把编译的这几种架构的库文件全都放进 APK/ABB 中,系统会自动选择匹配的那个。</p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<table><thead><tr><th>target</th><th>CPU 架构</th><th>常见设备/场景</th></tr></thead><tbody><tr><td><strong>aarch64-linux-android</strong></td><td>ARM 64 位</td><td>新款安卓手机(主流)</td></tr><tr><td><strong>armv7-linux-androideabi</strong></td><td>ARM 32 位</td><td>老款安卓手机(较少见)</td></tr><tr><td><strong>i686-linux-android</strong></td><td>Intel x86 32 位</td><td>早期安卓模拟器(老旧)</td></tr><tr><td><strong>x86_64-linux-android</strong></td><td>Intel x86 64 位</td><td>安卓模拟器、新款 Chromebook</td></tr></tbody></table>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">$ rustup target <span class="token function">add</span> aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
|
||||
</span></code></pre>
|
||||
<p>修改应用名:%app_path%\src-tauri\gen\android\app\src\main\res\values\strings.xml</p>
|
||||
</div></div></div><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="编译"><a aria-hidden="true" tabindex="-1" href="#编译"><span class="icon icon-link"></span></a>编译</h3><div class="wrap-body">
|
||||
<!--rehype:wrap-class=col-span-2-->
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">$ <span class="token function">npm</span> run tauri android dev
|
||||
</span><span class="code-line">$ <span class="token function">npm</span> run tauri android build
|
||||
</div></div></div><div class="wrap h3body-not-exist row-span-3"><div class="wrap-header h3wrap"><h3 id="创建-android-项目"><a aria-hidden="true" tabindex="-1" href="#创建-android-项目"><span class="icon icon-link"></span></a>创建 Android 项目</h3><div class="wrap-body">
|
||||
<!--rehype:wrap-class=row-span-3-->
|
||||
<p>创建基础 Tauri 项目:</p>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line"><span class="token comment"># 创建 tauri 项目</span>
|
||||
</span><span class="code-line">$ <span class="token function">npm</span> create tauri-app@latest
|
||||
</span><span class="code-line"><span class="token comment"># 安装依赖</span>
|
||||
</span><span class="code-line">$ <span class="token function">npm</span> <span class="token function">install</span>
|
||||
</span></code></pre>
|
||||
</div></div></div><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="签名"><a aria-hidden="true" tabindex="-1" href="#签名"><span class="icon icon-link"></span></a>签名</h3><div class="wrap-body">
|
||||
<p>手动创建:</p>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">$ <span class="token function">npm</span> <span class="token function">install</span> <span class="token parameter variable">-D</span> @tauri-apps/cli@latest
|
||||
</span><span class="code-line"><span class="token comment"># 进入项目目录初始化,按照提示输入即可</span>
|
||||
</span><span class="code-line">$ npx tauri init
|
||||
</span></code></pre>
|
||||
<p>创建后,则可以执行以下命令:</p>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line"><span class="token comment"># 初始化 Android 开发配置</span>
|
||||
</span><span class="code-line">$ npx tauri android init
|
||||
</span><span class="code-line"><span class="token comment"># 开发 Android 应用</span>
|
||||
</span><span class="code-line">$ npx tauri android dev
|
||||
</span><span class="code-line"><span class="token comment"># 构建 Android 应用</span>
|
||||
</span><span class="code-line">$ npx tauri android build
|
||||
</span></code></pre>
|
||||
</div></div></div><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="开发调试"><a aria-hidden="true" tabindex="-1" href="#开发调试"><span class="icon icon-link"></span></a>开发调试</h3><div class="wrap-body">
|
||||
<!--rehype:wrap-class=col-span-2-->
|
||||
<p>首先需要在开发环境下打开应用,才能进行调试。</p>
|
||||
<p>在浏览器打开检查页面,根据浏览器不同,地址也不同,edge 浏览器是 <code>edge://inspect</code>,chrome 浏览器是 <code>chrome://inspect</code>。</p>
|
||||
<p>在检查页面中,会显示当前运行的应用,点击 <code>inspect</code> 即可打开调试工具。</p>
|
||||
</div></div></div><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="生成签名"><a aria-hidden="true" tabindex="-1" href="#生成签名"><span class="icon icon-link"></span></a>生成签名</h3><div class="wrap-body">
|
||||
<!--rehype:wrap-class=col-span-2-->
|
||||
<p>Android 系统要求所有 APK 必须先使用证书进行数字签名,然后才能安装到设备上或进行更新。</p>
|
||||
<p><code>keytool</code> 是 Java 数据证书管理工具。</p>
|
||||
<p>可以在 <code>JAVA_HOME</code> 环境变量指向的目录下的 <code>/bin/</code> 目录中找到 <code>keytool.exe</code>。</p>
|
||||
<p>执行以下命令之后按照提示进行输入即可。</p>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">$ keytool <span class="token parameter variable">-genkey</span> <span class="token parameter variable">-v</span> <span class="token parameter variable">-keystore</span> 自定义的数据文件名称 <span class="token parameter variable">-storetype</span> JKS <span class="token parameter variable">-keyalg</span> RSA <span class="token parameter variable">-keysize</span> <span class="token number">2048</span> <span class="token parameter variable">-validity</span> <span class="token number">10000</span> <span class="token parameter variable">-alias</span> 自定义的证书别名
|
||||
</span></code></pre>
|
||||
<p>如果是要上架应用商店的,要如实填写。否则可能会导致因信息不对从而上架失败。</p>
|
||||
<p>输入完毕,确认后,工具会要求设置密码。记住密码,后面会用到。</p>
|
||||
<p>完成以上操作后,在当前工作目录下会生成一个 <code>自定义的数据文件名称.keystore</code> 文件。</p>
|
||||
</div></div></div><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="手动签名"><a aria-hidden="true" tabindex="-1" href="#手动签名"><span class="icon icon-link"></span></a>手动签名</h3><div class="wrap-body">
|
||||
<!--rehype:wrap-class=col-span-2-->
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">$ keytool <span class="token parameter variable">-genkey</span> <span class="token parameter variable">-alias</span> android.keystore <span class="token parameter variable">-keyalg</span> RSA <span class="token parameter variable">-validity</span> <span class="token number">20000</span> <span class="token parameter variable">-keystore</span> android.keystore
|
||||
</span><span class="code-line">$ zipalign <span class="token parameter variable">-p</span> <span class="token parameter variable">-f</span> <span class="token parameter variable">-v</span> <span class="token number">4</span> unsigned.apk release.apk
|
||||
</span><span class="code-line">$ apksigner sign <span class="token parameter variable">--ks</span> android.keystore release.apk
|
||||
</span></code></pre>
|
||||
</div></div></div><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="自动签名"><a aria-hidden="true" tabindex="-1" href="#自动签名"><span class="icon icon-link"></span></a>自动签名</h3><div class="wrap-body">
|
||||
<!--rehype:wrap-class=col-span-2-->
|
||||
<p>创建 <code>src-tauri/gen/android/keystore.properties</code> 文件。</p>
|
||||
<pre class="language-properties"><code class="language-properties code-highlight"><span class="code-line"><span class="token key attr-name">storePassword</span><span class="token punctuation">=</span><span class="token value attr-value">数据文件密码</span>
|
||||
</span><span class="code-line"><span class="token key attr-name">keyPassword</span><span class="token punctuation">=</span><span class="token value attr-value">证书密码</span>
|
||||
</span><span class="code-line"><span class="token key attr-name">keyAlias</span><span class="token punctuation">=</span><span class="token value attr-value">自定义的证书别名</span>
|
||||
</span><span class="code-line"><span class="token key attr-name">storeFile</span><span class="token punctuation">=</span><span class="token value attr-value">自定义的数据文件名称.keystore</span>
|
||||
</span></code></pre>
|
||||
<p>需要注意,在 windows 下,<code>storeFile</code> 需要 <code>C:\\Program Files\\Android</code> 这样的格式。</p>
|
||||
<p>随后找到 <code>src-tauri/gen/android/app/build.gradle.kts</code> 文件,添加以下内容:</p>
|
||||
<pre class="language-kotlin"><code class="language-kotlin code-highlight"><span class="code-line"><span class="token keyword">import</span> java<span class="token punctuation">.</span>io<span class="token punctuation">.</span>FileInputStream
|
||||
</span><span class="code-line">
|
||||
</span><span class="code-line"><span class="token comment">// ...</span>
|
||||
</span><span class="code-line">android <span class="token punctuation">{</span>
|
||||
</span><span class="code-line"> defaultConfig <span class="token punctuation">{</span>
|
||||
</span><span class="code-line"> <span class="token comment">// ...</span>
|
||||
</span><span class="code-line"> <span class="token punctuation">}</span>
|
||||
</span><span class="code-line"> signingConfigs <span class="token punctuation">{</span>
|
||||
</span><span class="code-line"> <span class="token function">create</span><span class="token punctuation">(</span><span class="token string-literal singleline"><span class="token string">"release"</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
||||
</span><span class="code-line"> <span class="token keyword">val</span> keystorePropertiesFile <span class="token operator">=</span> rootProject<span class="token punctuation">.</span><span class="token function">file</span><span class="token punctuation">(</span><span class="token string-literal singleline"><span class="token string">"keystore.properties"</span></span><span class="token punctuation">)</span>
|
||||
</span><span class="code-line"> <span class="token keyword">val</span> keystoreProperties <span class="token operator">=</span> <span class="token function">Properties</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||||
</span><span class="code-line"> <span class="token keyword">if</span> <span class="token punctuation">(</span>keystorePropertiesFile<span class="token punctuation">.</span><span class="token function">exists</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
||||
</span><span class="code-line"> keystoreProperties<span class="token punctuation">.</span><span class="token function">load</span><span class="token punctuation">(</span><span class="token function">FileInputStream</span><span class="token punctuation">(</span>keystorePropertiesFile<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||||
</span><span class="code-line"> <span class="token punctuation">}</span>
|
||||
</span><span class="code-line">
|
||||
</span><span class="code-line"> keyAlias <span class="token operator">=</span> keystoreProperties<span class="token punctuation">[</span><span class="token string-literal singleline"><span class="token string">"keyAlias"</span></span><span class="token punctuation">]</span> <span class="token keyword">as</span> String
|
||||
</span><span class="code-line"> keyPassword <span class="token operator">=</span> keystoreProperties<span class="token punctuation">[</span><span class="token string-literal singleline"><span class="token string">"keyPassword"</span></span><span class="token punctuation">]</span> <span class="token keyword">as</span> String
|
||||
</span><span class="code-line"> storeFile <span class="token operator">=</span> <span class="token function">file</span><span class="token punctuation">(</span>keystoreProperties<span class="token punctuation">[</span><span class="token string-literal singleline"><span class="token string">"storeFile"</span></span><span class="token punctuation">]</span> <span class="token keyword">as</span> String<span class="token punctuation">)</span>
|
||||
</span><span class="code-line"> storePassword <span class="token operator">=</span> keystoreProperties<span class="token punctuation">[</span><span class="token string-literal singleline"><span class="token string">"storePassword"</span></span><span class="token punctuation">]</span> <span class="token keyword">as</span> String
|
||||
</span><span class="code-line"> <span class="token punctuation">}</span>
|
||||
</span><span class="code-line"> <span class="token punctuation">}</span>
|
||||
</span><span class="code-line"> buildTypes <span class="token punctuation">{</span>
|
||||
</span><span class="code-line"> <span class="token comment">// ...</span>
|
||||
</span><span class="code-line"> <span class="token function">getByName</span><span class="token punctuation">(</span><span class="token string-literal singleline"><span class="token string">"release"</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
||||
</span><span class="code-line"> signingConfig <span class="token operator">=</span> signingConfigs<span class="token punctuation">.</span><span class="token function">getByName</span><span class="token punctuation">(</span><span class="token string-literal singleline"><span class="token string">"release"</span></span><span class="token punctuation">)</span>
|
||||
</span><span class="code-line"> <span class="token comment">// ...</span>
|
||||
</span><span class="code-line"> <span class="token punctuation">}</span>
|
||||
</span><span class="code-line"> <span class="token punctuation">}</span>
|
||||
</span><span class="code-line"><span class="token punctuation">}</span>
|
||||
</span></code></pre>
|
||||
<p>配置完毕后,当执行 <code>npm run tauri android build</code> 时,会自动对构建的 APK/AAB 文件进行签名。</p>
|
||||
</div></div></div></div></div><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="ios-开发"><a aria-hidden="true" tabindex="-1" href="#ios-开发"><span class="icon icon-link"></span></a>iOS 开发</h2><div class="wrap-body">
|
||||
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="预先准备"><a aria-hidden="true" tabindex="-1" href="#预先准备"><span class="icon icon-link"></span></a>预先准备</h3><div class="wrap-body">
|
||||
<p>根据苹果政策,MacOS 不允许运行在非 Mac 硬件上,而开发所依赖的 Xcode 工具链只在 MacOS 上可用。</p>
|
||||
<p>因此,为了进行开发 iOS 和 MacOS 应用,必须要有一台 Mac 设备。</p>
|
||||
<p>对应用进行签名和发布,需要加入 <a href="https://developer.apple.com/programs/whats-included/">Apple Developer Program(年费 99 美元)</a>。</p>
|
||||
<p>不付费可以正常使用 Xcode 等工具,但无法进行正式签名和在 App Store 上架。</p>
|
||||
<p> </p>
|
||||
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="签名"><a aria-hidden="true" tabindex="-1" href="#签名"><span class="icon icon-link"></span></a>签名</h3><div class="wrap-body">
|
||||
<p>iOS 应用的签名现在已经非常简单了。</p>
|
||||
<p>在 Xcode 打开项目,登录 Apple Developer 账号,在项目配置中找到并勾选自动管理签名即可。</p>
|
||||
<p>Xcode 会自动帮助我们管理证书,签名等。</p>
|
||||
<p> </p>
|
||||
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="开发调试-1"><a aria-hidden="true" tabindex="-1" href="#开发调试-1"><span class="icon icon-link"></span></a>开发调试</h3><div class="wrap-body">
|
||||
<p>首先需要在开发环境下打开应用,才能进行调试。</p>
|
||||
<p>在 Mac 上打开 Safari 浏览器,开启开发者模式,接着找到需要调试的设备即可。</p>
|
||||
<p>如果是真机调试,则需要在设备上开启开发者模式。</p>
|
||||
<p> </p>
|
||||
</div></div></div><div class="wrap h3body-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="环境搭建"><a aria-hidden="true" tabindex="-1" href="#环境搭建"><span class="icon icon-link"></span></a>环境搭建</h3><div class="wrap-body">
|
||||
<!--rehype:wrap-class=col-span-2-->
|
||||
<h4 id="安装-xcode"><a aria-hidden="true" tabindex="-1" href="#安装-xcode"><span class="icon icon-link"></span></a>安装 Xcode</h4>
|
||||
<p>Xcode 是苹果官方的开发工具,提供了完整的开发环境,包括测试,分发,模拟器等。</p>
|
||||
<p>需要注意的是,Xcode 的版本并非越新越好,而是要根据当前设备的 MacOS 的系统版本来选择。</p>
|
||||
<p>前往 <a href="https://developer.apple.com/cn/xcode/">Xcode 页面</a> 下载安装 Xcode。</p>
|
||||
<h4 id="安装-homebrew"><a aria-hidden="true" tabindex="-1" href="#安装-homebrew"><span class="icon icon-link"></span></a>安装 <a href="https://brew.sh/zh-cn/">Homebrew</a></h4>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">$ /bin/bash <span class="token parameter variable">-c</span> <span class="token string">"<span class="token variable"><span class="token variable">$(</span><span class="token function">curl</span> <span class="token parameter variable">-fsSL</span> https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh<span class="token variable">)</span></span>"</span>
|
||||
</span></code></pre>
|
||||
<h4 id="使用-homebrew-安装-cocoapods"><a aria-hidden="true" tabindex="-1" href="#使用-homebrew-安装-cocoapods"><span class="icon icon-link"></span></a>使用 Homebrew 安装 <a href="https://cocoapods.org/">Cocoapods</a></h4>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">brew <span class="token function">install</span> cocoapods
|
||||
</span></code></pre>
|
||||
<h4 id="增加编译目标"><a aria-hidden="true" tabindex="-1" href="#增加编译目标"><span class="icon icon-link"></span></a>增加编译目标</h4>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">$ rustup target <span class="token function">add</span> aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim
|
||||
</span></code></pre>
|
||||
</div></div></div><div class="wrap h3body-not-exist col-span-1"><div class="wrap-header h3wrap"><h3 id="创建-ios-项目"><a aria-hidden="true" tabindex="-1" href="#创建-ios-项目"><span class="icon icon-link"></span></a>创建 iOS 项目</h3><div class="wrap-body">
|
||||
<!--rehype:wrap-class=col-span-1-->
|
||||
<p>首先创建基础 Tauri 项目。</p>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line"><span class="token comment"># 创建 tauri 项目</span>
|
||||
</span><span class="code-line">$ <span class="token function">npm</span> create tauri-app@latest
|
||||
</span><span class="code-line"><span class="token comment"># 安装依赖</span>
|
||||
</span><span class="code-line">$ <span class="token function">npm</span> <span class="token function">install</span>
|
||||
</span></code></pre>
|
||||
<p>手动创建:</p>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line">$ <span class="token function">npm</span> <span class="token function">install</span> <span class="token parameter variable">-D</span> @tauri-apps/cli@latest
|
||||
</span><span class="code-line"><span class="token comment"># 进入项目目录初始化,按照提示输入即可</span>
|
||||
</span><span class="code-line">$ npx tauri init
|
||||
</span></code></pre>
|
||||
<p>创建后,则可以执行以下命令:</p>
|
||||
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line"><span class="token comment"># 初始化 iOS 开发配置</span>
|
||||
</span><span class="code-line">$ npx tauri ios init
|
||||
</span><span class="code-line"><span class="token comment"># 开发 iOS 应用</span>
|
||||
</span><span class="code-line">$ npx tauri ios dev
|
||||
</span><span class="code-line"><span class="token comment"># 构建 iOS 应用</span>
|
||||
</span><span class="code-line">$ npx tauri ios build
|
||||
</span></code></pre>
|
||||
</div></div></div></div></div><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="配置"><a aria-hidden="true" tabindex="-1" href="#配置"><span class="icon icon-link"></span></a>配置</h2><div class="wrap-body">
|
||||
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist row-span-2"><div class="wrap-header h3wrap"><h3 id="配置结构"><a aria-hidden="true" tabindex="-1" href="#配置结构"><span class="icon icon-link"></span></a>配置结构</h3><div class="wrap-body">
|
||||
<!--rehype:wrap-class=row-span-2-->
|
||||
|
@@ -1810,7 +1810,7 @@
|
||||
<li><a href="https://appstore.lazycat.cloud/#/shop/detail/io.zeroc.app.quickref">懒猫微服应用商店</a></li>
|
||||
</ul>
|
||||
|
||||
</div></div><div class="h2wrap-body"></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 <a href="https://wangchujiang.com/#/app" target="_blank">Kenny Wang</a>. Updated on 2025/08/10 15:53:14</footer></footer><script async src="https://www.googletagmanager.com/gtag/js?id=G-9MWEWXSDQK"></script><script>window.dataLayer = window.dataLayer || [];
|
||||
</div></div><div class="h2wrap-body"></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 <a href="https://wangchujiang.com/#/app" target="_blank">Kenny Wang</a>. Updated on 2025/08/12 10:20:33</footer></footer><script async src="https://www.googletagmanager.com/gtag/js?id=G-9MWEWXSDQK"></script><script>window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', 'G-9MWEWXSDQK');</script><script src="data.js?v=1.9.0" defer></script><script src="js/fuse.min.js?v=1.9.0" defer></script><script src="js/main.js?v=1.9.0" defer></script><div id="mysearch"><div class="mysearch-box"><div class="mysearch-input"><div><svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" viewBox="0 0 18 18">
|
||||
|
Reference in New Issue
Block a user