查看 AndroidManifest 合并后的 permission 来自哪里

31 篇文章 0 订阅
14 篇文章 1 订阅

查看 AndroidManifest 合并后的 permission 来自哪里

一、来源

同步后合并的 AndroidManifest.xml 文件位于 /app/build/intermediates/manifests/full/debug/AndroidManifest.xml。

在这里插入图片描述

AndroidManifest.xml 中内容的来源:

  • 项目自身 AndroidManifest.xml
  • 子 module 中的 AndroidManifest.xml
  • 依赖中的 AndroidManifest.xml
  • gradle 中的代码修改

二、查看

2.1 来自文件

2.1.1 直接查看

项目自身、子 module、依赖中都有 AndroidManifest.xml,最终会合成一份。

项目自身、子 module 可以直接到文件处查看。

依赖中的 AndroidManifest.xml 查看:

在 External Libraries 中点击某个 aar 的 classes.jar,右键选择 Reveal in Finder,在 classes.jar 的上层目录就能看到 AndroidManifest.xml,然后就可以挨个查看了。
在这里插入图片描述

在这里插入图片描述

2.1.2 自定义 Task

当集成的依赖很多时,一个个查看太麻烦,可以通过一个自定义 Task 来实现。processDebugManifest 这个 Task 用来合并 AndroidManifest.xml,我们可以通过它得到它的输入文件,从而进行分析。

以 android.permission.ACCESS_FINE_LOCATION 为例:
在 build.gradle 中加入

afterEvaluate {
    tasks.matching {
        (it.name == "processDebugManifest")
    }.each { task ->
        String permission = "android.permission.ACCESS_FINE_LOCATION"
        task.getInputs().files.files.each {
            if (findPermission(it, permission)) {
                println("输入文件:$it has permission $permission")
            }
        }
    }
}
def findPermission(File xmlFile, String permission) {
    def android = new Namespace('http://schemas.android.com/apk/res/android', 'android')
    def androidManifest = new XmlParser().parse(xmlFile)
    def hasPermission = false
    androidManifest["uses-permission"].each {
        def permissionName = it.attributes().get(android.name)
        if (permissionName == permission) {
            hasPermission = true
        }
    }
    return hasPermission
}

同步后,在 build 窗口就可以看到带有该权限的 AndroidManifest.xml,这样就可以分析了

输入文件:/Users/gdeer/.android/build-cache/75763cae25bfa2ec0f31ac42a948b5f67acbc5a9/output/AndroidManifest.xml has permission android.permission.ACCESS_FINE_LOCATION
输入文件:/Users/gdeer/.android/build-cache/129f490776ca4e6c0f5f85d27ab02d9eea983ac8/output/AndroidManifest.xml has permission android.permission.ACCESS_FINE_LOCATION
输入文件:/Users/gdeer/.android/build-cache/113e629d13c24321ffb305db01c8208b9b6e9476/output/AndroidManifest.xml has permission android.permission.ACCESS_FINE_LOCATION

2.1.3 Android Studio 功能

使用 Android Studio 自带的功能就可以很清楚地查看。
在这里插入图片描述
在这里插入图片描述
也可以直接查看合并日志:/app/build/outputs/logs/manifest-merger-debug-report.txt

2.2 来自代码

Task的修改:查看 Task 代码

插件的修改:一一去除 apply plugin xxx,查看同步后的 AndroidManifest.xml 是否改变

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值