diff --git a/.changes/cli-android-specified-targets-only.md b/.changes/cli-android-specified-targets-only.md new file mode 100644 index 000000000..6ca2c2c90 --- /dev/null +++ b/.changes/cli-android-specified-targets-only.md @@ -0,0 +1,6 @@ +--- +'cli.rs': 'patch' +'cli.js': 'patch' +--- + +Build only specified rust targets for `tauri android build` instead of all. diff --git a/tooling/cli/Cargo.lock b/tooling/cli/Cargo.lock index b0a6c20af..a93896b71 100644 --- a/tooling/cli/Cargo.lock +++ b/tooling/cli/Cargo.lock @@ -3770,9 +3770,9 @@ dependencies = [ [[package]] name = "tauri-mobile" -version = "0.2.5" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3603ad10b7b18e53f486b6a3de15b51d23098ce800a30162cb634a1c61afff64" +checksum = "8fad13092a3a94d64f783bb2818a839897431d7224c26a98890d189af041c404" dependencies = [ "cocoa", "colored 1.9.3", diff --git a/tooling/cli/Cargo.toml b/tooling/cli/Cargo.toml index b438f2b36..fc94a008a 100644 --- a/tooling/cli/Cargo.toml +++ b/tooling/cli/Cargo.toml @@ -42,7 +42,7 @@ path = "src/main.rs" openssl-vendored = [ "tauri-mobile/openssl-vendored" ] [dependencies] -tauri-mobile = { version = "0.2.5", default-features = false } +tauri-mobile = { version = "0.3", default-features = false } textwrap = { version = "0.11.0", features = [ "term_size" ] } jsonrpsee = { version = "0.16", features = [ "server" ] } jsonrpsee-core = "0.16" diff --git a/tooling/cli/src/build.rs b/tooling/cli/src/build.rs index c3e4cf963..b1271adca 100644 --- a/tooling/cli/src/build.rs +++ b/tooling/cli/src/build.rs @@ -240,20 +240,15 @@ pub fn command(mut options: Options, verbosity: u8) -> Result<()> { } pub fn setup(options: &mut Options, mobile: bool) -> Result { - let (merge_config, merge_config_path) = if let Some(config) = &options.config { - if config.starts_with('{') { - (Some(config.to_string()), None) - } else { - ( - Some( - std::fs::read_to_string(config).with_context(|| "failed to read custom configuration")?, - ), - Some(config.clone()), - ) - } - } else { - (None, None) + let (merge_config, merge_config_path) = match &options.config { + Some(config) if config.starts_with('{') => (Some(config.to_string()), None), + Some(config) => ( + Some(std::fs::read_to_string(config).with_context(|| "failed to read custom configuration")?), + Some(config.clone()), + ), + None => (None, None), }; + options.config = merge_config; let tauri_path = tauri_dir(); diff --git a/tooling/cli/src/mobile/android/build.rs b/tooling/cli/src/mobile/android/build.rs index 3a50bf8b0..f091888e4 100644 --- a/tooling/cli/src/mobile/android/build.rs +++ b/tooling/cli/src/mobile/android/build.rs @@ -181,7 +181,7 @@ fn run_build( env, noise_level, profile, - get_targets_or_all(Vec::new())?, + get_targets(options.targets.clone().unwrap_or_default())?, options.split_per_abi, )? } else { @@ -194,7 +194,7 @@ fn run_build( env, noise_level, profile, - get_targets_or_all(Vec::new())?, + get_targets(options.targets.unwrap_or_default())?, options.split_per_abi, )? } else { @@ -207,28 +207,24 @@ fn run_build( Ok(()) } -fn get_targets_or_all<'a>(targets: Vec) -> Result>> { - if targets.is_empty() { - Ok(Target::all().iter().map(|t| t.1).collect()) - } else { - let mut outs = Vec::new(); +fn get_targets<'a>(targets: Vec) -> Result>> { + let mut outs = Vec::new(); - let possible_targets = Target::all() - .keys() - .map(|key| key.to_string()) - .collect::>() - .join(","); + let possible_targets = Target::all() + .keys() + .map(|key| key.to_string()) + .collect::>() + .join(","); - for t in targets { - let target = Target::for_name(&t).ok_or_else(|| { - anyhow::anyhow!( - "Target {} is invalid; the possible targets are {}", - t, - possible_targets - ) - })?; - outs.push(target); - } - Ok(outs) + for t in targets { + let target = Target::for_name(&t).ok_or_else(|| { + anyhow::anyhow!( + "Target {} is invalid; the possible targets are {}", + t, + possible_targets + ) + })?; + outs.push(target); } + Ok(outs) } diff --git a/tooling/cli/src/mobile/mod.rs b/tooling/cli/src/mobile/mod.rs index 699347ea0..a2333b7bf 100644 --- a/tooling/cli/src/mobile/mod.rs +++ b/tooling/cli/src/mobile/mod.rs @@ -316,6 +316,7 @@ fn ensure_init(project_dir: PathBuf, target: Target) -> Result<()> { target.command_name(), ) } else { + #[allow(irrefutable_let_patterns)] if let Target::Android = target { create_dir_all(project_dir.join(".tauri").join("plugins"))?; } diff --git a/tooling/cli/templates/mobile/android/app/build.gradle.kts b/tooling/cli/templates/mobile/android/app/build.gradle.kts index 42df4573b..88f0ea032 100644 --- a/tooling/cli/templates/mobile/android/app/build.gradle.kts +++ b/tooling/cli/templates/mobile/android/app/build.gradle.kts @@ -30,7 +30,6 @@ android { isMinifyEnabled = false packagingOptions { {{~#each targets}} - jniLibs.keepDebugSymbols.add("*/{{this.abi}}/*.so") {{/each}} } @@ -46,17 +45,14 @@ android { flavorDimensions.add("abi") productFlavors { create("universal") { - val abiList = findProperty("abiList") as? String - dimension = "abi" ndk { - abiFilters += abiList?.split(",")?.map { it.trim() } ?: listOf( + abiFilters += (findProperty("abiList") as? String)?.split(",") ?: listOf( {{~#each targets}} "{{this.abi}}",{{/each}} ) } } - {{~#each targets}} create("{{this.arch}}") { @@ -74,8 +70,8 @@ android { rust { rootDirRel = "{{root-dir-rel}}" - targets = listOf({{quote-and-join target-names}}) - arches = listOf({{quote-and-join arches}}) + targets = (findProperty("targetList") as? String)?.split(",") ?: listOf({{quote-and-join target-names}}) + arches = (findProperty("archList") as? String)?.split(",") ?: listOf({{quote-and-join arches}}) } dependencies { @@ -98,9 +94,11 @@ afterEvaluate { android.applicationVariants.all { tasks["mergeUniversalReleaseJniLibFolders"].dependsOn(tasks["rustBuildRelease"]) tasks["mergeUniversalDebugJniLibFolders"].dependsOn(tasks["rustBuildDebug"]) - productFlavors.filter{ it.name != "universal" }.forEach { _ -> - val archAndBuildType = name.capitalize() - tasks["merge${archAndBuildType}JniLibFolders"].dependsOn(tasks["rustBuild${archAndBuildType}"]) + if (findProperty("targetList") == null) { + productFlavors.filter{ it.name != "universal" }.forEach { _ -> + val archAndBuildType = name.capitalize() + tasks["merge${archAndBuildType}JniLibFolders"].dependsOn(tasks["rustBuild${archAndBuildType}"]) + } } } }