2023-12-26 03:40:48 +00:00
|
|
|
|
|
|
|
|
namespace Guru.Editor
|
|
|
|
|
{
|
|
|
|
|
using NUnit.Framework;
|
|
|
|
|
using UnityEditor;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Xml;
|
|
|
|
|
|
|
|
|
|
public static class AndroidManifestMod
|
|
|
|
|
{
|
|
|
|
|
private const string TargetPath = "Plugins/Android/AndroidManifest.xml";
|
|
|
|
|
private const string ValOptimizeInitialization = "com.google.android.gms.ads.flag.OPTIMIZE_INITIALIZATION";
|
|
|
|
|
private const string ValOptimizeAdLoading = "com.google.android.gms.ads.flag.OPTIMIZE_AD_LOADING";
|
2024-03-12 02:35:30 +00:00
|
|
|
|
2024-03-31 03:31:50 +00:00
|
|
|
private const string PermissionReadPostNotifications = "android.permission.POST_NOTIFICATIONS";
|
2024-03-12 02:35:30 +00:00
|
|
|
private const string PermissionReadPhoneState = "android.permission.READ_PHONE_STATE";
|
2024-04-23 07:06:36 +00:00
|
|
|
private const string PermissionAccessCoarseLocation = "android.permission.ACCESS_COARSE_LOCATION";
|
|
|
|
|
private const string PermissionAccessFineLocation = "android.permission.ACCESS_FINE_LOCATION";
|
2024-04-25 12:53:39 +00:00
|
|
|
private const string PermissionReadExternalStorage = "android.permission.READ_EXTERNAL_STORAGE";
|
|
|
|
|
private const string PermissionReadLogs = "android.permission.READ_LOGS";
|
2024-03-31 03:31:50 +00:00
|
|
|
private const string NetworkSecurityConfig = "networkSecurityConfig";
|
|
|
|
|
private const string NetworkSecurityConfigValue = "@xml/network_security_config";
|
2024-05-30 01:41:22 +00:00
|
|
|
private const string PermissionAdjustReadPermission = "com.adjust.preinstall.READ_PERMISSION"; // Adjust permission
|
|
|
|
|
private const string AdjustQueriesActionValue = "com.attribution.REFERRAL_PROVIDER"; // Adjust action
|
2024-03-31 03:31:50 +00:00
|
|
|
|
2024-05-30 01:41:22 +00:00
|
|
|
// Add Permissions
|
2024-04-25 12:53:39 +00:00
|
|
|
private static string[] addPermissions = new[]
|
|
|
|
|
{
|
|
|
|
|
PermissionReadPostNotifications,
|
2024-05-30 01:41:22 +00:00
|
|
|
PermissionAdjustReadPermission,
|
2024-04-25 12:53:39 +00:00
|
|
|
};
|
|
|
|
|
|
2024-05-30 01:41:22 +00:00
|
|
|
// Remove Permissions
|
2024-04-25 12:53:39 +00:00
|
|
|
private static string[] removePermissions = new[]
|
|
|
|
|
{
|
|
|
|
|
PermissionReadPhoneState,
|
|
|
|
|
PermissionAccessCoarseLocation,
|
|
|
|
|
PermissionAccessFineLocation,
|
|
|
|
|
PermissionReadExternalStorage,
|
|
|
|
|
PermissionReadLogs,
|
|
|
|
|
};
|
|
|
|
|
|
2023-12-26 03:40:48 +00:00
|
|
|
|
|
|
|
|
private static string TargetFullPath = Path.Combine(Application.dataPath, TargetPath);
|
|
|
|
|
|
|
|
|
|
public static bool IsManifestExist() => File.Exists(TargetFullPath);
|
|
|
|
|
|
|
|
|
|
public static void Apply()
|
|
|
|
|
{
|
|
|
|
|
if (!IsManifestExist())
|
|
|
|
|
{
|
|
|
|
|
CopyManifest();
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-31 03:31:50 +00:00
|
|
|
FixAndroidManifest();
|
2024-03-12 02:35:30 +00:00
|
|
|
}
|
|
|
|
|
|
2024-03-31 03:31:50 +00:00
|
|
|
|
2024-03-12 02:35:30 +00:00
|
|
|
/// <summary>
|
2024-03-31 03:31:50 +00:00
|
|
|
/// Fix Android Manifest
|
2024-03-12 02:35:30 +00:00
|
|
|
/// </summary>
|
2024-03-31 03:31:50 +00:00
|
|
|
private static void FixAndroidManifest()
|
2024-03-12 02:35:30 +00:00
|
|
|
{
|
2024-03-31 03:31:50 +00:00
|
|
|
var doc = AndroidManifestDoc.Load(TargetFullPath);
|
2023-12-26 03:40:48 +00:00
|
|
|
|
2024-03-31 03:31:50 +00:00
|
|
|
// --- network_security_config ---
|
|
|
|
|
doc.SetApplicationAttribute(NetworkSecurityConfig, NetworkSecurityConfigValue);
|
|
|
|
|
doc.AddApplicationReplaceItem($"android:{NetworkSecurityConfig}");
|
|
|
|
|
// ---- Metadata ---
|
|
|
|
|
doc.SetMetadata(ValOptimizeInitialization, "true");
|
|
|
|
|
doc.SetMetadata(ValOptimizeAdLoading, "true");
|
|
|
|
|
// ---- Permission ---
|
2024-04-25 12:53:39 +00:00
|
|
|
// Add needed permissions
|
|
|
|
|
foreach (var p in addPermissions)
|
|
|
|
|
{
|
|
|
|
|
doc.AddPermission(p);
|
|
|
|
|
}
|
|
|
|
|
// Remove sensitive permissions
|
|
|
|
|
foreach (var p in removePermissions)
|
|
|
|
|
{
|
|
|
|
|
doc.RemovePermission(p);
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-31 03:31:50 +00:00
|
|
|
// --- Bundle Id ---
|
|
|
|
|
doc.SetPackageName(PlayerSettings.applicationIdentifier);
|
2023-12-26 03:40:48 +00:00
|
|
|
|
2024-05-30 01:41:22 +00:00
|
|
|
// --- Adjust Preinstall (Content provider) ---
|
|
|
|
|
doc.AddQueriesIntent(AdjustQueriesActionValue);
|
|
|
|
|
|
2024-03-31 03:31:50 +00:00
|
|
|
doc.Save();
|
2024-03-12 02:35:30 +00:00
|
|
|
}
|
2024-03-31 03:31:50 +00:00
|
|
|
|
2024-03-12 02:35:30 +00:00
|
|
|
|
|
|
|
|
/// <summary>
|
2024-03-31 03:31:50 +00:00
|
|
|
/// 拷贝 AndroidManifest
|
2024-03-12 02:35:30 +00:00
|
|
|
/// </summary>
|
2023-12-26 03:40:48 +00:00
|
|
|
private static void CopyManifest()
|
|
|
|
|
{
|
|
|
|
|
if (File.Exists(TargetFullPath)) return;
|
|
|
|
|
|
2024-04-09 13:00:18 +00:00
|
|
|
var path = GuruEditorHelper.GetAssetPath(nameof(AndroidManifestMod), "Script", true);
|
2023-12-26 03:40:48 +00:00
|
|
|
if (!string.IsNullOrEmpty(path))
|
|
|
|
|
{
|
2024-01-24 02:08:49 +00:00
|
|
|
var from = Path.GetFullPath($"{path}/../../Files/AndroidManifest.txt");
|
2023-12-26 03:40:48 +00:00
|
|
|
if (File.Exists(from))
|
|
|
|
|
{
|
|
|
|
|
File.Copy(from, TargetFullPath);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-03-31 03:31:50 +00:00
|
|
|
|
2023-12-26 03:40:48 +00:00
|
|
|
#region Testing
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public static void Test_Injection()
|
|
|
|
|
{
|
|
|
|
|
Apply();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|