【问题标题】:Remove extra unwanted permissions from manifest android从清单 android 中删除多余的不需要的权限
【发布时间】:2011-11-24 12:53:49
【问题描述】:

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

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

我该怎么办?

提前致谢

【问题讨论】:

标签: android permissions manifest


【解决方案1】:

对于 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"
【解决方案2】:

user370305给出的答案通常是正确的。您的第三方代码应该充分记录它需要哪些权限——将其与您自己的代码所需的权限结合起来,您就应该做好准备。

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

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

第 2 步:将测试添加到套件中,直到获得完整的语句覆盖率。

第 3 步:让所有测试通过单元测试套件。

第 4 步:删除权限并查看测试是否失败。恢复导致测试套件失败的权限。对您不确定的所有权限重复此操作。

【讨论】:

    【解决方案3】:

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

    Analyse -&gt; Run Inspection by Name -&gt; Type "Missing Permissions" -&gt; Run

    Android 工作室版本:3.0.1

    【讨论】:

      【解决方案4】:

      您应该知道在您的应用程序中使用了哪些功能和组件。根据该组件的需要,您只需添加那些权限。不是全部。 Jusi 从清单中手动检查并删除其他权限。

      【讨论】:

      • 有时我们采用开源,来完成我们的任务,也有可能我们不为人知。并手动删除权限,可能会发生我错误地删除了需要的权限,它会产生异常。
      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-18
        • 2010-09-15
        • 1970-01-01
        • 1970-01-01
        • 2018-07-17
        • 1970-01-01
        • 2014-10-05
        相关资源
        最近更新 更多