BuildConfig.cs 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using UnityEditor;
  8. using UnityEngine;
  9. namespace HybridCLR
  10. {
  11. public static partial class BuildConfig
  12. {
  13. #if !UNITY_IOS
  14. [InitializeOnLoadMethod]
  15. private static void Setup()
  16. {
  17. ///
  18. /// unity允许使用UNITY_IL2CPP_PATH环境变量指定il2cpp的位置,因此我们不再直接修改安装位置的il2cpp,
  19. /// 而是在本地目录
  20. ///
  21. var localIl2cppDir = LocalIl2CppDir;
  22. if (!Directory.Exists(localIl2cppDir))
  23. {
  24. Debug.LogError($"本地il2cpp目录:{localIl2cppDir} 不存在,未安装本地il2cpp。请手动执行一次 {HybridCLRDataDir} 目录下的 init_local_il2cpp_data.bat 或者 init_local_il2cpp_data.sh 文件");
  25. }
  26. Environment.SetEnvironmentVariable("UNITY_IL2CPP_PATH", localIl2cppDir);
  27. }
  28. #endif
  29. public static string ProjectDir => Directory.GetParent(Application.dataPath).ToString();
  30. public static string ScriptingAssembliesJsonFile { get; } = "ScriptingAssemblies.json";
  31. public static string HybridCLRBuildCacheDir => Application.dataPath + "/HybridCLRBuildCache";
  32. public static string HotFixDllsOutputDir => $"{HybridCLRDataDir}/HotFixDlls";
  33. public static string AssetBundleOutputDir => $"{HybridCLRBuildCacheDir}/AssetBundleOutput";
  34. public static string AssetBundleSourceDataTempDir => $"{HybridCLRBuildCacheDir}/AssetBundleSourceData";
  35. public static string HybridCLRDataDir { get; } = $"{ProjectDir}/HybridCLRData";
  36. public static string AssembliesPostIl2CppStripDir => $"{HybridCLRDataDir}/AssembliesPostIl2CppStrip";
  37. public static string LocalIl2CppDir => $"{HybridCLRDataDir}/LocalIl2CppData/il2cpp";
  38. public static string MethodBridgeCppDir => $"{LocalIl2CppDir}/libil2cpp/hybridclr/interpreter";
  39. public static string Il2CppBuildCacheDir { get; } = $"{ProjectDir}/Library/Il2cppBuildCache";
  40. public static string GetHotFixDllsOutputDirByTarget(BuildTarget target)
  41. {
  42. return $"{HotFixDllsOutputDir}/{target}";
  43. }
  44. public static string GetAssembliesPostIl2CppStripDir(BuildTarget target)
  45. {
  46. return $"{AssembliesPostIl2CppStripDir}/{target}";
  47. }
  48. public static string GetOriginBuildStripAssembliesDir(BuildTarget target)
  49. {
  50. #if UNITY_2021_1_OR_NEWER
  51. #if UNITY_STANDALONE_WIN
  52. return $"{ProjectDir}/Library/Bee/artifacts/WinPlayerBuildProgram/ManagedStripped";
  53. #elif UNITY_ANDROID
  54. return $"{ProjectDir}/Library/Bee/artifacts/Android/ManagedStripped";
  55. #elif UNITY_IOS
  56. return $"{ProjectDir}/Library/PlayerDataCache/iOS/Data/Managed";
  57. #elif UNITY_WEBGL
  58. return $"{ProjectDir}/Library/Bee/artifacts/WebGL/ManagedStripped";
  59. #else
  60. throw new NotSupportedException("GetOriginBuildStripAssembliesDir");
  61. #endif
  62. #else
  63. return target == BuildTarget.Android ?
  64. $"{ProjectDir}/Temp/StagingArea/assets/bin/Data/Managed" :
  65. $"{ProjectDir}/Temp/StagingArea/Data/Managed/";
  66. #endif
  67. }
  68. public static string GetAssetBundleOutputDirByTarget(BuildTarget target)
  69. {
  70. return $"{AssetBundleOutputDir}/{target}";
  71. }
  72. public static string GetAssetBundleTempDirByTarget(BuildTarget target)
  73. {
  74. return $"{AssetBundleSourceDataTempDir}/{target}";
  75. }
  76. }
  77. }