私はこの時につまずくで修正を受けるべき。とにかくそれらを取り除くために、あなたは、回避策として、エディタのスクリプトを使用することができます。
protected void BuildAPKCustom(string buildPath)
{
bool manifestFileExists = false;
if(File.Exists(Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml")))
{
manifestFileExists = true;
File.Copy(Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml"), Path.Combine(Application.dataPath, "Plugins/Android/tmpManifestFile.xml"));
File.Delete(Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml"));
}
string[] levels = new string[EditorSceneManager.sceneCount];
for (int i = 0; i < levels.Length; i++)
{
levels[i] = EditorSceneManager.GetSceneAt(i).path;
}
BuildPipeline.BuildPlayer(levels, buildPath, BuildTarget.Android, BuildOptions.None);
XNamespace android = "http://schemas.android.com/apk/res/android";
string generatedXMLFilePath = Path.Combine(Application.dataPath, "../Temp/StagingArea/AndroidManifest.xml");
XDocument doc = XDocument.Load(generatedXMLFilePath);
IEnumerable<XElement> permissionElements = doc.Root.Elements("uses-permission");
foreach(XElement permission in permissionElements)
{
int potentialIndex = PERMISSIONS_NAMES_TO_DELETE.IndexOf(permission.Attribute(android + "name").Value.Replace("android.permission.", ""));
if(potentialIndex >= 0)
{
UnityEngine.Debug.Log("Permission deleted : " + PERMISSIONS_NAMES_TO_DELETE[potentialIndex]);
permission.Remove();
}
}
XElement overwritenPermission;
for(int i = 0; i < PERMISSIONS_NAMES_TO_DELETE.Length; i++)
{
overwritenPermission = new XElement("uses-permission");
overwritenPermission.Add(new XAttribute(android + "name", "android.permission." + PERMISSIONS_NAMES_TO_DELETE[i]));
overwritenPermission.Add(new XAttribute(android + "maxSdkVersion", "18"));
doc.Element("manifest").Add(overwritenPermission);
}
if(!Directory.Exists(Path.Combine(Application.dataPath, "Plugins/Android")))
{
Directory.CreateDirectory(Path.Combine(Application.dataPath, "Plugins/Android"));
}
doc.Save(Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml"));
BuildPipeline.BuildPlayer(levels, buildPath, BuildTarget.Android, BuildOptions.None);
if(manifestFileExists)
{
File.Delete(Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml"));
File.Copy(Path.Combine(Application.dataPath, "Plugins/Android/tmpManifestFile.xml"), Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml"));
File.Delete(Path.Combine(Application.dataPath, "Plugins/Android/tmpManifestFile.xml"));
}
Process.Start(Path.GetDirectoryName(buildPath));
}
(PERMISSIONS_NAMES_TO_DELETE
を削除する権限名のstring[]
ている権限名は、あなたがhereを見ることができるリストを取得するには。)
何それがないことである:
- に(存在する場合)、前のAndroidManifest.xmlファイルを取得/ Android/Plugins/フォルダにコピーして、一時的なものにコピーして削除してください。
- UnityにAndroidManifestを生成させる最初のビルドを実行してください。マニフェストは、「削除」、不必要な権限に彼自身の
- 編集上のXMLファイルが
- が正しく
マニフェストセットを有する第2のビルドを実行
/アンドロイド/プラグイン/に編集したマニフェストを保存します権限削除の背後にあるアイデアは、最大APIレベルをこのようなより低いレベルに設定することです。アクセス権は使用できません(このAPIレベルではMUSTが存在することに注意してください)。
は、この情報がお役に立てば幸い、
は素敵なデザインの答えをありがとう!それが動作するかどうかテストして教えてください。 – igorpavlov
これは動作しません。ビルドに失敗し、「アンドロイドマニフェストをマージできません」というメッセージが表示されます。 – igorpavlov
ビルド設定で一致する 'minSDKVersion'を変更する必要があります(残念ながら忘れてしまいました)。 – Kardux