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 (changed) { manifest.Save(); } }
static void DrawPref() { EditorGUIUtility.labelWidth = 320; if (settings == null) { settings = UniWebViewEditorSettings.GetSerializedSettings(); } settings.Update(); EditorGUI.BeginChangeCheck(); EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("Android Manifest", EditorStyles.boldLabel); EditorGUI.indentLevel++; EditorGUILayout.PropertyField(settings.FindProperty("usesCleartextTraffic")); DrawDetailLabel("If you need to load plain HTTP content."); EditorGUILayout.PropertyField(settings.FindProperty("writeExternalStorage")); DrawDetailLabel("If you need to download an image from web page."); EditorGUILayout.PropertyField(settings.FindProperty("accessFineLocation")); DrawDetailLabel("If you need to enable location support in web view."); EditorGUILayout.EndVertical(); if (EditorGUI.EndChangeCheck()) { settings.ApplyModifiedProperties(); AssetDatabase.SaveAssets(); } EditorGUIUtility.labelWidth = 0; }
public static void Patch(string filePath) { string[] lines = File.ReadAllLines(filePath); bool hasAndroidXProperty = lines.Any(text => text.Contains("android.useAndroidX")); bool hasJetifierProperty = lines.Any(text => text.Contains("android.enableJetifier")); StringBuilder builder = new StringBuilder(); foreach (string each in lines) { builder.AppendLine(each); } if (!hasAndroidXProperty) { builder.AppendLine("android.useAndroidX=true"); } if (!hasJetifierProperty && UniWebViewEditorSettings.GetOrCreateSettings().enableJetifier) { builder.AppendLine("android.enableJetifier=true"); } File.WriteAllText(filePath, builder.ToString()); }
private void PatchBuildGradle(string root) { var gradleFilePath = GetGradleFilePath(root); var config = new UniWebViewGradleConfig(gradleFilePath); var kotlinPrefix = "implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:"; var kotlinVersion = "1.4.10'"; var browserPrefix = "implementation 'androidx.browser:browser:"; var browserVersion = "1.2.0'"; var settings = UniWebViewEditorSettings.GetOrCreateSettings(); 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(); }
static void DrawPref() { EditorGUIUtility.labelWidth = 320; if (settings == null) { settings = UniWebViewEditorSettings.GetSerializedSettings(); } settings.Update(); EditorGUI.BeginChangeCheck(); EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("Android Manifest", EditorStyles.boldLabel); EditorGUI.indentLevel++; EditorGUILayout.PropertyField(settings.FindProperty("usesCleartextTraffic")); DrawDetailLabel("If you need to load plain HTTP content."); EditorGUILayout.PropertyField(settings.FindProperty("writeExternalStorage")); DrawDetailLabel("If you need to download an image from web page."); EditorGUILayout.PropertyField(settings.FindProperty("accessFineLocation")); DrawDetailLabel("If you need to enable location support in web view."); EditorGUI.indentLevel--; EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("Gradle Build", EditorStyles.boldLabel); EditorGUI.indentLevel++; EditorGUILayout.PropertyField(settings.FindProperty("addsKotlin")); DrawDetailLabel("Turn off this if another library is already adding Kotlin runtime."); EditorGUILayout.PropertyField(settings.FindProperty("addsAndroidBrowser")); DrawDetailLabel("Turn off this if another library is already adding 'androidx.browser:browser'."); EditorGUILayout.PropertyField(settings.FindProperty("enableJetifier")); DrawDetailLabel("Turn off this if you do not need Jetifier (for converting other legacy support dependencies to Android X)."); EditorGUILayout.EndVertical(); if (EditorGUI.EndChangeCheck()) { settings.ApplyModifiedProperties(); AssetDatabase.SaveAssets(); } EditorGUIUtility.labelWidth = 0; }