我有Android应用程序,我想检查Manifest中提到的每个权限是否都是必需的?
基本上我想删除不需要的权限。
我该怎么办?
提前致谢
答案 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>