我有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>