【发布时间】:2011-11-24 12:53:49
【问题描述】:
我有 android 应用,我想检查 Manifest 中提到的每个权限是否都是必需的?
基本上我想删除不需要的权限。
我该怎么办?
提前致谢
【问题讨论】:
标签: android permissions manifest
我有 android 应用,我想检查 Manifest 中提到的每个权限是否都是必需的?
基本上我想删除不需要的权限。
我该怎么办?
提前致谢
【问题讨论】:
标签: android permissions manifest
对于 Android Studio:
1) 查找添加了哪些权限(app\build\intermediates\manifests)
2) 使用工具添加这些权限:node="remove"
示例:
我发现我有不需要的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
我通过将其添加到我的应用清单中来删除它:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove"/>
【讨论】:
xmlns:tools="http://schemas.android.com/tools"。
user370305给出的答案通常是正确的。您的第三方代码应该充分记录它需要哪些权限——将其与您自己的代码所需的权限结合起来,您就应该做好准备。
如果你觉得这还不够,那么:
第 1 步:编写单元测试套件。
第 2 步:将测试添加到套件中,直到获得完整的语句覆盖率。
第 3 步:让所有测试通过单元测试套件。
第 4 步:删除权限并查看测试是否失败。恢复导致测试套件失败的权限。对您不确定的所有权限重复此操作。
【讨论】:
您可以删除权限并检查 lint 结果。 如果结果是干净的,那么权限就没有被使用。
Analyse -> Run Inspection by Name -> Type "Missing Permissions" -> Run
Android 工作室版本:3.0.1
【讨论】:
您应该知道在您的应用程序中使用了哪些功能和组件。根据该组件的需要,您只需添加那些权限。不是全部。 Jusi 从清单中手动检查并删除其他权限。
【讨论】:
如果有人在使用 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>
【讨论】: