123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- using System;
- using UnityEditor;
- using UnityEditor.Android;
- using UnityEngine;
- using System.IO;
- using System.Text;
-
-
- class UniWebViewPostBuildProcessor : IPostGenerateGradleAndroidProject
- {
- public int callbackOrder { get { return 1; } }
- public void OnPostGenerateGradleAndroidProject(string path) {
- Debug.Log("<UniWebView> UniWebView Post Build Scirpt is patching manifest file and gradle file...");
- PatchAndroidManifest(path);
- PatchBuildGradle(path);
- PatchGradleProperty(path);
- }
-
- private void PatchAndroidManifest(string root) {
- var manifestFilePath = GetManifestFilePath(root);
- var manifest = new UniWebViewAndroidManifest(manifestFilePath);
-
- var changed = false;
-
- Debug.Log("<UniWebView> Set hardware accelerated to enable smooth web view experience and HTML5 support like video and canvas.");
- changed = manifest.SetHardwareAccelerated() || changed;
-
- var settings = UniWebViewEditorSettings.GetOrCreateSettings();
- if (settings.usesCleartextTraffic) {
- changed = manifest.SetUsesCleartextTraffic() || changed;
- }
- if (settings.writeExternalStorage) {
- changed = manifest.AddWriteExternalStoragePermission() || changed;
- }
- if (settings.accessFineLocation) {
- changed = manifest.AddAccessFineLocationPermission() || changed;
- }
- if (settings.authCallbackUrls.Length > 0) {
- changed = manifest.AddAuthCallbacksIntentFilter(settings.authCallbackUrls) || changed;
- }
-
- if (settings.supportLINELogin) {
- changed = manifest.AddAuthCallbacksIntentFilter(new string[] { "lineauth://auth" }) || changed;
- }
-
- if (changed) {
- manifest.Save();
- }
- }
-
- private void PatchBuildGradle(string root) {
- var gradleFilePath = GetGradleFilePath(root);
- var config = new UniWebViewGradleConfig(gradleFilePath);
-
- var settings = UniWebViewEditorSettings.GetOrCreateSettings();
-
- var kotlinPrefix = "implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:";
- var kotlinVersion = String.IsNullOrWhiteSpace(settings.kotlinVersion)
- ? UniWebViewEditorSettings.defaultKotlinVersion : settings.kotlinVersion;
-
- var browserPrefix = "implementation 'androidx.browser:browser:";
- var browserVersion = String.IsNullOrWhiteSpace(settings.androidBrowserVersion)
- ? UniWebViewEditorSettings.defaultAndroidBrowserVersion : settings.androidBrowserVersion;
-
- var dependenciesNode = config.ROOT.FindChildNodeByName("dependencies");
- if (dependenciesNode != null) {
- // Add kotlin
- if (settings.addsKotlin) {
- dependenciesNode.ReplaceContenOrAddStartsWith(kotlinPrefix, kotlinPrefix + kotlinVersion + "'");
- Debug.Log("<UniWebView> Updated Kotlin dependency in build.gradle.");
- }
-
- // Add browser package
- if (settings.addsAndroidBrowser) {
- dependenciesNode.ReplaceContenOrAddStartsWith(browserPrefix, browserPrefix + browserVersion + "'");
- Debug.Log("<UniWebView> Updated Browser dependency in build.gradle.");
- }
- } else {
- Debug.LogError("UniWebViewPostBuildProcessor didn't find the `dependencies` field in build.gradle.");
- Debug.LogError("Although we can continue to add a `dependencies`, make sure you have setup Gradle and the template correctly.");
-
- var newNode = new UniWebViewGradleNode("dependencies", config.ROOT);
- if (settings.addsKotlin) {
- newNode.AppendContentNode(kotlinPrefix + kotlinVersion);
- }
- if (settings.addsAndroidBrowser) {
- newNode.AppendContentNode(browserPrefix + browserVersion);
- }
- newNode.AppendContentNode("implementation(name: 'UniWebView', ext:'aar')");
- config.ROOT.AppendChildNode(newNode);
- }
- config.Save();
- }
-
- private void PatchGradleProperty(string root) {
- var gradlePropertyFilePath = GetGradlePropertyFilePath(root);
- UniWebViewGradlePropertyPatcher.Patch(gradlePropertyFilePath);
- }
-
- private string CombinePaths(string[] paths) {
- var path = "";
- foreach (var item in paths) {
- path = Path.Combine(path, item);
- }
- return path;
- }
-
- private string GetManifestFilePath(string root) {
- string[] comps = {root, "src", "main", "AndroidManifest.xml"};
- return CombinePaths(comps);
- }
-
- private string GetGradleFilePath(string root) {
- string[] comps = {root, "build.gradle"};
- return CombinePaths(comps);
- }
-
- private string GetGradlePropertyFilePath(string root) {
- #if UNITY_2019_3_OR_NEWER
- string[] compos = {root, "..", "gradle.properties"};
- #else
- string[] compos = {root, "gradle.properties"};
- #endif
- return CombinePaths(compos);
- }
- }
|