Android移除sdk中的权限

有些第三方sdk中的敏感权限会给我们上架带来困扰,比如:QUERY_ALL_PACKAGES权限会导致上架Google play被拒。
案例:<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
在app下的Manifest中并没有添加该权限,而被google检测出来

在这里插入图片描述
此时我们可以通过合并后的清单文件去查找是否真的存在这个权限
在这里插入图片描述
在这里插入图片描述
在这里我们找到了这个权限。然后尝试手动删除,发现只要重新编译这个权限又会重新添加回来,无法删除。
在这里插入图片描述
原来这个文件的路径指向的是.gradle>caches,重新编译会重新加载。所以删掉后重新编译会重新出现。
解决方法:
在优先级最高的Manifest中移除权限
在项目的app>build.gradle中添加<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:node="remove"/>
在这里插入图片描述再看Merged Manifest中已经去掉了该权限
在这里插入图片描述
参考:合并多个清单文件
另外:网上有使用tools:node="remove"无法移除权限情况:在gradle打包流程中重新把权限添加回来了。
解决方案(网上找的,未验证过,我通过tools:node="remove"就已经移除了权限):
在编译构建流程中,把这些权限删除。在项目的app>build.gradle的android{}末尾添加以下代码

project.afterEvaluate {
    project.android.applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.processResources.doFirst { pm ->
                String manifestPath = output.processResources.manifestFile
                def manifestContent = file(manifestPath).getText()
                manifestContent = manifestContent.replace('<uses-permission android:name="android.permission.GET_TASKS"/>', '')
                manifestContent = manifestContent.replace('<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>', '')
                manifestContent = manifestContent.replace('<uses-permission android:name="android.permission.BLUETOOTH"/>', '')
                manifestContent = manifestContent.replace('<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>', '')
                manifestContent = manifestContent.replace('<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>', '')
                manifestContent = manifestContent.replace('<uses-permission android:name="android.permission.READ_PHONE_STATE"/>', '')
                manifestContent = manifestContent.replace('<uses-permission xmlns:tools="http://schemas.android.com/tools" android:name="android.permission.ACCESS_COARSE_LOCATION"/>', '')
                manifestContent = manifestContent.replace('<uses-permission xmlns:tools="http://schemas.android.com/tools" android:name="android.permission.BLUETOOTH"/>', '')
                println("manifestContent:" + manifestContent)
                file(manifestPath).write(manifestContent)
            }
        }
    }
}

最后:flutter项目可以通过从Android原生打开的方式进行这些操作,因为从dart packages上引入的第三方库在加载成功后也是通过原生的代码引入该第三方sdk
例如:
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值