Skip to content

Commit 73c803a

Browse files
authored
feat(android): inject tauri.conf.json asset, add plugin config load API (#6837)
1 parent bb2a8cc commit 73c803a

File tree

10 files changed

+66
-10
lines changed

10 files changed

+66
-10
lines changed

.changes/android-load-config.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"tauri": patch
3+
---
4+
5+
Added static function `loadConfig` on the Android `PluginManager` class.

.changes/inject-config.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"cli.rs": patch
3+
"cli.js": patch
4+
---
5+
6+
Inject Tauri configuration in the Android assets.

core/tauri/mobile/android/src/main/java/app/tauri/FsUtils.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package app.tauri
66

77
import android.content.ContentUris
88
import android.content.Context
9+
import android.content.res.AssetManager
910
import android.database.Cursor
1011
import android.net.Uri
1112
import android.os.Environment
@@ -18,6 +19,12 @@ import kotlin.math.min
1819

1920
internal class FsUtils {
2021
companion object {
22+
fun readAsset(assetManager: AssetManager, fileName: String): String {
23+
assetManager.open(fileName).bufferedReader().use {
24+
return it.readText()
25+
}
26+
}
27+
2128
fun getFileUrlForUri(context: Context, uri: Uri): String? {
2229
// DocumentProvider
2330
if (DocumentsContract.isDocumentUri(context, uri)) {

core/tauri/mobile/android/src/main/java/app/tauri/plugin/PluginManager.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44

55
package app.tauri.plugin
66

7+
import android.content.Context
78
import android.content.Intent
89
import android.webkit.WebView
910
import androidx.activity.result.ActivityResult
1011
import androidx.activity.result.ActivityResultLauncher
1112
import androidx.activity.result.contract.ActivityResultContracts
1213
import androidx.appcompat.app.AppCompatActivity
14+
import app.tauri.FsUtils
1315
import app.tauri.JniMethod
1416
import app.tauri.Logger
1517

@@ -123,5 +125,14 @@ class PluginManager(val activity: AppCompatActivity) {
123125
}
124126
}
125127

128+
companion object {
129+
fun loadConfig(context: Context, plugin: String): JSObject {
130+
val tauriConfigJson = FsUtils.readAsset(context.assets, "tauri.conf.json")
131+
val tauriConfig = JSObject(tauriConfigJson)
132+
val plugins = tauriConfig.getJSObject("plugins", JSObject())
133+
return plugins.getJSObject(plugin, JSObject())
134+
}
135+
}
136+
126137
private external fun handlePluginResponse(id: Int, success: String?, error: String?)
127138
}
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
22

3-
43
-keep class $PACKAGE.TauriActivity {
54
public app.tauri.plugin.PluginManager getPluginManager();
65
}

tooling/cli/src/mobile/android.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,13 @@
33
// SPDX-License-Identifier: MIT
44

55
use clap::{Parser, Subcommand};
6-
use std::{env::set_var, fs::create_dir, process::exit, thread::sleep, time::Duration};
6+
use std::{
7+
env::set_var,
8+
fs::{create_dir, create_dir_all, write},
9+
process::exit,
10+
thread::sleep,
11+
time::Duration,
12+
};
713
use sublime_fuzzy::best_match;
814
use tauri_mobile::{
915
android::{
@@ -296,3 +302,15 @@ fn open_and_wait(config: &AndroidConfig, env: &Env) -> ! {
296302
sleep(Duration::from_secs(24 * 60 * 60));
297303
}
298304
}
305+
306+
fn inject_assets(config: &AndroidConfig, tauri_config: &TauriConfig) -> Result<()> {
307+
let asset_dir = config.project_dir().join("app/src/main/assets");
308+
create_dir_all(&asset_dir)?;
309+
310+
write(
311+
asset_dir.join("tauri.conf.json"),
312+
serde_json::to_string(&tauri_config)?,
313+
)?;
314+
315+
Ok(())
316+
}

tooling/cli/src/mobile/android/build.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
// SPDX-License-Identifier: MIT
44

55
use super::{
6-
configure_cargo, delete_codegen_vars, ensure_init, env, log_finished, open_and_wait, with_config,
7-
MobileTarget,
6+
configure_cargo, delete_codegen_vars, ensure_init, env, inject_assets, log_finished,
7+
open_and_wait, with_config, MobileTarget,
88
};
99
use crate::{
1010
build::Options as BuildOptions,
@@ -152,14 +152,16 @@ fn run_build(
152152
let out_dir = bin_path.parent().unwrap();
153153
let _lock = flock::open_rw(out_dir.join("lock").with_extension("android"), "Android")?;
154154

155+
let tauri_config = get_config(options.config.as_deref())?;
156+
155157
let cli_options = CliOptions {
156158
features: build_options.features.clone(),
157159
args: build_options.args.clone(),
158160
noise_level,
159161
vars: Default::default(),
160162
};
161163
let _handle = write_options(
162-
&get_config(options.config.as_deref())?
164+
&tauri_config
163165
.lock()
164166
.unwrap()
165167
.as_ref()
@@ -175,6 +177,8 @@ fn run_build(
175177
.get_or_insert(Vec::new())
176178
.push("custom-protocol".into());
177179

180+
inject_assets(config, tauri_config.lock().unwrap().as_ref().unwrap())?;
181+
178182
let apk_outputs = if options.apk {
179183
apk::build(
180184
config,

tooling/cli/src/mobile/android/dev.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
// SPDX-License-Identifier: MIT
44

55
use super::{
6-
configure_cargo, delete_codegen_vars, device_prompt, ensure_init, env, open_and_wait,
7-
setup_dev_config, with_config, MobileTarget,
6+
configure_cargo, delete_codegen_vars, device_prompt, ensure_init, env, inject_assets,
7+
open_and_wait, setup_dev_config, with_config, MobileTarget,
88
};
99
use crate::{
1010
dev::Options as DevOptions,
@@ -186,8 +186,10 @@ fn run_dev(
186186
noise_level,
187187
vars: Default::default(),
188188
};
189+
190+
let tauri_config = get_config(options.config.as_deref())?;
189191
let _handle = write_options(
190-
&get_config(options.config.as_deref())?
192+
&tauri_config
191193
.lock()
192194
.unwrap()
193195
.as_ref()
@@ -198,6 +200,8 @@ fn run_dev(
198200
cli_options,
199201
)?;
200202

203+
inject_assets(config, tauri_config.lock().unwrap().as_ref().unwrap())?;
204+
201205
if open {
202206
open_and_wait(config, &env)
203207
} else if let Some(device) = &device {

tooling/cli/src/mobile/android/open.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@
22
// SPDX-License-Identifier: Apache-2.0
33
// SPDX-License-Identifier: MIT
44

5-
use super::{ensure_init, env, with_config, MobileTarget};
6-
use crate::Result;
5+
use super::{ensure_init, env, inject_assets, with_config, MobileTarget};
6+
use crate::{helpers::config::get as get_config, Result};
77
use tauri_mobile::os;
88

99
pub fn command() -> Result<()> {
1010
with_config(
1111
Some(Default::default()),
1212
|_root_conf, config, _metadata, _cli_options| {
1313
ensure_init(config.project_dir(), MobileTarget::Android)?;
14+
inject_assets(config, get_config(None)?.lock().unwrap().as_ref().unwrap())?;
1415
let env = env()?;
1516
os::open_file_with("Android Studio", config.project_dir(), &env.base).map_err(Into::into)
1617
},
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/src/main/{{package-path}}/generated
22
/src/main/jniLibs/**/*.so
3+
/src/main/assets/tauri.conf.json
34
/tauri.build.gradle.kts
45
/proguard-tauri.pro

0 commit comments

Comments
 (0)