update: 增加 AndroidManifestMode 的去 permission 功能
parent
3871841988
commit
bb4073aa2f
|
|
@ -15,6 +15,10 @@ namespace Guru.Editor
|
|||
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";
|
||||
private const string NamespaceAndroid = "http://schemas.android.com/apk/res/android";
|
||||
private const string NamespaceTools = "http://schemas.android.com/tools";
|
||||
|
||||
private const string PermissionReadPhoneState = "android.permission.READ_PHONE_STATE";
|
||||
|
||||
private static string TargetFullPath = Path.Combine(Application.dataPath, TargetPath);
|
||||
|
||||
|
|
@ -30,10 +34,30 @@ namespace Guru.Editor
|
|||
var doc = new XmlDocument();
|
||||
doc.Load(TargetFullPath);
|
||||
|
||||
var rootNode = doc.SelectSingleNode("manifest/application");
|
||||
SetApplicationMod(doc);
|
||||
SetPermissionMod(doc);
|
||||
|
||||
doc.Save(TargetFullPath);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fix all Elements in <Applicaiton>
|
||||
/// </summary>
|
||||
/// <param name="doc"></param>
|
||||
private static void SetApplicationMod(XmlDocument doc)
|
||||
{
|
||||
string rootName = "manifest/application";
|
||||
var rootNode = doc.SelectSingleNode(rootName);
|
||||
int item1 = 0;
|
||||
int item2 = 0;
|
||||
|
||||
if (rootNode == null)
|
||||
{
|
||||
Debug.LogError($"Can't find root with name {rootName} ...");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
XmlNodeList metadatas = rootNode.SelectNodes("meta-data");
|
||||
if (metadatas != null && metadatas.Count > 0)
|
||||
{
|
||||
|
|
@ -52,21 +76,19 @@ namespace Guru.Editor
|
|||
}
|
||||
}
|
||||
|
||||
string androidSP = "http://schemas.android.com/apk/res/android";
|
||||
|
||||
if (item1 == 0)
|
||||
{
|
||||
var e = doc.CreateElement("meta-data");
|
||||
e.SetAttribute("name",androidSP, ValOptimizeInitialization);
|
||||
e.SetAttribute("value",androidSP, "true");
|
||||
rootNode.AppendChild(e);
|
||||
var e = doc.CreateElement("meta-data");
|
||||
e.SetAttribute("name",NamespaceAndroid, ValOptimizeInitialization);
|
||||
e.SetAttribute("value",NamespaceAndroid, "true");
|
||||
rootNode.AppendChild(e);
|
||||
}
|
||||
|
||||
if (item2 == 0)
|
||||
{
|
||||
var e = doc.CreateElement("meta-data");
|
||||
e.SetAttribute("name",androidSP,ValOptimizeAdLoading);
|
||||
e.SetAttribute("value",androidSP, "true");
|
||||
e.SetAttribute("name",NamespaceAndroid,ValOptimizeAdLoading);
|
||||
e.SetAttribute("value",NamespaceAndroid, "true");
|
||||
rootNode.AppendChild(e);
|
||||
}
|
||||
|
||||
|
|
@ -75,10 +97,55 @@ namespace Guru.Editor
|
|||
{
|
||||
rootE.Attributes["package"].Value = PlayerSettings.applicationIdentifier; // 写入包名
|
||||
}
|
||||
|
||||
doc.Save(TargetFullPath);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fix all permissions
|
||||
/// </summary>
|
||||
/// <param name="doc"></param>
|
||||
private static void SetPermissionMod(XmlDocument doc)
|
||||
{
|
||||
string attName = "uses-permission";
|
||||
string rootName = "manifest";
|
||||
bool isBuild = false;
|
||||
var rootNode = doc.SelectSingleNode(rootName);
|
||||
|
||||
XmlElement item1 = null;
|
||||
if (rootNode == null)
|
||||
{
|
||||
Debug.LogError($"Can't find root with name {rootName} ...");
|
||||
return;
|
||||
}
|
||||
|
||||
XmlNodeList permissions = rootNode.SelectNodes(attName);
|
||||
if (permissions != null && permissions.Count > 0)
|
||||
{
|
||||
foreach (XmlElement e in permissions)
|
||||
{
|
||||
if (e != null)
|
||||
{
|
||||
if (e.HasAttribute("android:name"))
|
||||
{
|
||||
if (e.Attributes["android:name"].Value == PermissionReadPhoneState) item1 = e;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
isBuild = false;
|
||||
if (item1 == null)
|
||||
{
|
||||
isBuild = true;
|
||||
item1 = doc.CreateElement(attName);
|
||||
}
|
||||
item1.SetAttribute("name",NamespaceAndroid, PermissionReadPhoneState);
|
||||
item1.SetAttribute("node",NamespaceTools, "remove");
|
||||
if (isBuild) rootNode.AppendChild(item1);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static void CopyManifest()
|
||||
{
|
||||
if (File.Exists(TargetFullPath)) return;
|
||||
|
|
|
|||
Loading…
Reference in New Issue