Ако исках да проуча как и къде са използвани разрешения [заявени в Mainfest.xml] в приложение за Android за целите на премахването им, има ли лесен начин да направя това? Предлагат ли lint или findbugs някаква поддръжка за проследяване на разрешения, използвани/злоупотребявани в проект?
Почистете неизползваните разрешения за Android
Отговори (7)
Дойдох от бъдещето, за да спася живота ви.
Тук (в бъдеще) LINT проверява за липсващи разрешения, както можете да видите в проверки на LINT.
- Така че отидете на своя
AndroidManifest.xml
и премахнете всички тагове<uses-permission>
с помощта на разрешения за Android (което означава, че не изтривайте разрешения, които принадлежат на вашето приложение, катоUA_DATA
иC2D_MESSAGE
). - След това стартирайте LINT анализ. Кликнете върху
Analyze
и след това върхуInspect Code...
- Виж под
Android -> Constant and Resource Type Mismatches
- Трябва да видите всички липсващи разрешения.
- След това можете просто да щракнете с десния бутон върху тях и да изберете
Apply fix "Add Permission"
. Ако изберете тази опция, Android Studio ще включва едно разрешение за всяка грешка. Така че в крайна сметка ще имате множество копия на едно и също разрешение във вашия манифестен файл, просто изтрийте дубликатите. Можете да го направите и ръчно.
Ето описанието на правилото LINT:
ID ResourceType
Описание
Тази проверка разглежда извикванията на API на Android, които са анотирани с различни анотации за поддръжка (като RequiresPermission или UiThread) и маркира всички повиквания, които не използват API правилно, както е посочено от анотациите. Примери за грешки, отбелязани от тази проверка:
- Предаване на грешен тип цяло число на ресурс (като R.string) към API, който очаква различен тип (като R.dimen).
- Забравяне да се извика замененият метод (чрез super) в методи, които го изискват
- Извикване на метод, който изисква разрешение, без да е декларирано това разрешение в манифеста
- Предаване на препратка към цвят на ресурс към метод, който очаква RGB цяло число.
...и много други. За повече информация вижте документацията на http://developer.android.com/tools/debugging/annotations.html
Използвам Android Studio 2.1.2.
Във файла на манифеста на вашето приложение трябва да имате раздел „Обединен манифест“, където можете да видите окончателния си манифест и разрешенията, които искате, можете да щракнете върху разрешение, за да видите откъде идва. (кой го е добавил - ex': sdk или от какъв код идва)
Има и лесен начин за премахване на разрешение чрез добавяне към манифеста:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
tools:node="remove" />
Също така не забравяйте да добавите инструментите в горната част:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="...">
Начинът, по който бих го направил за приложение, за което не съм написал кода, е да премахна разрешенията едно по едно и да тествам приложението от край до край всеки път. Когато се провали, стеснете го. Ако не, това разрешение не може да се използва.
Ще трябва да опитате да ги премахнете един по един и да проверите дали приложението все още работи добре. Това не се проверява от линт по никакъв начин (трябва да бъде).
Когато се върнат (те в момента не работят), можете да качите вашия apk на този уебсайт (ако това е добре за вас) и да им позволите да анализират статично разрешенията, които използвате: http://www.android-permissions.org/
Най-добрият начин е да разберете какво всъщност може да направи. Ако някога ще използва камерата, тогава знаете, че имате нужда от разрешение за камерата.
Разгледайте http://developer.android.com/reference/android/Manifest.permission.html потърсете разрешението, което сте използвали във вашия Mainfest
Или можете просто да научите какво прави вашето приложение и след това да прегледате разрешенията и да видите кои са допълнителни. Какво прави вашето приложение, какви функции на телефона използва. Трябва да има някаква документация някъде за това какво трябва да прави и какви методи има там