AppForShare

Android permissions in plain English: what your test build asks for and why testers care

· 4 min read

Android permissions in plain English: what your test build asks for and why testers care

Every Android build carries a list of permissions in its manifest: android.permission.CAMERA, READ_CONTACTS, SYSTEM_ALERT_WINDOW. Developers read them as code. Testers, clients and reviewers see them as prompts on the phone, often in the middle of a test, and a prompt nobody expected is a common reason a tester stops. This guide explains the three kinds of Android permissions, gives a plain English line for the ones testers meet most, and shows how to check what your test build asks for before you send it.

Three kinds of permissions

Granted at install

Normal permissions such as internet access or vibration are granted when the app is installed. The tester never sees a prompt. They are still worth knowing, because a store listing or a privacy review may ask about them.

Asked at runtime

Dangerous permissions, as Android calls them, such as camera, location, contacts and microphone, show a prompt the first time the app needs them. The tester can allow or deny. These are the ones that surprise people.

Special access

A few permissions are not a prompt at all: the user has to turn them on in system settings. Showing over other apps, all files access, installing other apps and exact alarms are examples. A test build that needs one of these should tell testers where to switch it on.

Common permissions in plain English

PermissionKindIn plain English
CAMERARuntimeCan take photos and record video with the camera.
RECORD_AUDIORuntimeCan record sound with the microphone.
ACCESS_FINE_LOCATIONRuntimeCan see your precise location.
ACCESS_COARSE_LOCATIONRuntimeCan see your approximate location.
ACCESS_BACKGROUND_LOCATIONRuntimeCan see your location when the app is not open.
READ_CONTACTSRuntimeCan read your contacts.
READ_MEDIA_IMAGESRuntimeCan see the photos on the phone.
READ_MEDIA_VISUAL_USER_SELECTEDRuntimeCan see the photos and videos you pick for it.
POST_NOTIFICATIONSRuntimeCan show notifications.
BLUETOOTH_CONNECTRuntimeCan connect to Bluetooth devices paired with the phone.
READ_PHONE_STATERuntimeCan read the phone status, such as the network and whether a call is in progress.
SEND_SMSRuntimeCan send text messages.
SYSTEM_ALERT_WINDOWSpecialCan show its windows on top of other apps.
MANAGE_EXTERNAL_STORAGESpecialCan read, change and delete all files in shared storage.
REQUEST_INSTALL_PACKAGESSpecialCan ask to install other apps.
SCHEDULE_EXACT_ALARMSpecialCan set alarms and reminders that go off at an exact time.
QUERY_ALL_PACKAGESSpecialCan see all apps installed on the phone.
INTERNETInstallCan use the internet.
RECEIVE_BOOT_COMPLETEDInstallCan start when the phone turns on.
com.google.android.gms.permission.AD_IDInstallCan read the advertising ID of the phone.

These lines say what a permission allows. They do not say whether an app is safe or whether it uses the permission well; that depends on the app.

Why testers care, and why you should

  • Surprise prompts stop tests. A client asked for their contacts by a shopping app demo will often stop and ask why. Telling them up front avoids the pause.
  • SDKs add permissions you did not write. An analytics, ads or messaging library can add entries to the merged manifest. The advertising ID line above is a common one. Catch it on the test build, not in a store review.
  • Stores ask about some of them. Google Play has declarations for sensitive permissions such as background location, SMS and call log, all files access and installing packages. A new one in a build is worth a look before release.

Check your build before you send it

Three ways, from quickest to most thorough:

  1. Drop the APK in a free inspector. The APK analyzer reads the file in your browser, without uploading it, and lists the permissions with the same plain words.
  2. Read the merged manifest. In Android Studio, open AndroidManifest.xml and the Merged Manifest tab to see which library added each entry.
  3. Compare with the last build. On AppForShare, the build page has a Permissions card that marks what is new since the last build, and "What changed" names new permissions with their plain label.

What testers see on AppForShare

On every AppForShare install page, on every plan and also for builds uploaded without an account, testers see what the build asks for in plain words before they tap Install: "This app asks for: camera, contacts", then one sentence per permission, in the tester's language (13 languages). The map covers about 70 Android permissions and about 35 iOS usage keys, and for iOS builds the app's own reason is shown as written. Names we have no words for are listed as they are. It is a fixed list, not AI, so it says the same thing every time and costs nothing. The CLI appforshare info and the MCP tool build_info return the same list as permissionsPlain, so a script or an AI coding tool can flag a new permission.

Common questions

Why does my build ask for a permission I never added?

A library added it to the merged manifest. Check the Merged Manifest tab, then remove it with a tools:node="remove" entry if you do not need it.

Do install time permissions show a prompt?

No. They are granted with the app. Only runtime permissions show a prompt, and special access is turned on in settings.

Does AppForShare tell testers an app is safe?

No. It only says what each permission lets the app do. It does not scan, approve or vouch for apps.

Keep reading

App Distribution Platform · · 5 min read

AppForShare File Size and Upload Limits

AppForShare limits the size of each build you upload by plan: 50 MB without an account, 150 MB on the Free plan, 2 GB on Pro and 4 GB on Team. Accounts also have a storage total, and every plan...