Переглянути джерело

fix: keep `build` artifacts on Android lib and plugins (#6229)

Lucas Fernandes Nogueira 2 роки тому
батько
коміт
78176edf4a
2 змінених файлів з 38 додано та 6 видалено
  1. 18 2
      core/tauri-build/src/mobile.rs
  2. 20 4
      tooling/cli/src/mobile/mod.rs

+ 18 - 2
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}'

+ 20 - 4
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(())