Bez popisu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

UniWebViewPostBuildProcessor.cs 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. using System;
  2. using UnityEditor;
  3. using UnityEditor.Android;
  4. using UnityEngine;
  5. using System.IO;
  6. using System.Text;
  7. class UniWebViewPostBuildProcessor : IPostGenerateGradleAndroidProject
  8. {
  9. public int callbackOrder { get { return 1; } }
  10. public void OnPostGenerateGradleAndroidProject(string path) {
  11. Debug.Log("<UniWebView> UniWebView Post Build Scirpt is patching manifest file and gradle file...");
  12. PatchAndroidManifest(path);
  13. PatchBuildGradle(path);
  14. PatchGradleProperty(path);
  15. }
  16. private void PatchAndroidManifest(string root) {
  17. var manifestFilePath = GetManifestFilePath(root);
  18. var manifest = new UniWebViewAndroidManifest(manifestFilePath);
  19. var changed = false;
  20. Debug.Log("<UniWebView> Set hardware accelerated to enable smooth web view experience and HTML5 support like video and canvas.");
  21. changed = manifest.SetHardwareAccelerated() || changed;
  22. var settings = UniWebViewEditorSettings.GetOrCreateSettings();
  23. if (settings.usesCleartextTraffic) {
  24. changed = manifest.SetUsesCleartextTraffic() || changed;
  25. }
  26. if (settings.writeExternalStorage) {
  27. changed = manifest.AddWriteExternalStoragePermission() || changed;
  28. }
  29. if (settings.accessFineLocation) {
  30. changed = manifest.AddAccessFineLocationPermission() || changed;
  31. }
  32. if (settings.authCallbackUrls.Length > 0) {
  33. changed = manifest.AddAuthCallbacksIntentFilter(settings.authCallbackUrls) || changed;
  34. }
  35. if (settings.supportLINELogin) {
  36. changed = manifest.AddAuthCallbacksIntentFilter(new string[] { "lineauth://auth" }) || changed;
  37. }
  38. if (changed) {
  39. manifest.Save();
  40. }
  41. }
  42. private void PatchBuildGradle(string root) {
  43. var gradleFilePath = GetGradleFilePath(root);
  44. var config = new UniWebViewGradleConfig(gradleFilePath);
  45. var settings = UniWebViewEditorSettings.GetOrCreateSettings();
  46. var kotlinPrefix = "implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:";
  47. var kotlinVersion = String.IsNullOrWhiteSpace(settings.kotlinVersion)
  48. ? UniWebViewEditorSettings.defaultKotlinVersion : settings.kotlinVersion;
  49. var browserPrefix = "implementation 'androidx.browser:browser:";
  50. var browserVersion = String.IsNullOrWhiteSpace(settings.androidBrowserVersion)
  51. ? UniWebViewEditorSettings.defaultAndroidBrowserVersion : settings.androidBrowserVersion;
  52. var dependenciesNode = config.ROOT.FindChildNodeByName("dependencies");
  53. if (dependenciesNode != null) {
  54. // Add kotlin
  55. if (settings.addsKotlin) {
  56. dependenciesNode.ReplaceContenOrAddStartsWith(kotlinPrefix, kotlinPrefix + kotlinVersion + "'");
  57. Debug.Log("<UniWebView> Updated Kotlin dependency in build.gradle.");
  58. }
  59. // Add browser package
  60. if (settings.addsAndroidBrowser) {
  61. dependenciesNode.ReplaceContenOrAddStartsWith(browserPrefix, browserPrefix + browserVersion + "'");
  62. Debug.Log("<UniWebView> Updated Browser dependency in build.gradle.");
  63. }
  64. } else {
  65. Debug.LogError("UniWebViewPostBuildProcessor didn't find the `dependencies` field in build.gradle.");
  66. Debug.LogError("Although we can continue to add a `dependencies`, make sure you have setup Gradle and the template correctly.");
  67. var newNode = new UniWebViewGradleNode("dependencies", config.ROOT);
  68. if (settings.addsKotlin) {
  69. newNode.AppendContentNode(kotlinPrefix + kotlinVersion);
  70. }
  71. if (settings.addsAndroidBrowser) {
  72. newNode.AppendContentNode(browserPrefix + browserVersion);
  73. }
  74. newNode.AppendContentNode("implementation(name: 'UniWebView', ext:'aar')");
  75. config.ROOT.AppendChildNode(newNode);
  76. }
  77. config.Save();
  78. }
  79. private void PatchGradleProperty(string root) {
  80. var gradlePropertyFilePath = GetGradlePropertyFilePath(root);
  81. UniWebViewGradlePropertyPatcher.Patch(gradlePropertyFilePath);
  82. }
  83. private string CombinePaths(string[] paths) {
  84. var path = "";
  85. foreach (var item in paths) {
  86. path = Path.Combine(path, item);
  87. }
  88. return path;
  89. }
  90. private string GetManifestFilePath(string root) {
  91. string[] comps = {root, "src", "main", "AndroidManifest.xml"};
  92. return CombinePaths(comps);
  93. }
  94. private string GetGradleFilePath(string root) {
  95. string[] comps = {root, "build.gradle"};
  96. return CombinePaths(comps);
  97. }
  98. private string GetGradlePropertyFilePath(string root) {
  99. #if UNITY_2019_3_OR_NEWER
  100. string[] compos = {root, "..", "gradle.properties"};
  101. #else
  102. string[] compos = {root, "gradle.properties"};
  103. #endif
  104. return CombinePaths(compos);
  105. }
  106. }