Премахнете допълнителните нежелани разрешения от манифеста на Android

Имам приложение за Android, искам да проверя дали всички разрешения, споменати в манифеста, са необходими или не?

По принцип искам да премахна нежеланите разрешения.

Какво трябва да направя?

Благодаря предварително


person Mitul Nakum    schedule 24.11.2011    source източник
comment
Related/dupe: Почистване на неизползваните разрешения за Android   -  person blahdiblah    schedule 29.04.2015


Отговори (5)


Отговорът, даден от user370305, като цяло е правилният. Вашият код на трета страна трябва адекватно да документира от какви разрешения се нуждае - комбинирайте това с разрешенията, от които се нуждае вашият собствен код, и трябва да сте готови.

Ако смятате, че това е недостатъчно, тогава:

Стъпка #1: Напишете модулен тестов пакет.

Стъпка 2: Добавете тестове към пакета, докато получите пълно покритие на изявленията.

Стъпка #3: Получете преминаване на всички тестове в пакета за тестове на единица.

Стъпка #4: Премахнете разрешение и вижте дали тестовете са неуспешни. Възстановете разрешенията, които причиняват повреда на тестовия пакет. Повторете за всички разрешения, за които не сте сигурни.

person CommonsWare    schedule 24.11.2011

За Android Studio:

1) Намерете кои разрешения са добавени (app\build\intermediates\manifests)

2) Добавете тези разрешения с tools:node="remove"

Пример:

Открих, че имам нежелано разрешение:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

И го премахнах, като добавих това към манифеста на приложението си:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove"/>
person Michal    schedule 13.10.2015

Можете да премахнете разрешението и да проверите резултатите от lint. Ако резултатите са чисти, тогава разрешението не се използва.

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

Android studio Версия: 3.0.1

person Sameer Tanuj    schedule 29.12.2017

Трябва да знаете коя функция и компонент се използват във вашето приложение. Въз основа на нуждите на този компонент трябва да добавите само тези разрешения. Не всички. Jusi проверете и премахнете други разрешения ръчно от манифеста.

person user370305    schedule 24.11.2011
comment
понякога приемаме отворен код, за да изпълним задачата си и има вероятност да не сме известни. и премахване на разрешения ръчно, може да се случи, че по погрешка премахна необходимото и то ще генерира изключение. - person Mitul Nakum; 24.11.2011

ако някой използва 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>
person Ragesh Pikalmunde    schedule 04.09.2020