从manifest android中删除额外不需要的权限



我有android应用程序,我想检查Manifest中提到的每个权限是否需要?

基本上我想删除不需要的权限。

我该怎么办?

Thanks in advance

Android Studio:

1)查找添加的权限(appbuildintermediatesmanifest)

2)使用工具添加这些权限:node="remove"

例子:

我发现我有多余的权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

我将它添加到我的应用程序清单中:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove"/>

您可以删除权限并检查lint结果。如果结果是干净的,那么权限没有被使用。

Analyse -> Run Inspection by Name -> Type "Missing Permissions" -> Run

Android studio版本:3.0.1

user370305给出的答案通常是正确的。你的第三方代码应该充分记录它需要的权限——把它和你自己的代码需要的权限结合起来,你就应该设置好。

如果您觉得这还不够,那么:

步骤#1:编写单元测试套件

步骤#2:向套件中添加测试,直到您有完整的语句覆盖。

步骤#3:获得单元测试套件中通过的所有测试。

步骤#4:删除权限并查看测试是否失败。恢复导致测试套件失败的权限。

您应该知道应用程序中使用的是哪个函数和组件。根据组件的需要,您必须只添加这些权限。没有呼叫。只需手动检查并从清单中删除其他权限。

如果有人正在使用Ionic:你可以写一个钩子来删除不需要的权限。这可以帮助使用ci-cd

例如,在Cordova项目中创建hooks/remove_permissions.js:

#!/usr/bin/env node
'use strict';
var permissionsToRemove = ['BLUETOOTH', 'WAKE_LOCK', 'FOREGROUND_SERVICE', 'BACKGROUND_SERVICE'];
var fs = require('fs');
var path = require('path');
var rootdir = '';
var manifestFile = path.join(rootdir, 'platforms/android/app/src/main/AndroidManifest.xml');
fs.readFile(manifestFile, 'utf8', function (err, data) {
    if (err) {
        return console.log(err);
    }
    var result = data;
    for (var i = 0; i < permissionsToRemove.length; i++) {
        console.log('Removing: <uses-permission android:name="android.permission.' + permissionsToRemove[i] + '" />');
        result = result.replace(
            '<uses-permission android:name="android.permission.' + permissionsToRemove[i] + '" />', '');
    }
    fs.writeFile(manifestFile, result, 'utf8', function (err) {
        if (err) {
            return console.log(err);
        }
    });
});

然后从config.xml中引用它:

<platform name="android">
...
<hook type="after_prepare" src="hooks/remove_permissions.js" />
</platform>

最新更新