在Unity中为Android构建时,如何禁用平板电脑或大屏幕支持?
我在播放器设置中看不到任何选项。
另外,我已经看到了这个问题:Android: Disable to install app on tablets
我正在使用Unity构建我的APK,因此我不知道如何编辑我的AndroidManifest.xml
文件。
答案 0 :(得分:0)
您可以通过在Assets / Plugins / Android文件夹中放置一个自定义AndroidManifest.xml供Unity使用。
如果您制作Android版本,则此文件的基本副本(可用作创建自定义版本的起点)位于Temp / StagingArea中。请注意,退出Unity时会删除此目录!
答案 1 :(得分:0)
由于这个答案很旧,这里有一点更新:
自 Unity 2019.3 起,support-screens 节点位于 LauncherManifest.xml 中,其属性不能被自定义属性覆盖。你会遇到合并冲突。
看看基础知识: https://docs.unity3d.com/Manual/android-manifest.html
所以,我做了什么: 临时构建文件夹中有 10 多个 mainfest xml 文件,很难弄清楚要操作哪个才能在最终的 AndroidManifest.xml 中获得正确的设置。所以我写了一个小脚本,使用 IPostGenerateGradleAndroidProject 接口并更改所有适当的节点。然后我删除了不必要的东西,这就是结果:
using System.Collections.Generic;
using System.IO;
using UnityEditor.Android;
using UnityEngine;
public class ChangeSupportedScreens : IPostGenerateGradleAndroidProject
{
public int callbackOrder { get { return 0; } }
private List<string> _androidManifestPaths = new List<string>
{
"Temp/gradleOut/launcher/src/main",
"Temp/gradleOut/unityLibrary/src/main",
};
private const string ANDROID_MANIFEST_FILENAME = "AndroidManifest.xml";
public void OnPostGenerateGradleAndroidProject(string _)
{
foreach (var manifestPath in _androidManifestPaths)
{
var androidManifestPath = GetAndroidManifestPath(manifestPath);
if (File.Exists(androidManifestPath))
{
var androidManifestXML = File.ReadAllText(androidManifestPath);
androidManifestXML = ReplaceValue(androidManifestXML, "largeScreens", "true", "false");
androidManifestXML = ReplaceValue(androidManifestXML, "xlargeScreens", "true", "false");
File.WriteAllText(androidManifestPath, androidManifestXML);
}
else
{
Debug.LogError($"Error: File {androidManifestPath} not found");
}
}
}
private static string ReplaceValue(string content, string key, string oldValue, string newValue)
=> content.Contains(key) ? content.Replace($"{key}=\"{oldValue}\"", $"{key}=\"{newValue}\"") : content;
private static string GetAndroidManifestPath(string path)
{
var separator = Path.DirectorySeparatorChar;
var manifestPath = path.Replace('/', separator);
return Path.GetFullPath(Path.Combine(Application.streamingAssetsPath, $"..{separator}..{separator}{manifestPath}", ANDROID_MANIFEST_FILENAME));
}
}
希望这会有所帮助。我在 apktool 的帮助下仔细检查了结果,以查看打包的 APK AndroidManifest.xml 中发生了什么。 当然,如果常用方法(在 Plugins/Android 中使用自己的 AndroidManifest.xml 不适合您),您可以使用此剪辑来覆盖其他值。
免责声明: