You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity导出项目后自动添加多余权限至Android Manifest的解决求助

解决Unity导出Android时自动添加多余权限的问题

1. 把tools:node="remove"用对

很多人用这个属性无效,是因为没加正确的命名空间。在自定义Manifest根节点加上xmlns:tools="http://schemas.android.com/tools",再给要移除的权限加上tools:node="remove"。把这个Manifest放在Assets/Plugins/Android目录下,同时在Player Settings里勾选Custom Main Manifest指向它。

示例代码:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          package="com.your.package.name">
    <!-- 替换成你要删除的权限名 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove"/>
</manifest>

2. 检查Unity Player Settings的触发项

Unity会根据你启用的服务或代码调用的API自动添加权限:

  • 打开Player Settings > Android > Other Settings,关掉不需要的服务(比如Location Service)。
  • 排查代码里有没有调用位置、蓝牙这类需要权限的API,确认不需要就删掉相关代码。

3. 用Gradle模板排除依赖带来的权限

如果多余权限是第三方插件(广告、分析SDK)引入的:

  1. 在Player Settings里勾选Custom Gradle Template,生成Assets/Plugins/Android/mainTemplate.gradle。
  2. 在android块里添加排除依赖的代码,示例:
configurations.all {
    // 根据实际情况修改要排除的依赖
    exclude group: 'com.google.android.gms', module: 'play-services-location'
}

也可以用./gradlew dependencies命令查看依赖树,定位具体是哪个插件带进来的权限。

4. 写构建后处理脚本自动清权限

如果上面的方法都不管用,直接写个Editor脚本,构建完成后自动删除多余权限:
把下面的脚本放在Assets/Editor目录下,每次构建Android项目后会自动清理指定权限:

using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using System.IO;
using System.Xml;

public class RemoveExtraPermissions : IPostprocessBuildWithReport
{
    public int callbackOrder => 100;

    public void OnPostprocessBuild(BuildReport report)
    {
        if (report.summary.platform != BuildTarget.Android) return;

        string manifestPath = Path.Combine(report.summary.outputPath, "src/main/AndroidManifest.xml");
        XmlDocument doc = new XmlDocument();
        doc.Load(manifestPath);

        XmlNamespaceManager nsManager = new XmlNamespaceManager(doc.NameTable);
        nsManager.AddNamespace("android", "http://schemas.android.com/apk/res/android");

        // 替换成你要移除的权限列表
        RemovePermission(doc, nsManager, "android.permission.ACCESS_FINE_LOCATION");
        RemovePermission(doc, nsManager, "android.permission.ACCESS_COARSE_LOCATION");

        doc.Save(manifestPath);
    }

    private void RemovePermission(XmlDocument doc, XmlNamespaceManager nsManager, string permissionName)
    {
        XmlNodeList nodes = doc.SelectNodes("//uses-permission[@android:name='" + permissionName + "']", nsManager);
        foreach (XmlNode node in nodes)
        {
            node.ParentNode.RemoveChild(node);
        }
    }
}

内容的提问来源于stack exchange,提问作者Veronica Ajisola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:01:13