From 8b78fd8b00f2e4065df340d95c3219769b19b7b7 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期日, 10 五月 2026 19:11:38 +0800
Subject: [PATCH] 0312 新增导出工程给AS打包逻辑

---
 Assets/Editor/Tool/ClientPackage.cs |  101 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 101 insertions(+), 0 deletions(-)

diff --git a/Assets/Editor/Tool/ClientPackage.cs b/Assets/Editor/Tool/ClientPackage.cs
index ca66e51..1c76cb1 100644
--- a/Assets/Editor/Tool/ClientPackage.cs
+++ b/Assets/Editor/Tool/ClientPackage.cs
@@ -560,6 +560,107 @@
     }
 
     public static VersionConfig versionConfig1 = null;
+
+    /// <summary>
+    /// 瀵煎嚭Android宸ョ▼缁橝S鎵撳寘
+    /// Unity鍙礋璐e鍑簎nityLibrary锛孲DK/Gradle/绛惧悕绛夊潎鐢盇S宸ョ▼澶勭悊
+    /// </summary>
+    public static void ExportAndroidProject(string _publisher, int _buildIndex, bool _development, string _outputPath, string _assetBundlePath)
+    {
+        PreBuild(_publisher, _buildIndex);
+
+        var versionName = string.Empty;
+        var versionConfig = GetVersionConfig(_publisher, out versionName);
+
+        PlayerSettings.Android.bundleVersionCode = VersionConfig.GetVersionNumber(versionConfig.version);
+        PlayerSettings.enableInternalProfiler = _development;
+
+        // 鍏堟竻鐞哠treamingAssets锛屽啀浠嶢ssetBundles鐩綍鎷疯礉璧勬簮鍒癝treamingAssets
+        // 杩欐牱BuildPlayer瀵煎嚭宸ョ▼鏃舵墠浼氬寘鍚父鎴忚祫婧�
+        var streamingPath = ResourcesPath.Instance.StreamingAssetPath;
+        if (Directory.Exists(streamingPath))
+            Directory.Delete(streamingPath, true);
+
+        if (!string.IsNullOrEmpty(_assetBundlePath) && Directory.Exists(_assetBundlePath))
+        {
+            var files = new List<FileInfo>();
+            FileExtersion.GetAllDirectoryFileInfos(_assetBundlePath, files);
+            foreach (var file in files)
+            {
+                var extension = Path.GetExtension(file.FullName);
+                if (extension == ".meta")
+                    continue;
+
+                var relativePath = FileExtersion.GetFileRelativePath(_assetBundlePath, file.FullName);
+                if (relativePath.StartsWith("patch"))
+                    continue;
+
+                var to = StringUtility.Concat(streamingPath, relativePath);
+                var directory = Path.GetDirectoryName(to);
+                if (!Directory.Exists(directory))
+                    Directory.CreateDirectory(directory);
+
+                File.Copy(file.FullName, to, true);
+            }
+            Debug.LogFormat("璧勬簮鎷疯礉瀹屾垚锛屼粠 {0} 鍒� {1}", _assetBundlePath, streamingPath);
+        }
+        else
+        {
+            Debug.LogWarningFormat("AssetBundle璺緞涓虹┖鎴栦笉瀛樺湪: {0}锛屽鍑哄伐绋嬪皢涓嶅寘鍚父鎴忚祫婧�", _assetBundlePath);
+        }
+
+        // 娓呯悊Unity绔棫鐨凙ndroid鎻掍欢鏂囦欢锛岄伩鍏嶅鍑哄伐绋嬫椂甯﹀叆SDK鐩稿叧鏂囦欢锛堢敱AS澶勭悊锛�
+        if (Directory.Exists(THE_2TH_WORLD_SDK_PATH))
+            Directory.Delete(THE_2TH_WORLD_SDK_PATH, true);
+        if (File.Exists(MANIFEST_PATH))
+            File.Delete(MANIFEST_PATH);
+        if (File.Exists(File_baseProjectTemplate))
+            File.Delete(File_baseProjectTemplate);
+        if (File.Exists(File_google_services))
+            File.Delete(File_google_services);
+        if (File.Exists(File_gradleTemplate))
+            File.Delete(File_gradleTemplate);
+        if (File.Exists(File_LauncherManifest))
+            File.Delete(File_LauncherManifest);
+        if (File.Exists(File_launcherTemplate))
+            File.Delete(File_launcherTemplate);
+        if (File.Exists(File_mainTemplate))
+            File.Delete(File_mainTemplate);
+        if (File.Exists(File_deps))
+            File.Delete(File_deps);
+        if (File.Exists(File_huawei_services))
+            File.Delete(File_huawei_services);
+        if (File.Exists(File_settingGradle))
+            File.Delete(File_settingGradle);
+
+        AssetDatabase.SaveAssets();
+        AssetDatabase.Refresh();
+
+        // 鍏抽敭璁剧疆锛氬鍑轰负Gradle宸ョ▼鑰岄潪鐩存帴鎵揂PK
+        EditorUserBuildSettings.exportAsGoogleAndroidProject = true;
+        EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Gradle;
+
+        // 瀵煎嚭璺緞
+        string outputDir = Path.Combine(_outputPath, versionName + "_" + versionConfig.clientPackageFlag);
+
+        if (Directory.Exists(outputDir))
+        {
+            Directory.Delete(outputDir, true);
+        }
+
+        Debug.LogFormat("寮�濮嬪鍑篈ndroid宸ョ▼锛岃緭鍑鸿矾寰�: {0}", outputDir);
+
+        BuildPipeline.BuildPlayer(baseLevels, outputDir, BuildTarget.Android,
+            _development ? BuildOptions.AcceptExternalModificationsToPlayer | BuildOptions.Development | BuildOptions.AllowDebugging
+                         : BuildOptions.AcceptExternalModificationsToPlayer);
+
+        Debug.LogFormat("瀵煎嚭Android宸ョ▼瀹屾垚锛佽緭鍑鸿矾寰�: {0}", outputDir);
+        Debug.LogFormat("璇峰皢unityLibrary鐩綍鍐呭鏇存柊鍒癆S宸ョ▼涓紝鐒跺悗鍦ˋS涓繘琛屾墦鍖�");
+
+        // 瀵煎嚭瀹屾垚鍚庢仮澶嶈缃�
+        EditorUserBuildSettings.exportAsGoogleAndroidProject = false;
+    }
+
     public static void BuildIpa(string _sdkPath, string _publisher, int _buildIndex, bool _replace)
     {
         PreBuild(_publisher, _buildIndex);

--
Gitblit v1.8.0