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

时间:2011-11-24 12:53:49

标签: android permissions manifest

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

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

我该怎么办?

提前致谢

5 个答案:

答案 0 :(得分:12)

对于Android Studio:

1)查找添加的权限(app \ build \ intermediates \ manifests)

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

示例:

我发现我有不受欢迎的许可:

使用权限android:name =" android.permission.WRITE_EXTERNAL_STORAGE"

我将其添加到我的应用清单中删除了它:

使用权限android:name =" android.permission.WRITE_EXTERNAL_STORAGE"工具:节点="除去"

答案 1 :(得分:4)

user370305给出的答案通常是正确的。您的第三方代码应该充分记录它需要的权限 - 将其与您自己的代码所需的权限相结合,并且您应该设置。

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

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

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

步骤3:获取在单元测试套件中传递的所有测试。

步骤4:删除权限并查看测试是否失败。恢复导致测试套件故障的权限。重复您不确定的所有权限。

答案 2 :(得分:3)

您可以删除权限并检查lint结果。 如果结果是干净的,则不使用该权限。

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

Android studio版本:3.0.1

答案 3 :(得分:0)

您必须知道应用程序中使用了哪个功能和组件。在该组件的需要基础上,您只需添加这些权限。不是全部。 Jusi通过手动从清单中检查并删除其他权限。

答案 4 :(得分:0)

如果有人使用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>