diff --git a/core/tauri-build/src/mobile.rs b/core/tauri-build/src/mobile.rs index d3648ccf3..31c68fcd6 100644 --- a/core/tauri-build/src/mobile.rs +++ b/core/tauri-build/src/mobile.rs @@ -1,6 +1,6 @@ use std::{ env::var, - fs, + fs::{self, rename}, path::{PathBuf, MAIN_SEPARATOR}, }; @@ -46,7 +46,19 @@ impl PluginBuilder { println!("cargo:rerun-if-changed={}", gradle_settings_path); println!("cargo:rerun-if-changed={}", app_build_gradle_path); - let target = PathBuf::from(out_dir).join(&pkg_name); + let out_dir = PathBuf::from(out_dir); + let target = out_dir.join(&pkg_name); + + // keep build folder if it exists + let build_path = target.join("build"); + let out_dir = if build_path.exists() { + let out_dir = out_dir.join(".tauri-plugin-build"); + rename(&build_path, &out_dir)?; + Some(out_dir) + } else { + None + }; + let _ = fs::remove_dir_all(&target); for entry in walkdir::WalkDir::new(&source) { @@ -60,6 +72,10 @@ impl PluginBuilder { } } + if let Some(out_dir) = out_dir { + rename(&out_dir, &build_path)?; + } + let gradle_settings = fs::read_to_string(&gradle_settings_path)?; let include = format!( "include ':{pkg_name}' diff --git a/tooling/cli/src/mobile/mod.rs b/tooling/cli/src/mobile/mod.rs index 918c2b72f..b529b8f56 100644 --- a/tooling/cli/src/mobile/mod.rs +++ b/tooling/cli/src/mobile/mod.rs @@ -25,7 +25,7 @@ use std::{ env::{set_var, temp_dir}, ffi::OsString, fmt::Write, - fs::{create_dir_all, read_to_string, remove_dir_all, write}, + fs::{create_dir_all, read_to_string, remove_dir_all, rename, write}, net::SocketAddr, path::PathBuf, process::ExitStatus, @@ -318,14 +318,30 @@ fn ensure_init(project_dir: PathBuf, target: Target) -> Result<()> { #[allow(irrefutable_let_patterns)] if let Target::Android = target { let tauri_api_dir_path = project_dir.join("tauri-api"); - if tauri_api_dir_path.exists() { + let build_path = if tauri_api_dir_path.exists() { + // keep build folder if it exists + let build_path = tauri_api_dir_path.join("build"); + let out_dir = if build_path.exists() { + let out_dir = project_dir.join(".tauri-api-build"); + rename(&build_path, &out_dir)?; + Some(out_dir) + } else { + None + }; remove_dir_all(&tauri_api_dir_path)?; - } + out_dir + } else { + None + }; create_dir_all(&tauri_api_dir_path)?; ANDROID_API_PROJECT_DIR - .extract(tauri_api_dir_path) + .extract(&tauri_api_dir_path) .context("failed to extract Tauri API project")?; + + if let Some(build_path) = build_path { + rename(build_path, tauri_api_dir_path.join("build"))?; + } } Ok(())