/// <summary> /// Create the build.json file for Android /// </summary> /// <param name="filename"></param> public void ExportBuildJson(string filename) { BuildConfig config = new BuildConfig(); ConfigData data = new ConfigData() { keystore = _config.keyPath, storePassword = _config.passWord, alias = _config.keyAlias, password = _config.passWord, keystoreType = "", packageType = "apk", // or bundle }; AndroidBuildConfig androidConfig = new AndroidBuildConfig() { debug = data, release = data }; config.android = androidConfig; string json = JsonConvert.SerializeObject(config, new JsonSerializerSettings() { Formatting = Newtonsoft.Json.Formatting.Indented }); System.IO.File.WriteAllText(filename, json.ToString()); }
public static void Build(AndroidBuildConfig.Platform p, string outFile = null) { if(configs == null) throw new Exception("请先加载配置"); //CheckConfigError(); //PreProcessBuildFile(p); SetBuildParam(p); if(string.IsNullOrEmpty(outFile)) CompileAPK(p, GetSavePath(p)); else CompileAPK(p, outFile); }
public void OverwriteTest() { AndroidBuildConfig buildConfig = AndroidBuildConfig.CreateInstance <AndroidBuildConfig>(); buildConfig.ResetSetting(buildConfig); string productName = buildConfig.productName; string testProductName = "product_" + Random.Range(1, 100).ToString(); string overwriteJson = $"{{\"productName\": \"{testProductName}\"}}"; JsonUtility.FromJsonOverwrite(overwriteJson, buildConfig); Assert.AreNotEqual(buildConfig.productName, productName); Assert.AreEqual(buildConfig.productName, testProductName); }
public static string GetDefaultAPKName(AndroidBuildConfig.Platform p) { string apkName = "sgzs"; string time = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString("00") + DateTime.Now.Day.ToString("00") + DateTime.Now.Hour.ToString("00") + DateTime.Now.Minute.ToString("00"); string version = string.Format("v{0}", PlayerSettings.Android.bundleVersionCode); apkName = "sgzs_" + time + "_" + version + "_" + p.name; return apkName; }
private static void PreProcessBuildFile(AndroidBuildConfig.Platform p) { AssetDatabase.Refresh(); AssetDatabase.DeleteAsset("Assets/Plugins/Android"); AssetDatabase.Refresh(); try { CopyDirectory(configs.andriodTempFile, Application.dataPath + "/Plugins/Android"); CopyDirectory(configs.sdkFolder + "/" + p.sdk, Directory.GetParent(Application.dataPath).FullName); } catch(Exception e) { MyDebug.Log("copy error -> " + e); } FileInfo android_support_v4 = new FileInfo(Application.dataPath + "/Plugins/Android/libs/android-support-v4.jar"); FileInfo android_support_v13 = new FileInfo(Application.dataPath + "/Plugins/Android/libs/android-support-v13.jar"); if(android_support_v4.Exists && android_support_v13.Exists) { AssetDatabase.DeleteAsset("Assets/Plugins/Android/libs/android-support-v4.jar"); } AssetDatabase.Refresh(); }
private static void CompileAPK(AndroidBuildConfig.Platform p, string savePath) { if(string.IsNullOrEmpty(savePath)) return; List<string> EditorScenes = new List<string>(); foreach(EditorBuildSettingsScene scene in EditorBuildSettings.scenes) { if(!scene.enabled) continue; EditorScenes.Add(scene.path); } string res = BuildPipeline.BuildPlayer( EditorScenes.ToArray(), string.Format("{0}.apk", savePath), BuildTarget.Android, BuildOptions.None); if(res.Length > 0) // 这里最后加入一下打包日志,得到哪些包成功哪些失败 MyDebug.Log(string.Format("build {0} error -> {1}", p.name, res)); }
public static void SetBuildParam(AndroidBuildConfig.Platform p) { PlayerSettings.displayResolutionDialog = ResolutionDialogSetting.Enabled; string pName = PlayerSettings.bundleIdentifier; AssetDatabase.Refresh(); if(!string.IsNullOrEmpty(p.splash)) File.Copy(Directory.GetParent(Application.dataPath).FullName + "/" + p.splash, Directory.GetParent(Application.dataPath).FullName + "/" + configs.projectSplash, true); PlayerSettings.bundleIdentifier = GetPackageName(); PlayerSettings.Android.keystoreName = configs.keysotoreFolder + "/" + p.keystoreName; PlayerSettings.Android.keystorePass = p.keystorePass; PlayerSettings.Android.keyaliasName = p.keyaliasName; PlayerSettings.Android.keyaliasPass = p.keyaliasPass; //string[] defines = new string[p.macros.Count]; //for(int i = 0; i < p.macros.Count; i++) // defines[i] = "-define:" + p.macros[i]; //File.WriteAllLines(Application.dataPath + "/smcs.rsp", defines, Encoding.UTF8); AssetDatabase.Refresh(); }
public static AndroidBuildConfig LoadConfig() { TextAsset txt = Resources.Load("android_build") as TextAsset; if(txt == null) { MyDebug.Log("not found android_build file"); return null; } configs = null; try { configs = LitJson.JsonMapper.ToObject<AndroidBuildConfig>(txt.text); } catch(Exception e) { MyDebug.Log("android_build file error -> " + e); } return configs; }
public static string GetSavePath(AndroidBuildConfig.Platform p) { string apkName = AndroidBuilder.GetDefaultAPKName(p); string targetDir = EditorUtility.SaveFilePanel( "请选择发布安卓包目录", Directory.GetCurrentDirectory(), GetDefaultAPKName(p), "" ); targetDir = targetDir.Replace(".apk", ""); return targetDir; }