make android app with 2 activies
This commit is contained in:
commit
8dde02de3d
17 changed files with 1360 additions and 0 deletions
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
/Dockerfile
|
||||
/app/result/*
|
||||
/app/android-sdk
|
||||
/app/android-sdk/*
|
||||
/app/keystore
|
||||
/app/obj/*
|
||||
!/app/obj/.gitkeep
|
||||
/app/app.apk
|
||||
/app/Makefile.app-config
|
21
README.md
Normal file
21
README.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
# Android App with 2 Activities
|
||||
|
||||
Goal is to have an Android Application with "more than 1 activiy" and
|
||||
thus to allow enable to start those Activities
|
||||
The app package is named `app.twoactivities`
|
||||
|
||||
## usage
|
||||
|
||||
0. clone this repo
|
||||
1. run
|
||||
|
||||
```
|
||||
./build-android-app.sh
|
||||
```
|
||||
|
||||
2. upon success the apk file created is in app/result/app.apk and can be installed via `adb`
|
||||
```
|
||||
adb install -r app/result/app.apk
|
||||
```
|
||||
|
||||
|
29
app/.Makefile.scripts/make--AndroidManifest.xml
Executable file
29
app/.Makefile.scripts/make--AndroidManifest.xml
Executable file
|
@ -0,0 +1,29 @@
|
|||
#!/bin/bash
|
||||
|
||||
test -f app-config.sh && {
|
||||
source app-config.sh
|
||||
}
|
||||
|
||||
cat > "AndroidManifest.xml" << ANDROIDMANIFEST
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="$APP_PACKAGE"
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0">
|
||||
<uses-sdk android:minSdkVersion="$APP_VERSION_SDK_MIN"
|
||||
android:targetSdkVersion="$APP_VERSION_SDK_TARGET"/>
|
||||
$(sed 's/^/ /' <<< "$APP_PERMISSIONS")
|
||||
<application android:label="$APP_NAME" android:icon="@drawable/appicon">
|
||||
<activity android:name="$APP_PACKAGE.AppActivity"
|
||||
android:exported="true"
|
||||
android:configChanges="orientation|screenSize|keyboardHidden"
|
||||
android:label="$APP_NAME">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
</manifest>
|
||||
ANDROIDMANIFEST
|
||||
|
80
app/.Makefile.scripts/make--AppActivity.java.sh
Executable file
80
app/.Makefile.scripts/make--AppActivity.java.sh
Executable file
|
@ -0,0 +1,80 @@
|
|||
#!/bin/bash
|
||||
|
||||
|
||||
test -f app-config.sh && {
|
||||
source app-config.sh
|
||||
}
|
||||
|
||||
echo "package $APP_PACKAGE;"
|
||||
|
||||
cat << 'APPACTIVITYJAVA'
|
||||
import android.provider.Settings ;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
//import android.view.MenuItem;
|
||||
import android.view.*;
|
||||
// for WebView,WebMessage,WebMessagePort,
|
||||
import android.webkit.*;
|
||||
import android.net.Uri;
|
||||
import org.json.JSONObject;
|
||||
import java.io.InputStream;
|
||||
import java.io.File;
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
|
||||
public class AppActivity extends Activity {
|
||||
|
||||
private static final String BASE_URI = "https://alexmahr.de";
|
||||
public String readFileFromAssets(String filename) {
|
||||
String filecontents = "";
|
||||
try {
|
||||
InputStream stream = getAssets().open(filename);
|
||||
int filesize = stream.available();
|
||||
byte[] filebuffer = new byte[filesize];
|
||||
stream.read(filebuffer);
|
||||
stream.close();
|
||||
filecontents = new String(filebuffer);
|
||||
} catch (Exception e) {
|
||||
// I <3 java exceptions
|
||||
}
|
||||
return filecontents;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
// this removes the title bar (a ~1cm big strip at the top of the app showing its name
|
||||
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
// we create the webview (at least on the android 14 that is a webview that features avif + websockets etc....)
|
||||
WebView myWebView = new WebView(this);//activityContext);
|
||||
// MyJavascriptInterface myJavaScriptInterface = new MyJavascriptInterface(this,myWebView);
|
||||
// we create a webview (there is also setwebviewclient-vs-setwebchromeclient
|
||||
WebViewClient myWebViewClient= new WebViewClient();
|
||||
myWebView.setWebViewClient(myWebViewClient);
|
||||
// to setup settings
|
||||
WebSettings myWebSettings = myWebView.getSettings();
|
||||
myWebSettings.setBuiltInZoomControls(true);
|
||||
myWebSettings.setDisplayZoomControls(false);
|
||||
myWebSettings.setJavaScriptEnabled(true);
|
||||
myWebSettings.setDomStorageEnabled(true);
|
||||
myWebSettings.setDatabaseEnabled(true);
|
||||
myWebSettings.setDatabasePath("/data/data/" + myWebView.getContext().getPackageName() + "/databases/");
|
||||
myWebView.addJavascriptInterface(this, "myJavaScriptInterface");
|
||||
// load the html from assets file
|
||||
String html = readFileFromAssets("index.html");
|
||||
myWebView.loadDataWithBaseURL(BASE_URI,html, "text/html", "UTF-8",null);
|
||||
//myWebView.loadData(encodedHtml, "text/html", "base64");
|
||||
// alternatively this could be to load a website
|
||||
//myWebView.loadUrl("https://alexmahr.de/ru");
|
||||
setContentView(myWebView);
|
||||
}
|
||||
@JavascriptInterface
|
||||
public String toString() {
|
||||
// this.webview.evaluateJavascript("(setTimeout(()=>{document.body.innerHTML='all gone';},2000)()",null);
|
||||
return "this is good";
|
||||
}
|
||||
}
|
79
app/.Makefile.scripts/make--android-sdk.sh
Executable file
79
app/.Makefile.scripts/make--android-sdk.sh
Executable file
|
@ -0,0 +1,79 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -x
|
||||
|
||||
# get configuration
|
||||
source app-config.sh
|
||||
|
||||
|
||||
# in case needed download and install `sdkmanager`
|
||||
type sdkmanager 2>/dev/null || (
|
||||
BUILD_TOOLS="$(realpath -m "$BUILD_TOOLS_LATEST/..")"
|
||||
mkdir -p "$BUILD_TOOLS"
|
||||
cd "$BUILD_TOOLS"
|
||||
for LATESTTOOLS in \
|
||||
"$(curl 'https://developer.android.com/studio#command-line-tools-only' |
|
||||
grep -e 'https://dl.google.com/android/repository/commandlinetools-linux-.*_latest.zip' | cut -f2 -d'"')" \
|
||||
'https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip'
|
||||
do
|
||||
echo "testing to get '$LATESTTOOLS'"
|
||||
echo test "${LATESTTOOLS:0:22}" = "https://dl.google.com/" -a "${LATESTTOOLS:(-11)}" = "_latest.zip"
|
||||
test "${LATESTTOOLS:0:22}" = "https://dl.google.com/" -a "${LATESTTOOLS:(-11)}" = "_latest.zip" || {
|
||||
echo "unsure of URL $LATESTTOOLS correct, skipping it..." >&2
|
||||
continue;
|
||||
}
|
||||
wget -O cmdline-tools.zip "$LATESTTOOLS"
|
||||
unzip cmdline-tools.zip && break || {
|
||||
echo "error downloading working cmdline-tools.zip"
|
||||
exit 1
|
||||
}
|
||||
done
|
||||
ls
|
||||
ls cmdline-tools
|
||||
rm cmdline-tools.zip
|
||||
mv -v cmdline-tools "$BUILD_TOOLS_LATEST" || true
|
||||
)
|
||||
|
||||
test -f android-sdk/.installed.buildtools.version.$APP_VERSION_SDK_TARGET || {
|
||||
EXACTVERSION_BUILDTOOLS="$(
|
||||
sdkmanager --list 2>/dev/null |
|
||||
sed 's/^ *//' |
|
||||
grep -e 'build-tools;'"$APP_VERSION_SDK_TARGET"'\.[0-9]*\.[0-9]*\ ' |
|
||||
cut -f1 -d' ' |
|
||||
sort |
|
||||
tail -n 1
|
||||
)"
|
||||
test -z "$EXACTVERSION_BUILDTOOLS" && {
|
||||
echo "ERROR cannot get '$EXACTVERSION_BUILDTOOLS'" >&2
|
||||
echo "dropping to shell..." >&2
|
||||
exec bash
|
||||
}
|
||||
sdkmanager --list_installed | grep -q "$EXACTVERSION_BUILDTOOLS" || {
|
||||
sdkmanager --install "$EXACTVERSION_BUILDTOOLS"
|
||||
}
|
||||
echo "$EXACTVERSION_BUILDTOOLS" > android-sdk/.installed.buildtools.version.$APP_VERSION_SDK_TARGET
|
||||
ln -rvsf android-sdk/.installed.buildtools.version.{$APP_VERSION_SDK_TARGET,current}
|
||||
}
|
||||
|
||||
test -f android-sdk/.installed.platforms.version.$APP_VERSION_SDK_TARGET || {
|
||||
EXACTVERSION_PLATFORM="$(
|
||||
sdkmanager --list 2>/dev/null |
|
||||
sed 's/^ *//' |
|
||||
grep -e 'platforms;android-'"$APP_VERSION_SDK_TARGET"'\ ' |
|
||||
cut -f1 -d' ' |
|
||||
sort |
|
||||
tail -n 1
|
||||
)"
|
||||
test -z "$EXACTVERSION_PLATFORM" && {
|
||||
echo "ERROR cannot get '$EXACTVERSION_PLATFORM'" >&2
|
||||
echo "dropping to shell..." >&2
|
||||
exec bash
|
||||
}
|
||||
sdkmanager --list_installed | grep -q "$EXACTVERSION_PLATFORM" || {
|
||||
sdkmanager --install "$EXACTVERSION_PLATFORM"
|
||||
}
|
||||
echo "$EXACTVERSION_PLATFORM" > android-sdk/.installed.platforms.version.$APP_VERSION_SDK_TARGET
|
||||
ln -rvsf android-sdk/.installed.platforms.version.{$APP_VERSION_SDK_TARGET,current}
|
||||
}
|
||||
|
||||
touch android-sdk/installed
|
701
app/.Makefile.scripts/make--app-config.sh
Executable file
701
app/.Makefile.scripts/make--app-config.sh
Executable file
|
@ -0,0 +1,701 @@
|
|||
#!/bin/bash
|
||||
|
||||
test -f app-config.sh && {
|
||||
source app-config.sh
|
||||
}
|
||||
|
||||
|
||||
set -e
|
||||
|
||||
test -n "$LINES" || {
|
||||
eval $(resize 2>/dev/null)
|
||||
}
|
||||
test -n "$LINES" || {
|
||||
read -r LINES COLUMNS < <(stty size)
|
||||
}
|
||||
|
||||
|
||||
test -z "$LINES" && {
|
||||
LINES=25
|
||||
}
|
||||
test "$LINES" -lt "16" && {
|
||||
LINES=16
|
||||
}
|
||||
|
||||
test -z "$COLUMNS" && {
|
||||
COLUMNS=80
|
||||
}
|
||||
test "$COLUMNS" -lt "36" && {
|
||||
COLUMNS=36
|
||||
}
|
||||
|
||||
type whiptail &>/dev/null && {
|
||||
ECHO(){
|
||||
whiptail --msgbox "$1" $((LINES - 6)) $(( $COLUMNS - 6)) --title "incorrect input"
|
||||
}
|
||||
READ(){
|
||||
whiptail --inputbox "$1" $((LINES - 6)) $(( $COLUMNS - 6)) --title "$2" 3>&1 1>&2 2>&3
|
||||
}
|
||||
} || {
|
||||
ECHO(){
|
||||
echo "$1"
|
||||
read -N 1 OK
|
||||
}
|
||||
READ(){
|
||||
cat >&2 << EOF
|
||||
|
||||
---------------------------------------------
|
||||
$2
|
||||
---------------------------------------------
|
||||
$1
|
||||
EOF
|
||||
read RESULT
|
||||
echo "$RESULT"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#APP_NAME
|
||||
while test -z "${APP_NAME:-}"
|
||||
do
|
||||
APP_NAME="$(READ 'Please choose the name of the app: ' 'Create new Android-App step (1/)')"
|
||||
done
|
||||
|
||||
|
||||
#APP_PACKAGE
|
||||
while test -z "${APP_PACKAGE:-}"
|
||||
do
|
||||
APP_PACKAGE_DEFAULT="${APP_NAME,,}"
|
||||
APP_PACKAGE_DEFAULT="app.${APP_PACKAGE_DEFAULT//[!a-z0-9]/_}"
|
||||
APP_PACKAGE="$(READ "Please provide a Package.Name for the App [default=$APP_PACKAGE_DEFAULT]: " 'Create new Android-App step (2/)' )"
|
||||
APP_PACKAGE="${APP_PACKAGE:-$APP_PACKAGE_DEFAULT}"
|
||||
APP_PACKAGE="${APP_PACKAGE,,}"
|
||||
APP_PACKAGE="${APP_PACKAGE//[!a-z0-9\.]/}"
|
||||
grep -qe '_\._' <<< "${APP_PACKAGE//[^.]/_}" || {
|
||||
APP_PACKAGE=""
|
||||
ECHO "error: package name needs to contain a '.' (dot)"
|
||||
}
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
#APP_VERSION_SDK_TARGET
|
||||
while test -z "${APP_VERSION_SDK_TARGET:-}"
|
||||
do
|
||||
APP_VERSION_SDK_TARGET_DEFAULT="33"
|
||||
APP_VERSION_SDK_TARGET="$(READ "$(cat << API_LEVELS
|
||||
Please Choose the Target SDK Version:
|
||||
please choose [default=$APP_VERSION_SDK_TARGET_DEFAULT]:
|
||||
|
||||
35 = android 15 = 2024
|
||||
34 = android 14 = 2023
|
||||
33 = android 13 = 2022
|
||||
32 = android 12l = 2022
|
||||
31 = android 12 = 2021
|
||||
30 = android 11 = 2020
|
||||
20 = android 10 = 2019
|
||||
(see https://apilevels.com/ for more info)
|
||||
API_LEVELS
|
||||
)" 'Create new Android-App step (4/)' )"
|
||||
APP_VERSION_SDK_TARGET="${APP_VERSION_SDK_TARGET:-$APP_VERSION_SDK_TARGET_DEFAULT}"
|
||||
test "$APP_VERSION_SDK_TARGET" -gt 0 || {
|
||||
ECHO "error: APP_VERSION_SDK_TARGET '$APP_VERSION_SDK_TARGET' is not valid"
|
||||
APP_VERSION_SDK_TARGET='';
|
||||
}
|
||||
done
|
||||
|
||||
|
||||
#APP_VERSION_SDK_TARGET
|
||||
while test -z "${APP_VERSION_SDK_MIN:-}"
|
||||
do
|
||||
APP_VERSION_SDK_MIN_DEFAULT="$(( $APP_VERSION_SDK_TARGET - 3))"
|
||||
APP_VERSION_SDK_MIN="$(READ "$(cat << API_LEVELS
|
||||
Please Choose the Target SDK Version:
|
||||
please choose [default=$APP_VERSION_SDK_MIN_DEFAULT]:
|
||||
|
||||
35 = android 15 = 2024
|
||||
34 = android 14 = 2023
|
||||
33 = android 13 = 2022
|
||||
32 = android 12l = 2022
|
||||
31 = android 12 = 2021
|
||||
30 = android 11 = 2020
|
||||
20 = android 10 = 2019
|
||||
(see https://apilevels.com/ for more info)
|
||||
API_LEVELS
|
||||
)" 'Create new Android-App step (5/)' )"
|
||||
APP_VERSION_SDK_MIN="${APP_VERSION_SDK_MIN:-$APP_VERSION_SDK_MIN_DEFAULT}"
|
||||
test "$APP_VERSION_SDK_MIN" -gt 0 || {
|
||||
ECHO "error: APP_VERSION_SDK_MIN '$APP_VERSION_SDK_MIN' is not valid"
|
||||
APP_VERSION_SDK_TARGET='';
|
||||
}
|
||||
done
|
||||
|
||||
|
||||
APP_PERMISSIONS="${APP_PERMISSIONS:-"$(whiptail --nocancel --notags --checklist "please select the permissions" $((LINES - 6)) $(( $COLUMNS - 6)) $((LINES -14 )) 'android.permission.ACCEPT_HANDOVER' 'ACCEPT_HANDOVER - Allows a calling app to continue a call which was started in another app.' 0 \
|
||||
'android.permission.INTERNET' 'INTERNET - Allows applications to open network sockets.' 1 \
|
||||
'android.permission.READ_MEDIA_AUDIO' 'READ_MEDIA_AUDIO - Allows an application to read audio files from external storage.' 1 \
|
||||
'android.permission.READ_MEDIA_IMAGES' 'READ_MEDIA_IMAGES - Allows an application to read image files from external storage.' 1 \
|
||||
'android.permission.READ_MEDIA_VIDEO' 'READ_MEDIA_VIDEO - Allows an application to read video files from external storage.' 1 \
|
||||
'android.permission.READ_MEDIA_VISUAL_USER_SELECTED' 'READ_MEDIA_VISUAL_USER_SELECTED - Allows an application to read image or video files from external storage that a user has selected via the permission prompt photo picker.' 1 \
|
||||
'android.permission.POST_NOTIFICATIONS' 'POST_NOTIFICATIONS - Allows an app to post notifications' 1 \
|
||||
'android.permission.ACCESS_ALL_DOWNLOADS' 'ACCESS_ALL_DOWNLOADS' 0 \
|
||||
'android.permission.ACCESS_BACKGROUND_LOCATION' 'ACCESS_BACKGROUND_LOCATION - Allows an app to access location in the background.' 0 \
|
||||
'android.permission.ACCESS_BLOBS_ACROSS_USERS' 'ACCESS_BLOBS_ACROSS_USERS - Allows an application to access data blobs across users.' 0 \
|
||||
'android.permission.ACCESS_BLUETOOTH_SHARE' 'ACCESS_BLUETOOTH_SHARE' 0 \
|
||||
'android.permission.ACCESS_CACHE_FILESYSTEM' 'ACCESS_CACHE_FILESYSTEM' 0 \
|
||||
'android.permission.ACCESS_CHECKIN_PROPERTIES' 'ACCESS_CHECKIN_PROPERTIES - Allows read/write access to the "properties" table in the checkin database, to change values that get uploaded.' 0 \
|
||||
'android.permission.ACCESS_COARSE_LOCATION' 'ACCESS_COARSE_LOCATION - Allows an app to access approximate location.' 0 \
|
||||
'android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY' 'ACCESS_CONTENT_PROVIDERS_EXTERNALLY' 0 \
|
||||
'android.permission.ACCESS_DOWNLOAD_MANAGER' 'ACCESS_DOWNLOAD_MANAGER' 0 \
|
||||
'android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED' 'ACCESS_DOWNLOAD_MANAGER_ADVANCED' 0 \
|
||||
'android.permission.ACCESS_DRM_CERTIFICATES' 'ACCESS_DRM_CERTIFICATES' 0 \
|
||||
'android.permission.ACCESS_EPHEMERAL_APPS' 'ACCESS_EPHEMERAL_APPS' 0 \
|
||||
'android.permission.ACCESS_FINE_LOCATION' 'ACCESS_FINE_LOCATION - Allows an app to access precise location.' 0 \
|
||||
'android.permission.ACCESS_FM_RADIO' 'ACCESS_FM_RADIO' 0 \
|
||||
'android.permission.ACCESS_HIDDEN_PROFILES' 'ACCESS_HIDDEN_PROFILES - Allows applications to access profiles with android.content.pm.UserProperties#PROFILE_API_VISIBILITY_HIDDEN user property, e.g.' 0 \
|
||||
'android.permission.ACCESS_INPUT_FLINGER' 'ACCESS_INPUT_FLINGER' 0 \
|
||||
'android.permission.ACCESS_KEYGUARD_SECURE_STORAGE' 'ACCESS_KEYGUARD_SECURE_STORAGE' 0 \
|
||||
'android.permission.ACCESS_LOCATION_EXTRA_COMMANDS' 'ACCESS_LOCATION_EXTRA_COMMANDS - Allows an application to access extra location provider commands.' 0 \
|
||||
'android.permission.ACCESS_MEDIA_LOCATION' 'ACCESS_MEDIA_LOCATION - Allows an application to access any geographic locations persisted in the users shared collection.' 0 \
|
||||
'android.permission.ACCESS_MOCK_LOCATION' 'ACCESS_MOCK_LOCATION' 0 \
|
||||
'android.permission.ACCESS_MTP' 'ACCESS_MTP' 0 \
|
||||
'android.permission.ACCESS_NETWORK_CONDITIONS' 'ACCESS_NETWORK_CONDITIONS' 0 \
|
||||
'android.permission.ACCESS_NETWORK_STATE' 'ACCESS_NETWORK_STATE - Allows applications to access information about networks.' 0 \
|
||||
'android.permission.ACCESS_NOTIFICATIONS' 'ACCESS_NOTIFICATIONS' 0 \
|
||||
'android.permission.ACCESS_NOTIFICATION_POLICY' 'ACCESS_NOTIFICATION_POLICY - Marker permission for applications that wish to access notification policy.' 0 \
|
||||
'android.permission.ACCESS_PDB_STATE' 'ACCESS_PDB_STATE' 0 \
|
||||
'android.permission.ACCESS_SURFACE_FLINGER' 'ACCESS_SURFACE_FLINGER' 0 \
|
||||
'android.permission.ACCESS_VOICE_INTERACTION_SERVICE' 'ACCESS_VOICE_INTERACTION_SERVICE' 0 \
|
||||
'android.permission.ACCESS_VR_MANAGER' 'ACCESS_VR_MANAGER' 0 \
|
||||
'android.permission.ACCESS_WIFI_STATE' 'ACCESS_WIFI_STATE - Allows applications to access information about Wi-Fi networks.' 0 \
|
||||
'android.permission.ACCESS_WIMAX_STATE' 'ACCESS_WIMAX_STATE' 0 \
|
||||
'android.permission.ACCOUNT_MANAGER' 'ACCOUNT_MANAGER - Allows applications to call into AccountAuthenticators.' 0 \
|
||||
'android.permission.ACTIVITY_RECOGNITION' 'ACTIVITY_RECOGNITION - Allows an application to recognize physical activity.' 0 \
|
||||
'android.permission.ADD_VOICEMAIL' 'ADD_VOICEMAIL - Allows an application to add voicemails into the system.' 0 \
|
||||
'android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK' 'ALLOW_ANY_CODEC_FOR_PLAYBACK' 0 \
|
||||
'android.permission.ANSWER_PHONE_CALLS' 'ANSWER_PHONE_CALLS - Allows the app to answer an incoming phone call.' 0 \
|
||||
'android.permission.ASEC_ACCESS' 'ASEC_ACCESS' 0 \
|
||||
'android.permission.ASEC_CREATE' 'ASEC_CREATE' 0 \
|
||||
'android.permission.ASEC_DESTROY' 'ASEC_DESTROY' 0 \
|
||||
'android.permission.ASEC_MOUNT_UNMOUNT' 'ASEC_MOUNT_UNMOUNT' 0 \
|
||||
'android.permission.ASEC_RENAME' 'ASEC_RENAME' 0 \
|
||||
'android.permission.AUTHENTICATE_ACCOUNTS' 'AUTHENTICATE_ACCOUNTS' 0 \
|
||||
'android.permission.BACKUP' 'BACKUP' 0 \
|
||||
'android.permission.BATTERY_STATS' 'BATTERY_STATS - Allows an application to collect battery statistics' 0 \
|
||||
'android.permission.BATTERY_STATS' 'BATTERY_STATS - Protection level: signature|privileged|development' 0 \
|
||||
'android.permission.BIND_ACCESSIBILITY_SERVICE' 'BIND_ACCESSIBILITY_SERVICE - Must be required by an AccessibilityService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_APPWIDGET' 'BIND_APPWIDGET - Allows an application to tell the AppWidget service which application can access AppWidgets data.' 0 \
|
||||
'android.permission.BIND_APP_FUNCTION_SERVICE' 'BIND_APP_FUNCTION_SERVICE - Must be required by an AppFunctionService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_AUTOFILL_SERVICE' 'BIND_AUTOFILL_SERVICE - Must be required by a AutofillService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_CALL_REDIRECTION_SERVICE' 'BIND_CALL_REDIRECTION_SERVICE - Must be required by a CallRedirectionService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE' 'BIND_CARRIER_MESSAGING_CLIENT_SERVICE - A subclass of CarrierMessagingClientService must be protected with this permission.' 0 \
|
||||
'android.permission.BIND_CARRIER_MESSAGING_SERVICE' 'BIND_CARRIER_MESSAGING_SERVICE - This constant was deprecated in API level 23. Use BIND_CARRIER_SERVICES instead' 0 \
|
||||
'android.permission.BIND_CARRIER_SERVICES' 'BIND_CARRIER_SERVICES - The system process that is allowed to bind to services in carrier apps will have this permission.' 0 \
|
||||
'android.permission.BIND_CHOOSER_TARGET_SERVICE' 'BIND_CHOOSER_TARGET_SERVICE - This constant was deprecated in API level 30. For publishing direct share targets, please follow the instructions in https://developer.android.com/training/sharing/receive.html#providing-direct-share-targets instead.' 0 \
|
||||
'android.permission.BIND_COMPANION_DEVICE_SERVICE' 'BIND_COMPANION_DEVICE_SERVICE - Must be required by any CompanionDeviceServices to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_CONDITION_PROVIDER_SERVICE' 'BIND_CONDITION_PROVIDER_SERVICE - Must be required by a ConditionProviderService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_CONNECTION_SERVICE' 'BIND_CONNECTION_SERVICE' 0 \
|
||||
'android.permission.BIND_CONTROLS' 'BIND_CONTROLS - Allows SystemUI to request third party controls.' 0 \
|
||||
'android.permission.BIND_CREDENTIAL_PROVIDER_SERVICE' 'BIND_CREDENTIAL_PROVIDER_SERVICE - Must be required by a CredentialProviderService to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_DEVICE_ADMIN' 'BIND_DEVICE_ADMIN - Must be required by device administration receiver, to ensure that only the system can interact with it.' 0 \
|
||||
'android.permission.BIND_DIRECTORY_SEARCH' 'BIND_DIRECTORY_SEARCH' 0 \
|
||||
'android.permission.BIND_DREAM_SERVICE' 'BIND_DREAM_SERVICE - Must be required by an DreamService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_INCALL_SERVICE' 'BIND_INCALL_SERVICE - Must be required by a InCallService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_INPUT_METHOD' 'BIND_INPUT_METHOD - Must be required by an InputMethodService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_INTENT_FILTER_VERIFIER' 'BIND_INTENT_FILTER_VERIFIER' 0 \
|
||||
'android.permission.BIND_JOB_SERVICE' 'BIND_JOB_SERVICE' 0 \
|
||||
'android.permission.BIND_KEYGUARD_APPWIDGET' 'BIND_KEYGUARD_APPWIDGET' 0 \
|
||||
'android.permission.BIND_MIDI_DEVICE_SERVICE' 'BIND_MIDI_DEVICE_SERVICE - Must be required by an MidiDeviceService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_NFC_SERVICE' 'BIND_NFC_SERVICE - Must be required by a HostApduService or OffHostApduService to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_NOTIFICATION_LISTENER_SERVICE' 'BIND_NOTIFICATION_LISTENER_SERVICE - Must be required by an NotificationListenerService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_NOTIFICATION_RANKER_SERVICE' 'BIND_NOTIFICATION_RANKER_SERVICE' 0 \
|
||||
'android.permission.BIND_PACKAGE_VERIFIER' 'BIND_PACKAGE_VERIFIER' 0 \
|
||||
'android.permission.BIND_PRINT_RECOMMENDATION_SERVICE' 'BIND_PRINT_RECOMMENDATION_SERVICE' 0 \
|
||||
'android.permission.BIND_PRINT_SERVICE' 'BIND_PRINT_SERVICE - Must be required by a PrintService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_PRINT_SPOOLER_SERVICE' 'BIND_PRINT_SPOOLER_SERVICE' 0 \
|
||||
'android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE' 'BIND_QUICK_ACCESS_WALLET_SERVICE - Must be required by a QuickAccessWalletService to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_QUICK_SETTINGS_TILE' 'BIND_QUICK_SETTINGS_TILE - Allows an application to bind to third party quick settings tiles.' 0 \
|
||||
'android.permission.BIND_REMOTEVIEWS' 'BIND_REMOTEVIEWS - Must be required by a RemoteViewsService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_REMOTE_DISPLAY' 'BIND_REMOTE_DISPLAY' 0 \
|
||||
'android.permission.BIND_ROUTE_PROVIDER' 'BIND_ROUTE_PROVIDER' 0 \
|
||||
'android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE' 'BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE' 0 \
|
||||
'android.permission.BIND_SCREENING_SERVICE' 'BIND_SCREENING_SERVICE - Must be required by a CallScreeningService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_TELECOM_CONNECTION_SERVICE' 'BIND_TELECOM_CONNECTION_SERVICE - Must be required by a ConnectionService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_TEXT_SERVICE' 'BIND_TEXT_SERVICE - Must be required by a TextService (e.g.SpellCheckerService) to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_TRUST_AGENT' 'BIND_TRUST_AGENT' 0 \
|
||||
'android.permission.BIND_TV_INPUT' 'BIND_TV_INPUT - Must be required by a TvInputService to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_TV_INTERACTIVE_APP' 'BIND_TV_INTERACTIVE_APP - Must be required by a TvInteractiveAppService to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_TV_REMOTE_SERVICE' 'BIND_TV_REMOTE_SERVICE' 0 \
|
||||
'android.permission.BIND_VISUAL_VOICEMAIL_SERVICE' 'BIND_VISUAL_VOICEMAIL_SERVICE - Must be required by a link VisualVoicemailService to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_VOICE_INTERACTION' 'BIND_VOICE_INTERACTION - Must be required by a VoiceInteractionService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_VPN_SERVICE' 'BIND_VPN_SERVICE - Must be required by a VpnService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_VR_LISTENER_SERVICE' 'BIND_VR_LISTENER_SERVICE - Must be required by an VrListenerService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BIND_WALLPAPER' 'BIND_WALLPAPER - Must be required by a WallpaperService, to ensure that only the system can bind to it.' 0 \
|
||||
'android.permission.BLUETOOTH' 'BLUETOOTH - Allows applications to connect to paired bluetooth devices.' 0 \
|
||||
'android.permission.BLUETOOTH_ADMIN' 'BLUETOOTH_ADMIN - Allows applications to discover and pair bluetooth devices.' 0 \
|
||||
'android.permission.BLUETOOTH_ADVERTISE' 'BLUETOOTH_ADVERTISE - Required to be able to advertise to nearby Bluetooth devices.' 0 \
|
||||
'android.permission.BLUETOOTH_CONNECT' 'BLUETOOTH_CONNECT - Required to be able to connect to paired Bluetooth devices.' 0 \
|
||||
'android.permission.BLUETOOTH_MAP' 'BLUETOOTH_MAP' 0 \
|
||||
'android.permission.BLUETOOTH_PRIVILEGED' 'BLUETOOTH_PRIVILEGED - Allows applications to pair bluetooth devices without user interaction, and to allow or disallow phonebook access or message access.' 0 \
|
||||
'android.permission.BLUETOOTH_SCAN' 'BLUETOOTH_SCAN - Required to be able to discover and pair nearby Bluetooth devices.' 0 \
|
||||
'android.permission.BLUETOOTH_STACK' 'BLUETOOTH_STACK' 0 \
|
||||
'android.permission.BODY_SENSORS' 'BODY_SENSORS - Allows an application to access data from sensors that the user uses to measure what is happening inside their body, such as heart rate.' 0 \
|
||||
'android.permission.BODY_SENSORS_BACKGROUND' 'BODY_SENSORS_BACKGROUND - Allows an application to access data from sensors that the user uses to measure what is happening inside their body, such as heart rate.' 0 \
|
||||
'android.permission.BRICK' 'BRICK' 0 \
|
||||
'android.permission.BROADCAST_CALLLOG_INFO' 'BROADCAST_CALLLOG_INFO' 0 \
|
||||
'android.permission.BROADCAST_NETWORK_PRIVILEGED' 'BROADCAST_NETWORK_PRIVILEGED' 0 \
|
||||
'android.permission.BROADCAST_PACKAGE_REMOVED' 'BROADCAST_PACKAGE_REMOVED - Allows an application to broadcast a notification that an application package has been removed.' 0 \
|
||||
'android.permission.BROADCAST_PHONE_ACCOUNT_REGISTRATION' 'BROADCAST_PHONE_ACCOUNT_REGISTRATION' 0 \
|
||||
'android.permission.BROADCAST_SMS' 'BROADCAST_SMS - Allows an application to broadcast an SMS receipt notification.' 0 \
|
||||
'android.permission.BROADCAST_STICKY' 'BROADCAST_STICKY - Allows an application to broadcast sticky intents.' 0 \
|
||||
'android.permission.BROADCAST_WAP_PUSH' 'BROADCAST_WAP_PUSH - Allows an application to broadcast a WAP PUSH receipt notification.' 0 \
|
||||
'android.permission.CACHE_CONTENT' 'CACHE_CONTENT' 0 \
|
||||
'android.permission.CALL_COMPANION_APP' 'CALL_COMPANION_APP - Allows an app which implements the InCallService API to be eligible to be enabled as a calling companion app.' 0 \
|
||||
'android.permission.CALL_PHONE' 'CALL_PHONE - Allows an application to initiate a phone call without going through the Dialer user interface for the user to confirm the call.' 0 \
|
||||
'android.permission.CALL_PRIVILEGED' 'CALL_PRIVILEGED - Allows an application to call any phone number, including emergency numbers, without going through the Dialer user interface for the user to confirm the call being placed.' 0 \
|
||||
'android.permission.CAMERA' 'CAMERA - Required to be able to access the camera device.' 0 \
|
||||
'android.permission.CAMERA_DISABLE_TRANSMIT_LED' 'CAMERA_DISABLE_TRANSMIT_LED' 0 \
|
||||
'android.permission.CAMERA_SEND_SYSTEM_EVENTS' 'CAMERA_SEND_SYSTEM_EVENTS' 0 \
|
||||
'android.permission.CAPTURE_AUDIO_HOTWORD' 'CAPTURE_AUDIO_HOTWORD' 0 \
|
||||
'android.permission.CAPTURE_AUDIO_OUTPUT' 'CAPTURE_AUDIO_OUTPUT - Allows an application to capture audio output.' 0 \
|
||||
'android.permission.CAPTURE_SECURE_VIDEO_OUTPUT' 'CAPTURE_SECURE_VIDEO_OUTPUT' 0 \
|
||||
'android.permission.CAPTURE_TV_INPUT' 'CAPTURE_TV_INPUT' 0 \
|
||||
'android.permission.CAPTURE_VIDEO_OUTPUT' 'CAPTURE_VIDEO_OUTPUT' 0 \
|
||||
'android.permission.CARRIER_FILTER_SMS' 'CARRIER_FILTER_SMS' 0 \
|
||||
'android.permission.CHANGE_APP_IDLE_STATE' 'CHANGE_APP_IDLE_STATE' 0 \
|
||||
'android.permission.CHANGE_BACKGROUND_DATA_SETTING' 'CHANGE_BACKGROUND_DATA_SETTING' 0 \
|
||||
'android.permission.CHANGE_COMPONENT_ENABLED_STATE' 'CHANGE_COMPONENT_ENABLED_STATE - Allows an application to change whether an application component (other than its own) is enabled or not.' 0 \
|
||||
'android.permission.CHANGE_CONFIGURATION' 'CHANGE_CONFIGURATION - Allows an application to modify the current configuration, such as locale.' 0 \
|
||||
'android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST' 'CHANGE_DEVICE_IDLE_TEMP_WHITELIST' 0 \
|
||||
'android.permission.CHANGE_NETWORK_STATE' 'CHANGE_NETWORK_STATE - Allows applications to change network connectivity state.' 0 \
|
||||
'android.permission.CHANGE_WIFI_MULTICAST_STATE' 'CHANGE_WIFI_MULTICAST_STATE - Allows applications to enter Wi-Fi Multicast mode.' 0 \
|
||||
'android.permission.CHANGE_WIFI_STATE' 'CHANGE_WIFI_STATE - Allows applications to change Wi-Fi connectivity state.' 0 \
|
||||
'android.permission.CHANGE_WIMAX_STATE' 'CHANGE_WIMAX_STATE' 0 \
|
||||
'android.permission.CLEAR_APP_CACHE' 'CLEAR_APP_CACHE - Allows an application to clear the caches of all installed applications on the device.' 0 \
|
||||
'android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS' 'CLEAR_APP_GRANTED_URI_PERMISSIONS' 0 \
|
||||
'android.permission.CLEAR_APP_USER_DATA' 'CLEAR_APP_USER_DATA' 0 \
|
||||
'android.permission.CONFIGURE_DISPLAY_COLOR_TRANSFORM' 'CONFIGURE_DISPLAY_COLOR_TRANSFORM' 0 \
|
||||
'android.permission.CONFIGURE_WIFI_DISPLAY' 'CONFIGURE_WIFI_DISPLAY - Allows an application to configure and connect to Wifi displays' 0 \
|
||||
'android.permission.CONFIRM_FULL_BACKUP' 'CONFIRM_FULL_BACKUP' 0 \
|
||||
'android.permission.CONNECTIVITY_INTERNAL' 'CONNECTIVITY_INTERNAL' 0 \
|
||||
'android.permission.CONTROL_INCALL_EXPERIENCE' 'CONTROL_INCALL_EXPERIENCE' 0 \
|
||||
'android.permission.CONTROL_KEYGUARD' 'CONTROL_KEYGUARD' 0 \
|
||||
'android.permission.CONTROL_LOCATION_UPDATES' 'CONTROL_LOCATION_UPDATES - Allows enabling/disabling location update notifications from the radio.' 0 \
|
||||
'android.permission.CONTROL_VPN' 'CONTROL_VPN' 0 \
|
||||
'android.permission.CONTROL_WIFI_DISPLAY' 'CONTROL_WIFI_DISPLAY' 0 \
|
||||
'android.permission.COPY_PROTECTED_DATA' 'COPY_PROTECTED_DATA' 0 \
|
||||
'android.permission.CREATE_USERS' 'CREATE_USERS' 0 \
|
||||
'android.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS' 'CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS - Allows a browser to invoke the set of query apis to get metadata about credential candidates prepared during the CredentialManager.prepareGetCredential API.' 0 \
|
||||
'android.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS' 'CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS - Allows specifying candidate credential providers to be queried in Credential Manager get flows, or to be preferred as a default in the Credential Manager create flows.' 0 \
|
||||
'android.permission.CREDENTIAL_MANAGER_SET_ORIGIN' 'CREDENTIAL_MANAGER_SET_ORIGIN - Allows a browser to invoke credential manager APIs on behalf of another RP.' 0 \
|
||||
'android.permission.CRYPT_KEEPER' 'CRYPT_KEEPER' 0 \
|
||||
'android.permission.DELETE_CACHE_FILES' 'DELETE_CACHE_FILES - Old permission for deleting an apps cache files, no longer used, but signals for us to quietly ignore calls instead of throwing an exception.' 0 \
|
||||
'android.permission.DELETE_PACKAGES' 'DELETE_PACKAGES - Allows an application to delete packages.' 0 \
|
||||
'android.permission.DELIVER_COMPANION_MESSAGES' 'DELIVER_COMPANION_MESSAGES - Allows an application to deliver companion messages to system' 0 \
|
||||
'android.permission.DETECT_SCREEN_CAPTURE' 'DETECT_SCREEN_CAPTURE - Allows an application to get notified when a screen capture of its windows is attempted.' 0 \
|
||||
'android.permission.DETECT_SCREEN_RECORDING' 'DETECT_SCREEN_RECORDING - Allows an application to get notified when it is being recorded.' 0 \
|
||||
'android.permission.DEVICE_POWER' 'DEVICE_POWER' 0 \
|
||||
'android.permission.DIAGNOSTIC' 'DIAGNOSTIC - Allows applications to RW to diagnostic resources.' 0 \
|
||||
'android.permission.DISABLE_KEYGUARD' 'DISABLE_KEYGUARD - Allows applications to disable the keyguard if it is not secure.' 0 \
|
||||
'android.permission.DISPATCH_NFC_MESSAGE' 'DISPATCH_NFC_MESSAGE' 0 \
|
||||
'android.permission.DISPATCH_PROVISIONING_MESSAGE' 'DISPATCH_PROVISIONING_MESSAGE' 0 \
|
||||
'android.permission.DOWNLOAD_CACHE_NON_PURGEABLE' 'DOWNLOAD_CACHE_NON_PURGEABLE' 0 \
|
||||
'android.permission.DUMP' 'DUMP - Allows an application to retrieve state dump information from system services.' 0 \
|
||||
'android.permission.DVB_DEVICE' 'DVB_DEVICE' 0 \
|
||||
'android.permission.ENFORCE_UPDATE_OWNERSHIP' 'ENFORCE_UPDATE_OWNERSHIP - Allows an application to indicate via PackageInstaller.SessionParams.setRequestUpdateOwnership(boolean) that it has the intention of becoming the update owner.' 0 \
|
||||
'android.permission.EXECUTE_APP_ACTION' 'EXECUTE_APP_ACTION - Allows an assistive application to perform actions on behalf of users inside of applications.' 0 \
|
||||
'android.permission.EXPAND_STATUS_BAR' 'EXPAND_STATUS_BAR - Allows an application to expand or collapse the status bar.' 0 \
|
||||
'android.permission.FACTORY_TEST' 'FACTORY_TEST - Run as a manufacturer test application, running as the root user.' 0 \
|
||||
'android.permission.FILTER_EVENTS' 'FILTER_EVENTS' 0 \
|
||||
'android.permission.FLASHLIGHT' 'FLASHLIGHT' 0 \
|
||||
'android.permission.FORCE_BACK' 'FORCE_BACK' 0 \
|
||||
'android.permission.FORCE_STOP_PACKAGES' 'FORCE_STOP_PACKAGES' 0 \
|
||||
'android.permission.FOREGROUND_SERVICE' 'FOREGROUND_SERVICE - Allows a regular application to use Service.startForeground.' 0 \
|
||||
'android.permission.FOREGROUND_SERVICE_CAMERA' 'FOREGROUND_SERVICE_CAMERA - Allows a regular application to use Service.startForeground with the type "camera".' 0 \
|
||||
'android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE' 'FOREGROUND_SERVICE_CONNECTED_DEVICE - Allows a regular application to use Service.startForeground with the type "connectedDevice".' 0 \
|
||||
'android.permission.FOREGROUND_SERVICE_DATA_SYNC' 'FOREGROUND_SERVICE_DATA_SYNC - Allows a regular application to use Service.startForeground with the type "dataSync".' 0 \
|
||||
'android.permission.FOREGROUND_SERVICE_HEALTH' 'FOREGROUND_SERVICE_HEALTH - Allows a regular application to use Service.startForeground with the type "health".' 0 \
|
||||
'android.permission.FOREGROUND_SERVICE_LOCATION' 'FOREGROUND_SERVICE_LOCATION - Allows a regular application to use Service.startForeground with the type "location".' 0 \
|
||||
'android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK' 'FOREGROUND_SERVICE_MEDIA_PLAYBACK - Allows a regular application to use Service.startForeground with the type "mediaPlayback".' 0 \
|
||||
'android.permission.FOREGROUND_SERVICE_MEDIA_PROCESSING' 'FOREGROUND_SERVICE_MEDIA_PROCESSING - Allows a regular application to use Service.startForeground with the type "mediaProcessing".' 0 \
|
||||
'android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION' 'FOREGROUND_SERVICE_MEDIA_PROJECTION - Allows a regular application to use Service.startForeground with the type "mediaProjection".' 0 \
|
||||
'android.permission.FOREGROUND_SERVICE_MICROPHONE' 'FOREGROUND_SERVICE_MICROPHONE - Allows a regular application to use Service.startForeground with the type "microphone".' 0 \
|
||||
'android.permission.FOREGROUND_SERVICE_PHONE_CALL' 'FOREGROUND_SERVICE_PHONE_CALL - Allows a regular application to use Service.startForeground with the type "phoneCall".' 0 \
|
||||
'android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING' 'FOREGROUND_SERVICE_REMOTE_MESSAGING - Allows a regular application to use Service.startForeground with the type "remoteMessaging".' 0 \
|
||||
'android.permission.FOREGROUND_SERVICE_SPECIAL_USE' 'FOREGROUND_SERVICE_SPECIAL_USE - Allows a regular application to use Service.startForeground with the type "specialUse".' 0 \
|
||||
'android.permission.FOREGROUND_SERVICE_SYSTEM_EXEMPTED' 'FOREGROUND_SERVICE_SYSTEM_EXEMPTED - Allows a regular application to use Service.startForeground with the type "systemExempted".' 0 \
|
||||
'android.permission.FRAME_STATS' 'FRAME_STATS' 0 \
|
||||
'android.permission.FREEZE_SCREEN' 'FREEZE_SCREEN' 0 \
|
||||
'android.permission.GET_ACCOUNTS' 'GET_ACCOUNTS - Allows access to the list of accounts in the Accounts Service.' 0 \
|
||||
'android.permission.GET_ACCOUNTS_PRIVILEGED' 'GET_ACCOUNTS_PRIVILEGED - Allows access to the list of accounts in the Accounts Service.' 0 \
|
||||
'android.permission.GET_APP_GRANTED_URI_PERMISSIONS' 'GET_APP_GRANTED_URI_PERMISSIONS' 0 \
|
||||
'android.permission.GET_APP_OPS_STATS' 'GET_APP_OPS_STATS' 0 \
|
||||
'android.permission.GET_DETAILED_TASKS' 'GET_DETAILED_TASKS' 0 \
|
||||
'android.permission.GET_INTENT_SENDER_INTENT' 'GET_INTENT_SENDER_INTENT' 0 \
|
||||
'android.permission.GET_PACKAGE_IMPORTANCE' 'GET_PACKAGE_IMPORTANCE' 0 \
|
||||
'android.permission.GET_PACKAGE_SIZE' 'GET_PACKAGE_SIZE - Allows an application to find out the space used by any package.' 0 \
|
||||
'android.permission.GET_PASSWORD' 'GET_PASSWORD' 0 \
|
||||
'android.permission.GET_PROCESS_STATE_AND_OOM_SCORE' 'GET_PROCESS_STATE_AND_OOM_SCORE' 0 \
|
||||
'android.permission.GET_TASKS' 'GET_TASKS - This constant was deprecated in API level 21. No longer enforced.' 0 \
|
||||
'android.permission.GET_TOP_ACTIVITY_INFO' 'GET_TOP_ACTIVITY_INFO' 0 \
|
||||
'android.permission.GLOBAL_SEARCH' 'GLOBAL_SEARCH - This permission can be used on content providers to allow the global search system to access their data.' 0 \
|
||||
'android.permission.GLOBAL_SEARCH_CONTROL' 'GLOBAL_SEARCH_CONTROL' 0 \
|
||||
'android.permission.GRANT_RUNTIME_PERMISSIONS' 'GRANT_RUNTIME_PERMISSIONS' 0 \
|
||||
'android.permission.HARDWARE_TEST' 'HARDWARE_TEST' 0 \
|
||||
'android.permission.HDMI_CEC' 'HDMI_CEC' 0 \
|
||||
'android.permission.HIDE_OVERLAY_WINDOWS' 'HIDE_OVERLAY_WINDOWS - Allows an app to prevent non-system-overlay windows from being drawn on top of it' 0 \
|
||||
'android.permission.HIGH_SAMPLING_RATE_SENSORS' 'HIGH_SAMPLING_RATE_SENSORS - Allows an app to access sensor data with a sampling rate greater than 200 Hz.' 0 \
|
||||
'android.permission.INJECT_EVENTS' 'INJECT_EVENTS' 0 \
|
||||
'android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS' 'INSTALL_GRANT_RUNTIME_PERMISSIONS' 0 \
|
||||
'android.permission.INSTALL_LOCATION_PROVIDER' 'INSTALL_LOCATION_PROVIDER - Allows an application to install a location provider into the Location Manager.' 0 \
|
||||
'android.permission.INSTALL_PACKAGES' 'INSTALL_PACKAGES - Allows an application to install packages.' 0 \
|
||||
'android.permission.INSTALL_SHORTCUT' 'INSTALL_SHORTCUT - Allows an application to install a shortcut in Launcher.' 0 \
|
||||
'android.permission.INSTANT_APP_FOREGROUND_SERVICE' 'INSTANT_APP_FOREGROUND_SERVICE - Allows an instant app to create foreground services.' 0 \
|
||||
'android.permission.INTENT_FILTER_VERIFICATION_AGENT' 'INTENT_FILTER_VERIFICATION_AGENT' 0 \
|
||||
'android.permission.INTERACT_ACROSS_PROFILES' 'INTERACT_ACROSS_PROFILES - Allows interaction across profiles in the same profile group.' 0 \
|
||||
'android.permission.INTERACT_ACROSS_USERS' 'INTERACT_ACROSS_USERS' 0 \
|
||||
'android.permission.INTERACT_ACROSS_USERS_FULL' 'INTERACT_ACROSS_USERS_FULL' 0 \
|
||||
'android.permission.INTERNAL_SYSTEM_WINDOW' 'INTERNAL_SYSTEM_WINDOW' 0 \
|
||||
'android.permission.INVOKE_CARRIER_SETUP' 'INVOKE_CARRIER_SETUP' 0 \
|
||||
'android.permission.KILL_BACKGROUND_PROCESSES' 'KILL_BACKGROUND_PROCESSES - Allows an application to call ActivityManager.killBackgroundProcesses(String).' 0 \
|
||||
'android.permission.KILL_UID' 'KILL_UID' 0 \
|
||||
'android.permission.LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE' 'LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE - Allows an application to capture screen content to perform a screenshot using the intent action Intent.ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE.' 0 \
|
||||
'android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK' 'LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK - An application needs this permission for Settings.ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY to show its Activity embedded in Settings app.' 0 \
|
||||
'android.permission.LAUNCH_TRUST_AGENT_SETTINGS' 'LAUNCH_TRUST_AGENT_SETTINGS' 0 \
|
||||
'android.permission.LOADER_USAGE_STATS' 'LOADER_USAGE_STATS - Allows a data loader to read a packages access logs.' 0 \
|
||||
'android.permission.LOCAL_MAC_ADDRESS' 'LOCAL_MAC_ADDRESS' 0 \
|
||||
'android.permission.LOCATION_HARDWARE' 'LOCATION_HARDWARE - Allows an application to use location features in hardware, such as the geofencing api.' 0 \
|
||||
'android.permission.LOOP_RADIO' 'LOOP_RADIO' 0 \
|
||||
'android.permission.MANAGE_ACCOUNTS' 'MANAGE_ACCOUNTS' 0 \
|
||||
'android.permission.MANAGE_ACTIVITY_STACKS' 'MANAGE_ACTIVITY_STACKS' 0 \
|
||||
'android.permission.MANAGE_APP_OPS_RESTRICTIONS' 'MANAGE_APP_OPS_RESTRICTIONS' 0 \
|
||||
'android.permission.MANAGE_APP_TOKENS' 'MANAGE_APP_TOKENS' 0 \
|
||||
'android.permission.MANAGE_CA_CERTIFICATES' 'MANAGE_CA_CERTIFICATES' 0 \
|
||||
'android.permission.MANAGE_DEVICE_ADMINS' 'MANAGE_DEVICE_ADMINS' 0 \
|
||||
'android.permission.MANAGE_DEVICE_LOCK_STATE' 'MANAGE_DEVICE_LOCK_STATE - Allows financed device kiosk apps to perform actions on the Device Lock service' 0 \
|
||||
'android.permission.MANAGE_DEVICE_LOCK_STATE' 'MANAGE_DEVICE_LOCK_STATE - Intended for use by the FINANCED_DEVICE_KIOSK role only.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_LOCK_STATE' 'MANAGE_DEVICE_LOCK_STATE - Protection level: internal|role' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_ACCESSIBILITY' 'MANAGE_DEVICE_POLICY_ACCESSIBILITY - Allows an application to manage policy related to accessibility.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT' 'MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT - Allows an application to set policy related to account management.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS' 'MANAGE_DEVICE_POLICY_ACROSS_USERS - Allows an application to set device policies outside the current user that are required for securing device ownership without accessing user data.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL' 'MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL - Allows an application to set device policies outside the current user.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS_SECURITY_CRITICAL' 'MANAGE_DEVICE_POLICY_ACROSS_USERS_SECURITY_CRITICAL - Allows an application to set device policies outside the current user that are critical for securing data within the current user.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_AIRPLANE_MODE' 'MANAGE_DEVICE_POLICY_AIRPLANE_MODE - Allows an application to set policy related to airplane mode.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_APPS_CONTROL' 'MANAGE_DEVICE_POLICY_APPS_CONTROL - Allows an application to manage policy regarding modifying applications.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_APP_RESTRICTIONS' 'MANAGE_DEVICE_POLICY_APP_RESTRICTIONS - Allows an application to manage application restrictions.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_APP_USER_DATA' 'MANAGE_DEVICE_POLICY_APP_USER_DATA - Allows an application to manage policy related to application user data.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_ASSIST_CONTENT' 'MANAGE_DEVICE_POLICY_ASSIST_CONTENT - Allows an application to set policy related to sending assist content to a privileged app such as the Assistant app.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_AUDIO_OUTPUT' 'MANAGE_DEVICE_POLICY_AUDIO_OUTPUT - Allows an application to set policy related to audio output.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_AUTOFILL' 'MANAGE_DEVICE_POLICY_AUTOFILL - Allows an application to set policy related to autofill.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_BACKUP_SERVICE' 'MANAGE_DEVICE_POLICY_BACKUP_SERVICE - Allows an application to manage backup service policy.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_BLOCK_UNINSTALL' 'MANAGE_DEVICE_POLICY_BLOCK_UNINSTALL - Allows an application to manage policy related to block package uninstallation.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_BLUETOOTH' 'MANAGE_DEVICE_POLICY_BLUETOOTH - Allows an application to set policy related to bluetooth.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_BUGREPORT' 'MANAGE_DEVICE_POLICY_BUGREPORT - Allows an application to request bugreports with user consent.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_CALLS' 'MANAGE_DEVICE_POLICY_CALLS - Allows an application to manage calling policy.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_CAMERA' 'MANAGE_DEVICE_POLICY_CAMERA - Allows an application to set policy related to restricting a users ability to use or enable and disable the camera.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_CAMERA_TOGGLE' 'MANAGE_DEVICE_POLICY_CAMERA_TOGGLE - Allows an application to manage policy related to camera toggle.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_CERTIFICATES' 'MANAGE_DEVICE_POLICY_CERTIFICATES - Allows an application to set policy related to certificates.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_COMMON_CRITERIA_MODE' 'MANAGE_DEVICE_POLICY_COMMON_CRITERIA_MODE - Allows an application to manage policy related to common criteria mode.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_CONTENT_PROTECTION' 'MANAGE_DEVICE_POLICY_CONTENT_PROTECTION - Allows an application to manage policy related to content protection.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_DEBUGGING_FEATURES' 'MANAGE_DEVICE_POLICY_DEBUGGING_FEATURES - Allows an application to manage debugging features policy.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_DEFAULT_SMS' 'MANAGE_DEVICE_POLICY_DEFAULT_SMS - Allows an application to set policy related to the default sms application.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_DEVICE_IDENTIFIERS' 'MANAGE_DEVICE_POLICY_DEVICE_IDENTIFIERS - Allows an application to manage policy related to device identifiers.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_DISPLAY' 'MANAGE_DEVICE_POLICY_DISPLAY - Allows an application to set policy related to the display.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_FACTORY_RESET' 'MANAGE_DEVICE_POLICY_FACTORY_RESET - Allows an application to set policy related to factory reset.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_FUN' 'MANAGE_DEVICE_POLICY_FUN - Allows an application to set policy related to fun.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_INPUT_METHODS' 'MANAGE_DEVICE_POLICY_INPUT_METHODS - Allows an application to set policy related to input methods.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES' 'MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES - Allows an application to manage installing from unknown sources policy.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_KEEP_UNINSTALLED_PACKAGES' 'MANAGE_DEVICE_POLICY_KEEP_UNINSTALLED_PACKAGES - Allows an application to set policy related to keeping uninstalled packages.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_KEYGUARD' 'MANAGE_DEVICE_POLICY_KEYGUARD - Allows an application to manage policy related to keyguard.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_LOCALE' 'MANAGE_DEVICE_POLICY_LOCALE - Allows an application to set policy related to locale.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_LOCATION' 'MANAGE_DEVICE_POLICY_LOCATION - Allows an application to set policy related to location.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_LOCK' 'MANAGE_DEVICE_POLICY_LOCK - Allows an application to lock a profile or the device with the appropriate cross-user permission.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS' 'MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS - Allows an application to set policy related to lock credentials.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_LOCK_TASK' 'MANAGE_DEVICE_POLICY_LOCK_TASK - Allows an application to manage lock task policy.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_MANAGED_SUBSCRIPTIONS' 'MANAGE_DEVICE_POLICY_MANAGED_SUBSCRIPTIONS - Allows an application to set policy related to subscriptions downloaded by an admin.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_METERED_DATA' 'MANAGE_DEVICE_POLICY_METERED_DATA - Allows an application to manage policy related to metered data.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_MICROPHONE' 'MANAGE_DEVICE_POLICY_MICROPHONE - Allows an application to set policy related to restricting a users ability to use or enable and disable the microphone.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_MICROPHONE_TOGGLE' 'MANAGE_DEVICE_POLICY_MICROPHONE_TOGGLE - Allows an application to manage policy related to microphone toggle.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_MOBILE_NETWORK' 'MANAGE_DEVICE_POLICY_MOBILE_NETWORK - Allows an application to set policy related to mobile networks.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_MODIFY_USERS' 'MANAGE_DEVICE_POLICY_MODIFY_USERS - Allows an application to manage policy preventing users from modifying users.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_MTE' 'MANAGE_DEVICE_POLICY_MTE - Allows an application to manage policy related to the Memory Tagging Extension (MTE).' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_NEARBY_COMMUNICATION' 'MANAGE_DEVICE_POLICY_NEARBY_COMMUNICATION - Allows an application to set policy related to nearby communications (e.g.Beam and nearby streaming).' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_NETWORK_LOGGING' 'MANAGE_DEVICE_POLICY_NETWORK_LOGGING - Allows an application to set policy related to network logging.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_ORGANIZATION_IDENTITY' 'MANAGE_DEVICE_POLICY_ORGANIZATION_IDENTITY - Allows an application to manage the identity of the managing organization.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_OVERRIDE_APN' 'MANAGE_DEVICE_POLICY_OVERRIDE_APN - Allows an application to set policy related to override APNs.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_PACKAGE_STATE' 'MANAGE_DEVICE_POLICY_PACKAGE_STATE - Allows an application to set policy related to hiding and suspending packages.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_PHYSICAL_MEDIA' 'MANAGE_DEVICE_POLICY_PHYSICAL_MEDIA - Allows an application to set policy related to physical media.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_PRINTING' 'MANAGE_DEVICE_POLICY_PRINTING - Allows an application to set policy related to printing.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_PRIVATE_DNS' 'MANAGE_DEVICE_POLICY_PRIVATE_DNS - Allows an application to set policy related to private DNS.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_PROFILES' 'MANAGE_DEVICE_POLICY_PROFILES - Allows an application to set policy related to profiles.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_PROFILE_INTERACTION' 'MANAGE_DEVICE_POLICY_PROFILE_INTERACTION - Allows an application to set policy related to interacting with profiles (e.g.Disallowing cross-profile copy and paste).' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_PROXY' 'MANAGE_DEVICE_POLICY_PROXY - Allows an application to set a network-independent global HTTP proxy.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_QUERY_SYSTEM_UPDATES' 'MANAGE_DEVICE_POLICY_QUERY_SYSTEM_UPDATES - Allows an application query system updates.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_RESET_PASSWORD' 'MANAGE_DEVICE_POLICY_RESET_PASSWORD - Allows an application to force set a new device unlock password or a managed profile challenge on current user.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_RESTRICT_PRIVATE_DNS' 'MANAGE_DEVICE_POLICY_RESTRICT_PRIVATE_DNS - Allows an application to set policy related to restricting the user from configuring private DNS.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_RUNTIME_PERMISSIONS' 'MANAGE_DEVICE_POLICY_RUNTIME_PERMISSIONS - Allows an application to set the grant state of runtime permissions on packages.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_RUN_IN_BACKGROUND' 'MANAGE_DEVICE_POLICY_RUN_IN_BACKGROUND - Allows an application to set policy related to users running in the background.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_SAFE_BOOT' 'MANAGE_DEVICE_POLICY_SAFE_BOOT - Allows an application to manage safe boot policy.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_SCREEN_CAPTURE' 'MANAGE_DEVICE_POLICY_SCREEN_CAPTURE - Allows an application to set policy related to screen capture.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_SCREEN_CONTENT' 'MANAGE_DEVICE_POLICY_SCREEN_CONTENT - Allows an application to set policy related to the usage of the contents of the screen.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_SECURITY_LOGGING' 'MANAGE_DEVICE_POLICY_SECURITY_LOGGING - Allows an application to set policy related to security logging.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_SETTINGS' 'MANAGE_DEVICE_POLICY_SETTINGS - Allows an application to set policy related to settings.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_SMS' 'MANAGE_DEVICE_POLICY_SMS - Allows an application to set policy related to sms.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_STATUS_BAR' 'MANAGE_DEVICE_POLICY_STATUS_BAR - Allows an application to set policy related to the status bar.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_SUPPORT_MESSAGE' 'MANAGE_DEVICE_POLICY_SUPPORT_MESSAGE - Allows an application to set support messages for when a user action is affected by an active policy.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_SUSPEND_PERSONAL_APPS' 'MANAGE_DEVICE_POLICY_SUSPEND_PERSONAL_APPS - Allows an application to set policy related to suspending personal apps.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_SYSTEM_APPS' 'MANAGE_DEVICE_POLICY_SYSTEM_APPS - Allows an application to manage policy related to system apps.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_SYSTEM_DIALOGS' 'MANAGE_DEVICE_POLICY_SYSTEM_DIALOGS - Allows an application to set policy related to system dialogs.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_SYSTEM_UPDATES' 'MANAGE_DEVICE_POLICY_SYSTEM_UPDATES - Allows an application to set policy related to system updates.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_TIME' 'MANAGE_DEVICE_POLICY_TIME - Allows an application to manage device policy relating to time.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_USB_DATA_SIGNALLING' 'MANAGE_DEVICE_POLICY_USB_DATA_SIGNALLING - Allows an application to set policy related to usb data signalling.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_USB_FILE_TRANSFER' 'MANAGE_DEVICE_POLICY_USB_FILE_TRANSFER - Allows an application to set policy related to usb file transfers.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_USERS' 'MANAGE_DEVICE_POLICY_USERS - Allows an application to set policy related to users.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_VPN' 'MANAGE_DEVICE_POLICY_VPN - Allows an application to set policy related to VPNs.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_WALLPAPER' 'MANAGE_DEVICE_POLICY_WALLPAPER - Allows an application to set policy related to the wallpaper.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_WIFI' 'MANAGE_DEVICE_POLICY_WIFI - Allows an application to set policy related to Wifi.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_WINDOWS' 'MANAGE_DEVICE_POLICY_WINDOWS - Allows an application to set policy related to windows.' 0 \
|
||||
'android.permission.MANAGE_DEVICE_POLICY_WIPE_DATA' 'MANAGE_DEVICE_POLICY_WIPE_DATA - Allows an application to manage policy related to wiping data.' 0 \
|
||||
'android.permission.MANAGE_DOCUMENTS' 'MANAGE_DOCUMENTS - Allows an application to manage access to documents, usually as part of a document picker.' 0 \
|
||||
'android.permission.MANAGE_EXTERNAL_STORAGE' 'MANAGE_EXTERNAL_STORAGE - Allows an application a broad access to external storage in scoped storage.' 0 \
|
||||
'android.permission.MANAGE_FINGERPRINT' 'MANAGE_FINGERPRINT' 0 \
|
||||
'android.permission.MANAGE_MEDIA' 'MANAGE_MEDIA - Allows an application to modify and delete media files on this device or any connected storage device without user confirmation.' 0 \
|
||||
'android.permission.MANAGE_MEDIA_PROJECTION' 'MANAGE_MEDIA_PROJECTION' 0 \
|
||||
'android.permission.MANAGE_NETWORK_POLICY' 'MANAGE_NETWORK_POLICY' 0 \
|
||||
'android.permission.MANAGE_NOTIFICATIONS' 'MANAGE_NOTIFICATIONS' 0 \
|
||||
'android.permission.MANAGE_ONGOING_CALLS' 'MANAGE_ONGOING_CALLS - Allows to query ongoing call details and manage ongoing calls' 0 \
|
||||
'android.permission.MANAGE_ONGOING_CALLS' 'MANAGE_ONGOING_CALLS - Protection level: signature|appop' 0 \
|
||||
'android.permission.MANAGE_OWN_CALLS' 'MANAGE_OWN_CALLS - Allows a calling application which manages its own calls through the self-managed ConnectionService APIs.' 0 \
|
||||
'android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS' 'MANAGE_PROFILE_AND_DEVICE_OWNERS' 0 \
|
||||
'android.permission.MANAGE_SOUND_TRIGGER' 'MANAGE_SOUND_TRIGGER' 0 \
|
||||
'android.permission.MANAGE_USB' 'MANAGE_USB' 0 \
|
||||
'android.permission.MANAGE_USERS' 'MANAGE_USERS' 0 \
|
||||
'android.permission.MANAGE_VOICE_KEYPHRASES' 'MANAGE_VOICE_KEYPHRASES' 0 \
|
||||
'android.permission.MANAGE_WIFI_INTERFACES' 'MANAGE_WIFI_INTERFACES - Allows applications to get notified when a Wi-Fi interface request cannot be satisfied without tearing down one or more other interfaces, and provide a decision whether to approve the request or reject it.' 0 \
|
||||
'android.permission.MANAGE_WIFI_NETWORK_SELECTION' 'MANAGE_WIFI_NETWORK_SELECTION - This permission is used to let OEMs grant their trusted app access to a subset of privileged wifi APIs to improve wifi performance.' 0 \
|
||||
'android.permission.MASTER_CLEAR' 'MASTER_CLEAR - Not for use by third-party applications.' 0 \
|
||||
'android.permission.MEDIA_CONTENT_CONTROL' 'MEDIA_CONTENT_CONTROL - Allows an application to know what content is playing and control its playback.' 0 \
|
||||
'android.permission.MEDIA_ROUTING_CONTROL' 'MEDIA_ROUTING_CONTROL - Allows an application to control the routing of media apps.' 0 \
|
||||
'android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS' 'MODIFY_APPWIDGET_BIND_PERMISSIONS' 0 \
|
||||
'android.permission.MODIFY_AUDIO_ROUTING' 'MODIFY_AUDIO_ROUTING' 0 \
|
||||
'android.permission.MODIFY_AUDIO_SETTINGS' 'MODIFY_AUDIO_SETTINGS - Allows an application to modify global audio settings.' 0 \
|
||||
'android.permission.MODIFY_CELL_BROADCASTS' 'MODIFY_CELL_BROADCASTS' 0 \
|
||||
'android.permission.MODIFY_DAY_NIGHT_MODE' 'MODIFY_DAY_NIGHT_MODE' 0 \
|
||||
'android.permission.MODIFY_NETWORK_ACCOUNTING' 'MODIFY_NETWORK_ACCOUNTING' 0 \
|
||||
'android.permission.MODIFY_PARENTAL_CONTROLS' 'MODIFY_PARENTAL_CONTROLS' 0 \
|
||||
'android.permission.MODIFY_PHONE_STATE' 'MODIFY_PHONE_STATE - Allows modification of the telephony state - power on, mmi, etc.' 0 \
|
||||
'android.permission.MOUNT_FORMAT_FILESYSTEMS' 'MOUNT_FORMAT_FILESYSTEMS - Allows formatting file systems for removable storage.' 0 \
|
||||
'android.permission.MOUNT_UNMOUNT_FILESYSTEMS' 'MOUNT_UNMOUNT_FILESYSTEMS - Allows mounting and unmounting file systems for removable storage.' 0 \
|
||||
'android.permission.MOVE_PACKAGE' 'MOVE_PACKAGE' 0 \
|
||||
'android.permission.NEARBY_WIFI_DEVICES' 'NEARBY_WIFI_DEVICES - Required to be able to advertise and connect to nearby devices via Wi-Fi.' 0 \
|
||||
'android.permission.NET_ADMIN' 'NET_ADMIN' 0 \
|
||||
'android.permission.NET_TUNNELING' 'NET_TUNNELING' 0 \
|
||||
'android.permission.NFC' 'NFC - Allows applications to perform I/O operations over NFC.' 0 \
|
||||
'android.permission.NFC_HANDOVER_STATUS' 'NFC_HANDOVER_STATUS' 0 \
|
||||
'android.permission.NFC_PREFERRED_PAYMENT_INFO' 'NFC_PREFERRED_PAYMENT_INFO - Allows applications to receive NFC preferred payment service information.' 0 \
|
||||
'android.permission.NFC_TRANSACTION_EVENT' 'NFC_TRANSACTION_EVENT - Allows applications to receive NFC transaction events.' 0 \
|
||||
'android.permission.NOTIFY_PENDING_SYSTEM_UPDATE' 'NOTIFY_PENDING_SYSTEM_UPDATE' 0 \
|
||||
'android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS' 'OBSERVE_GRANT_REVOKE_PERMISSIONS' 0 \
|
||||
'android.permission.OEM_UNLOCK_STATE' 'OEM_UNLOCK_STATE' 0 \
|
||||
'android.permission.OVERRIDE_WIFI_CONFIG' 'OVERRIDE_WIFI_CONFIG - Allows an application to modify any wifi configuration, even if created by another application.' 0 \
|
||||
'android.permission.PACKAGE_USAGE_STATS' 'PACKAGE_USAGE_STATS - Allows an application to collect component usage statistics' 0 \
|
||||
'android.permission.PACKAGE_USAGE_STATS' 'PACKAGE_USAGE_STATS - Declaring the permission implies intention to use the API and the user of the device can grant permission through the Settings application.' 0 \
|
||||
'android.permission.PACKAGE_VERIFICATION_AGENT' 'PACKAGE_VERIFICATION_AGENT' 0 \
|
||||
'android.permission.PACKET_KEEPALIVE_OFFLOAD' 'PACKET_KEEPALIVE_OFFLOAD' 0 \
|
||||
'android.permission.PEERS_MAC_ADDRESS' 'PEERS_MAC_ADDRESS' 0 \
|
||||
'android.permission.PERFORM_CDMA_PROVISIONING' 'PERFORM_CDMA_PROVISIONING' 0 \
|
||||
'android.permission.PERFORM_SIM_ACTIVATION' 'PERFORM_SIM_ACTIVATION' 0 \
|
||||
'android.permission.PERSISTENT_ACTIVITY' 'PERSISTENT_ACTIVITY - This constant was deprecated in API level 15. This functionality will be removed in the future; please do not use. Allow an application to make its activities persistent.' 0 \
|
||||
'android.permission.POST_NOTIFICATIONS' 'POST_NOTIFICATIONS - Allows an app to post notifications' 0 \
|
||||
'android.permission.POST_NOTIFICATIONS' 'POST_NOTIFICATIONS - Protection level: dangerous' 0 \
|
||||
'android.permission.PROCESS_CALLLOG_INFO' 'PROCESS_CALLLOG_INFO' 0 \
|
||||
'android.permission.PROCESS_OUTGOING_CALLS' 'PROCESS_OUTGOING_CALLS - This constant was deprecated in API level 29. Applications should use CallRedirectionService instead of the Intent.ACTION_NEW_OUTGOING_CALL broadcast.' 0 \
|
||||
'android.permission.PROCESS_PHONE_ACCOUNT_REGISTRATION' 'PROCESS_PHONE_ACCOUNT_REGISTRATION' 0 \
|
||||
'android.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS' 'PROVIDE_OWN_AUTOFILL_SUGGESTIONS - Allows an application to display its suggestions using the autofill framework.' 0 \
|
||||
'android.permission.PROVIDE_REMOTE_CREDENTIALS' 'PROVIDE_REMOTE_CREDENTIALS - Allows an application to be able to store and retrieve credentials from a remote device.' 0 \
|
||||
'android.permission.PROVIDE_TRUST_AGENT' 'PROVIDE_TRUST_AGENT' 0 \
|
||||
'android.permission.QUERY_ALL_PACKAGES' 'QUERY_ALL_PACKAGES - Allows query of any normal app on the device, regardless of manifest declarations.' 0 \
|
||||
'android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT' 'QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT' 0 \
|
||||
'android.permission.READ_ASSISTANT_APP_SEARCH_DATA' 'READ_ASSISTANT_APP_SEARCH_DATA - Allows an application to query over global data in AppSearch thats visible to the ASSISTANT role.' 0 \
|
||||
'android.permission.READ_BASIC_PHONE_STATE' 'READ_BASIC_PHONE_STATE - Allows read only access to phone state with a non dangerous permission, including the information like cellular network type, software version.' 0 \
|
||||
'android.permission.READ_BLOCKED_NUMBERS' 'READ_BLOCKED_NUMBERS' 0 \
|
||||
'android.permission.READ_CALENDAR' 'READ_CALENDAR - Allows an application to read the users calendar data.' 0 \
|
||||
'android.permission.READ_CALL_LOG' 'READ_CALL_LOG - Allows an application to read the users call log.' 0 \
|
||||
'android.permission.READ_CONTACTS' 'READ_CONTACTS - Allows an application to read the users contacts data.' 0 \
|
||||
'android.permission.READ_DREAM_STATE' 'READ_DREAM_STATE' 0 \
|
||||
'android.permission.READ_DROPBOX_DATA' 'READ_DROPBOX_DATA - Allows an application to access the data in Dropbox.' 0 \
|
||||
'android.permission.READ_EXTERNAL_STORAGE' 'READ_EXTERNAL_STORAGE - Allows an application to read from external storage.' 0 \
|
||||
'android.permission.READ_FRAME_BUFFER' 'READ_FRAME_BUFFER' 0 \
|
||||
'android.permission.READ_HOME_APP_SEARCH_DATA' 'READ_HOME_APP_SEARCH_DATA - Allows an application to query over global data in AppSearch thats visible to the HOME role.' 0 \
|
||||
'android.permission.READ_INPUT_STATE' 'READ_INPUT_STATE - This constant was deprecated in API level 16. The API that used this permission has been removed.' 0 \
|
||||
'android.permission.READ_INSTALL_SESSIONS' 'READ_INSTALL_SESSIONS' 0 \
|
||||
'android.permission.READ_LOGS' 'READ_LOGS - Allows an application to read the low-level system log files.' 0 \
|
||||
'android.permission.READ_NEARBY_STREAMING_POLICY' 'READ_NEARBY_STREAMING_POLICY - Allows an application to read nearby streaming policy.' 0 \
|
||||
'android.permission.READ_NETWORK_USAGE_HISTORY' 'READ_NETWORK_USAGE_HISTORY' 0 \
|
||||
'android.permission.READ_OEM_UNLOCK_STATE' 'READ_OEM_UNLOCK_STATE' 0 \
|
||||
'android.permission.READ_PHONE_NUMBERS' 'READ_PHONE_NUMBERS - Allows read access to the devices phone number(s).' 0 \
|
||||
'android.permission.READ_PHONE_STATE' 'READ_PHONE_STATE - Allows read only access to phone state, including the current cellular network information, the status of any ongoing calls, and a list of any PhoneAccounts registered on the device.' 0 \
|
||||
'android.permission.READ_PRECISE_PHONE_STATE' 'READ_PRECISE_PHONE_STATE - Allows read only access to precise phone state.' 0 \
|
||||
'android.permission.READ_PRIVILEGED_PHONE_STATE' 'READ_PRIVILEGED_PHONE_STATE' 0 \
|
||||
'android.permission.READ_PROFILE' 'READ_PROFILE' 0 \
|
||||
'android.permission.READ_SEARCH_INDEXABLES' 'READ_SEARCH_INDEXABLES' 0 \
|
||||
'android.permission.READ_SMS' 'READ_SMS - Allows an application to read SMS messages.' 0 \
|
||||
'android.permission.READ_SOCIAL_STREAM' 'READ_SOCIAL_STREAM' 0 \
|
||||
'android.permission.READ_SYNC_SETTINGS' 'READ_SYNC_SETTINGS - Allows applications to read the sync settings.' 0 \
|
||||
'android.permission.READ_SYNC_STATS' 'READ_SYNC_STATS - Allows applications to read the sync stats.' 0 \
|
||||
'android.permission.READ_USER_DICTIONARY' 'READ_USER_DICTIONARY' 0 \
|
||||
'android.permission.READ_VOICEMAIL' 'READ_VOICEMAIL - Allows an application to read voicemails in the system.' 0 \
|
||||
'android.permission.READ_WIFI_CREDENTIAL' 'READ_WIFI_CREDENTIAL' 0 \
|
||||
'android.permission.REAL_GET_TASKS' 'REAL_GET_TASKS' 0 \
|
||||
'android.permission.REBOOT' 'REBOOT - Required to be able to reboot the device.' 0 \
|
||||
'android.permission.RECEIVE_BLUETOOTH_MAP' 'RECEIVE_BLUETOOTH_MAP' 0 \
|
||||
'android.permission.RECEIVE_BOOT_COMPLETED' 'RECEIVE_BOOT_COMPLETED - Allows an application to receive the Intent.ACTION_BOOT_COMPLETED that is broadcast after the system finishes booting.' 0 \
|
||||
'android.permission.RECEIVE_DATA_ACTIVITY_CHANGE' 'RECEIVE_DATA_ACTIVITY_CHANGE' 0 \
|
||||
'android.permission.RECEIVE_EMERGENCY_BROADCAST' 'RECEIVE_EMERGENCY_BROADCAST' 0 \
|
||||
'android.permission.RECEIVE_MEDIA_RESOURCE_USAGE' 'RECEIVE_MEDIA_RESOURCE_USAGE' 0 \
|
||||
'android.permission.RECEIVE_MMS' 'RECEIVE_MMS - Allows an application to monitor incoming MMS messages.' 0 \
|
||||
'android.permission.RECEIVE_SMS' 'RECEIVE_SMS - Allows an application to receive SMS messages.' 0 \
|
||||
'android.permission.RECEIVE_STK_COMMANDS' 'RECEIVE_STK_COMMANDS' 0 \
|
||||
'android.permission.RECEIVE_WAP_PUSH' 'RECEIVE_WAP_PUSH - Allows an application to receive WAP push messages.' 0 \
|
||||
'android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE' 'RECEIVE_WIFI_CREDENTIAL_CHANGE' 0 \
|
||||
'android.permission.RECORD_AUDIO' 'RECORD_AUDIO - Allows an application to record audio.' 0 \
|
||||
'android.permission.RECOVERY' 'RECOVERY' 0 \
|
||||
'android.permission.REGISTER_CALL_PROVIDER' 'REGISTER_CALL_PROVIDER' 0 \
|
||||
'android.permission.REGISTER_CONNECTION_MANAGER' 'REGISTER_CONNECTION_MANAGER' 0 \
|
||||
'android.permission.REGISTER_SIM_SUBSCRIPTION' 'REGISTER_SIM_SUBSCRIPTION' 0 \
|
||||
'android.permission.REGISTER_WINDOW_MANAGER_LISTENERS' 'REGISTER_WINDOW_MANAGER_LISTENERS' 0 \
|
||||
'android.permission.REMOTE_AUDIO_PLAYBACK' 'REMOTE_AUDIO_PLAYBACK' 0 \
|
||||
'android.permission.REMOVE_DRM_CERTIFICATES' 'REMOVE_DRM_CERTIFICATES' 0 \
|
||||
'android.permission.REMOVE_TASKS' 'REMOVE_TASKS' 0 \
|
||||
'android.permission.REORDER_TASKS' 'REORDER_TASKS - Allows an application to change the Z-order of tasks.' 0 \
|
||||
'android.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING' 'REQUEST_COMPANION_PROFILE_APP_STREAMING - Allows application to request to be associated with a virtual display capable of streaming Android applications (AssociationRequest.DEVICE_PROFILE_APP_STREAMING) by CompanionDeviceManager.' 0 \
|
||||
'android.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION' 'REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION - Allows application to request to be associated with a vehicle head unit capable of automotive projection (AssociationRequest.DEVICE_PROFILE_AUTOMOTIVE_PROJECTION) by CompanionDeviceManager.' 0 \
|
||||
'android.permission.REQUEST_COMPANION_PROFILE_COMPUTER' 'REQUEST_COMPANION_PROFILE_COMPUTER - Allows application to request to be associated with a computer to share functionality and/or data with other devices, such as notifications, photos and media (AssociationRequest.DEVICE_PROFILE_COMPUTER) by CompanionDeviceManager.' 0 \
|
||||
'android.permission.REQUEST_COMPANION_PROFILE_GLASSES' 'REQUEST_COMPANION_PROFILE_GLASSES - Allows app to request to be associated with a device via CompanionDeviceManager as "glasses"' 0 \
|
||||
'android.permission.REQUEST_COMPANION_PROFILE_GLASSES' 'REQUEST_COMPANION_PROFILE_GLASSES - Protection level: normal' 0 \
|
||||
'android.permission.REQUEST_COMPANION_PROFILE_NEARBY_DEVICE_STREAMING' 'REQUEST_COMPANION_PROFILE_NEARBY_DEVICE_STREAMING - Allows application to request to stream content from an Android host to a nearby device (AssociationRequest.DEVICE_PROFILE_NEARBY_DEVICE_STREAMING) by CompanionDeviceManager.' 0 \
|
||||
'android.permission.REQUEST_COMPANION_PROFILE_WATCH' 'REQUEST_COMPANION_PROFILE_WATCH - Allows app to request to be associated with a device via CompanionDeviceManager as a "watch"' 0 \
|
||||
'android.permission.REQUEST_COMPANION_PROFILE_WATCH' 'REQUEST_COMPANION_PROFILE_WATCH - Protection level: normal' 0 \
|
||||
'android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND' 'REQUEST_COMPANION_RUN_IN_BACKGROUND - Allows a companion app to run in the background.' 0 \
|
||||
'android.permission.REQUEST_COMPANION_SELF_MANAGED' 'REQUEST_COMPANION_SELF_MANAGED - Allows an application to create a "self-managed" association.' 0 \
|
||||
'android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND' 'REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND - Allows a companion app to start a foreground service from the background.' 0 \
|
||||
'android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND' 'REQUEST_COMPANION_USE_DATA_IN_BACKGROUND - Allows a companion app to use data in the background.' 0 \
|
||||
'android.permission.REQUEST_DELETE_PACKAGES' 'REQUEST_DELETE_PACKAGES - Allows an application to request deleting packages.' 0 \
|
||||
'android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS' 'REQUEST_IGNORE_BATTERY_OPTIMIZATIONS - Permission an application must hold in order to use Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS.' 0 \
|
||||
'android.permission.REQUEST_INSTALL_PACKAGES' 'REQUEST_INSTALL_PACKAGES - Allows an application to request installing packages.' 0 \
|
||||
'android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE' 'REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE - Allows an application to subscribe to notifications about the presence status change of their associated companion device' 0 \
|
||||
'android.permission.REQUEST_PASSWORD_COMPLEXITY' 'REQUEST_PASSWORD_COMPLEXITY - Allows an application to request the screen lock complexity and prompt users to update the screen lock to a certain complexity level.' 0 \
|
||||
'android.permission.RESET_FINGERPRINT_LOCKOUT' 'RESET_FINGERPRINT_LOCKOUT' 0 \
|
||||
'android.permission.RESET_SHORTCUT_MANAGER_THROTTLING' 'RESET_SHORTCUT_MANAGER_THROTTLING' 0 \
|
||||
'android.permission.RESTART_PACKAGES' 'RESTART_PACKAGES - This constant was deprecated in API level 15. The ActivityManager.restartPackage(String) API is no longer supported.' 0 \
|
||||
'android.permission.RETRIEVE_WINDOW_CONTENT' 'RETRIEVE_WINDOW_CONTENT' 0 \
|
||||
'android.permission.RETRIEVE_WINDOW_TOKEN' 'RETRIEVE_WINDOW_TOKEN' 0 \
|
||||
'android.permission.REVOKE_RUNTIME_PERMISSIONS' 'REVOKE_RUNTIME_PERMISSIONS' 0 \
|
||||
'android.permission.RUN_USER_INITIATED_JOBS' 'RUN_USER_INITIATED_JOBS - Allows applications to use the user-initiated jobs API.' 0 \
|
||||
'android.permission.SCHEDULE_EXACT_ALARM' 'SCHEDULE_EXACT_ALARM - Allows applications to use exact alarm APIs.' 0 \
|
||||
'android.permission.SCORE_NETWORKS' 'SCORE_NETWORKS' 0 \
|
||||
'android.permission.SEND_CALL_LOG_CHANGE' 'SEND_CALL_LOG_CHANGE' 0 \
|
||||
'android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS' 'SEND_DOWNLOAD_COMPLETED_INTENTS' 0 \
|
||||
'android.permission.SEND_RESPOND_VIA_MESSAGE' 'SEND_RESPOND_VIA_MESSAGE - Allows an application (Phone) to send a request to other applications to handle the respond-via-message action during incoming calls.' 0 \
|
||||
'android.permission.SEND_SMS' 'SEND_SMS - Allows an application to send SMS messages.' 0 \
|
||||
'android.permission.SEND_SMS_NO_CONFIRMATION' 'SEND_SMS_NO_CONFIRMATION' 0 \
|
||||
'android.permission.SERIAL_PORT' 'SERIAL_PORT' 0 \
|
||||
'android.permission.SET_ACTIVITY_WATCHER' 'SET_ACTIVITY_WATCHER' 0 \
|
||||
'android.permission.SET_ALARM' 'SET_ALARM - Allows an application to broadcast an Intent to set an alarm for the user.' 0 \
|
||||
'android.permission.SET_ALWAYS_FINISH' 'SET_ALWAYS_FINISH - Allows an application to control whether activities are immediately finished when put in the background.' 0 \
|
||||
'android.permission.SET_ANIMATION_SCALE' 'SET_ANIMATION_SCALE - Modify the global animation scaling factor.' 0 \
|
||||
'android.permission.SET_BIOMETRIC_DIALOG_ADVANCED' 'SET_BIOMETRIC_DIALOG_ADVANCED - Allows an application to set the advanced features on BiometricDialog (SystemUI), including logo, logo description, and content view with more options button.' 0 \
|
||||
'android.permission.SET_DEBUG_APP' 'SET_DEBUG_APP - Configure an application for debugging.' 0 \
|
||||
'android.permission.SET_INPUT_CALIBRATION' 'SET_INPUT_CALIBRATION' 0 \
|
||||
'android.permission.SET_KEYBOARD_LAYOUT' 'SET_KEYBOARD_LAYOUT' 0 \
|
||||
'android.permission.SET_ORIENTATION' 'SET_ORIENTATION' 0 \
|
||||
'android.permission.SET_POINTER_SPEED' 'SET_POINTER_SPEED' 0 \
|
||||
'android.permission.SET_PREFERRED_APPLICATIONS' 'SET_PREFERRED_APPLICATIONS - This constant was deprecated in API level 15. No longer useful, see PackageManager.addPackageToPreferred(String) for details.' 0 \
|
||||
'android.permission.SET_PROCESS_LIMIT' 'SET_PROCESS_LIMIT - Allows an application to set the maximum number of (not needed) application processes that can be running.' 0 \
|
||||
'android.permission.SET_SCREEN_COMPATIBILITY' 'SET_SCREEN_COMPATIBILITY' 0 \
|
||||
'android.permission.SET_TIME' 'SET_TIME - Allows applications to set the system time directly.' 0 \
|
||||
'android.permission.SET_TIME_ZONE' 'SET_TIME_ZONE - Allows applications to set the system time zone directly.' 0 \
|
||||
'android.permission.SET_WALLPAPER' 'SET_WALLPAPER - Allows applications to set the wallpaper.' 0 \
|
||||
'android.permission.SET_WALLPAPER_COMPONENT' 'SET_WALLPAPER_COMPONENT' 0 \
|
||||
'android.permission.SET_WALLPAPER_HINTS' 'SET_WALLPAPER_HINTS - Allows applications to set the wallpaper hints.' 0 \
|
||||
'android.permission.SHUTDOWN' 'SHUTDOWN' 0 \
|
||||
'android.permission.SIGNAL_PERSISTENT_PROCESSES' 'SIGNAL_PERSISTENT_PROCESSES - Allow an application to request that a signal be sent to all persistent processes.' 0 \
|
||||
'android.permission.SMS_FINANCIAL_TRANSACTIONS' 'SMS_FINANCIAL_TRANSACTIONS - This constant was deprecated in API level 31. The API that used this permission is no longer functional.' 0 \
|
||||
'android.permission.START_ANY_ACTIVITY' 'START_ANY_ACTIVITY' 0 \
|
||||
'android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND' 'START_FOREGROUND_SERVICES_FROM_BACKGROUND - Allows an application to start foreground services from the background at any time.' 0 \
|
||||
'android.permission.START_PRINT_SERVICE_CONFIG_ACTIVITY' 'START_PRINT_SERVICE_CONFIG_ACTIVITY' 0 \
|
||||
'android.permission.START_TASKS_FROM_RECENTS' 'START_TASKS_FROM_RECENTS' 0 \
|
||||
'android.permission.START_VIEW_APP_FEATURES' 'START_VIEW_APP_FEATURES - Allows the holder to start the screen with a list of app features.' 0 \
|
||||
'android.permission.START_VIEW_PERMISSION_USAGE' 'START_VIEW_PERMISSION_USAGE - Allows the holder to start the permission usage screen for an app.' 0 \
|
||||
'android.permission.STATUS_BAR' 'STATUS_BAR - Allows an application to open, close, or disable the status bar and its icons.' 0 \
|
||||
'android.permission.STATUS_BAR_SERVICE' 'STATUS_BAR_SERVICE' 0 \
|
||||
'android.permission.STOP_APP_SWITCHES' 'STOP_APP_SWITCHES' 0 \
|
||||
'android.permission.STORAGE_INTERNAL' 'STORAGE_INTERNAL' 0 \
|
||||
'android.permission.SUBSCRIBED_FEEDS_READ' 'SUBSCRIBED_FEEDS_READ' 0 \
|
||||
'android.permission.SUBSCRIBED_FEEDS_WRITE' 'SUBSCRIBED_FEEDS_WRITE' 0 \
|
||||
'android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE' 'SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE - Allows an application to subscribe to keyguard locked (i.e., showing) state.' 0 \
|
||||
'android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME' 'SUBSTITUTE_NOTIFICATION_APP_NAME' 0 \
|
||||
'android.permission.SYSTEM_ALERT_WINDOW' 'SYSTEM_ALERT_WINDOW - Allows an app to create windows using the type WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, shown on top of all other apps.' 0 \
|
||||
'android.permission.TABLET_MODE' 'TABLET_MODE' 0 \
|
||||
'android.permission.TEMPORARY_ENABLE_ACCESSIBILITY' 'TEMPORARY_ENABLE_ACCESSIBILITY' 0 \
|
||||
'android.permission.TETHER_PRIVILEGED' 'TETHER_PRIVILEGED' 0 \
|
||||
'android.permission.TRANSMIT_IR' 'TRANSMIT_IR - Allows using the devices IR transmitter, if available.' 0 \
|
||||
'android.permission.TRUST_LISTENER' 'TRUST_LISTENER' 0 \
|
||||
'android.permission.TURN_SCREEN_ON' 'TURN_SCREEN_ON - Allows an app to turn on the screen on, e.g.with PowerManager.ACQUIRE_CAUSES_WAKEUP.' 0 \
|
||||
'android.permission.TV_INPUT_HARDWARE' 'TV_INPUT_HARDWARE' 0 \
|
||||
'android.permission.TV_VIRTUAL_REMOTE_CONTROLLER' 'TV_VIRTUAL_REMOTE_CONTROLLER' 0 \
|
||||
'android.permission.UNINSTALL_SHORTCUT' 'UNINSTALL_SHORTCUT - ' 0 \
|
||||
'android.permission.UNINSTALL_SHORTCUT' 'UNINSTALL_SHORTCUT - Dont use this permission in your app.' 0 \
|
||||
'android.permission.UPDATE_APP_OPS_STATS' 'UPDATE_APP_OPS_STATS' 0 \
|
||||
'android.permission.UPDATE_CONFIG' 'UPDATE_CONFIG' 0 \
|
||||
'android.permission.UPDATE_DEVICE_STATS' 'UPDATE_DEVICE_STATS - Allows an application to update device statistics.' 0 \
|
||||
'android.permission.UPDATE_LOCK' 'UPDATE_LOCK' 0 \
|
||||
'android.permission.UPDATE_LOCK_TASK_PACKAGES' 'UPDATE_LOCK_TASK_PACKAGES' 0 \
|
||||
'android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION' 'UPDATE_PACKAGES_WITHOUT_USER_ACTION - Allows an application to indicate via PackageInstaller.SessionParams.setRequireUserAction(int) that user action should not be required for an app update.' 0 \
|
||||
'android.permission.USER_ACTIVITY' 'USER_ACTIVITY' 0 \
|
||||
'android.permission.USE_BIOMETRIC' 'USE_BIOMETRIC - Allows an app to use device supported biometric modalities.' 0 \
|
||||
'android.permission.USE_CREDENTIALS' 'USE_CREDENTIALS' 0 \
|
||||
'android.permission.USE_EXACT_ALARM' 'USE_EXACT_ALARM - Allows apps to use exact alarms just like with SCHEDULE_EXACT_ALARM but without needing to request this permission from the user.' 0 \
|
||||
'android.permission.USE_FINGERPRINT' 'USE_FINGERPRINT - This constant was deprecated in API level 28. Applications should request USE_BIOMETRIC instead' 0 \
|
||||
'android.permission.USE_FULL_SCREEN_INTENT' 'USE_FULL_SCREEN_INTENT - Required for apps targeting Build.VERSION_CODES.Q that want to use notification full screen intents.' 0 \
|
||||
'android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER' 'USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER - Allows to read device identifiers and use ICC based authentication like EAP-AKA.' 0 \
|
||||
'android.permission.USE_SIP' 'USE_SIP - Allows an application to use SIP service.' 0 \
|
||||
'android.permission.UWB_RANGING' 'UWB_RANGING - Required to be able to range to devices using ultra-wideband.' 0 \
|
||||
'android.permission.VIBRATE' 'VIBRATE - Allows access to the vibrator.' 0 \
|
||||
'android.permission.WAKE_LOCK' 'WAKE_LOCK - Allows using PowerManager WakeLocks to keep processor from sleeping or screen from dimming.' 0 \
|
||||
'android.permission.WRITE_APN_SETTINGS' 'WRITE_APN_SETTINGS - Allows applications to write the apn settings and read sensitive fields of an existing apn settings like user and password.' 0 \
|
||||
'android.permission.WRITE_BLOCKED_NUMBERS' 'WRITE_BLOCKED_NUMBERS' 0 \
|
||||
'android.permission.WRITE_CALENDAR' 'WRITE_CALENDAR - Allows an application to write the users calendar data.' 0 \
|
||||
'android.permission.WRITE_CALL_LOG' 'WRITE_CALL_LOG - Allows an application to write and read the users call log data.' 0 \
|
||||
'android.permission.WRITE_CONTACTS' 'WRITE_CONTACTS - Allows an application to write the users contacts data.' 0 \
|
||||
'android.permission.WRITE_DREAM_STATE' 'WRITE_DREAM_STATE' 0 \
|
||||
'android.permission.WRITE_EXTERNAL_STORAGE' 'WRITE_EXTERNAL_STORAGE - Allows an application to write to external storage.' 0 \
|
||||
'android.permission.WRITE_GSERVICES' 'WRITE_GSERVICES - Allows an application to modify the Google service map.' 0 \
|
||||
'android.permission.WRITE_MEDIA_STORAGE' 'WRITE_MEDIA_STORAGE' 0 \
|
||||
'android.permission.WRITE_PROFILE' 'WRITE_PROFILE' 0 \
|
||||
'android.permission.WRITE_SECURE_SETTINGS' 'WRITE_SECURE_SETTINGS - Allows an application to read or write the secure system settings.' 0 \
|
||||
'android.permission.WRITE_SETTINGS' 'WRITE_SETTINGS - Allows an application to read or write the system settings.' 0 \
|
||||
'android.permission.WRITE_SMS' 'WRITE_SMS' 0 \
|
||||
'android.permission.WRITE_SOCIAL_STREAM' 'WRITE_SOCIAL_STREAM' 0 \
|
||||
'android.permission.WRITE_SYNC_SETTINGS' 'WRITE_SYNC_SETTINGS - Allows applications to write the sync settings.' 0 \
|
||||
'android.permission.WRITE_VOICEMAIL' 'WRITE_VOICEMAIL - Allows an application to modify and remove existing voicemails in the system.' 0 3>&1 1>&2 2>&3 |
|
||||
sed 's/$/ /' |
|
||||
sed 's/"an/<uses-permission android:name="an/g;s/" /"\/>\n/g' )"}"
|
||||
|
||||
|
||||
|
||||
APP_VALUES="$(tee app-config.sh << VALUES
|
||||
APP_NAME='$APP_NAME'
|
||||
APP_PACKAGE='$APP_PACKAGE'
|
||||
APP_VERSION_SDK_TARGET='$APP_VERSION_SDK_TARGET'
|
||||
APP_VERSION_SDK_MIN='$APP_VERSION_SDK_MIN'
|
||||
APP_PERMISSIONS='$APP_PERMISSIONS'
|
||||
VALUES
|
||||
)"
|
||||
|
||||
cat << INFO
|
||||
Creating an skeleton for an Android app with the following info:
|
||||
$APP_VALUES
|
||||
INFO
|
27
app/AndroidManifest.xml
Normal file
27
app/AndroidManifest.xml
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="app.twoactivities"
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0">
|
||||
<uses-sdk android:minSdkVersion="30"
|
||||
android:targetSdkVersion="33"/>
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<application android:label="2 activities" android:icon="@drawable/appicon">
|
||||
<activity android:name=".AppActivity"
|
||||
android:exported="true"
|
||||
android:configChanges="orientation|screenSize|keyboardHidden"
|
||||
android:label="2 Activities">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<!-- this is YET ANOTHER Activity. it needs to be declared here -->
|
||||
<activity android:name=".ActivityZwei"
|
||||
android:exported="true"
|
||||
android:configChanges="orientation|screenSize|keyboardHidden"
|
||||
android:label="ZWEI">
|
||||
</activity>
|
||||
</application>
|
||||
</manifest>
|
96
app/Makefile
Normal file
96
app/Makefile
Normal file
|
@ -0,0 +1,96 @@
|
|||
.ONESHELL:
|
||||
|
||||
SHELL=/bin/makefile-bash-wrapper.sh
|
||||
|
||||
# the include of the Makefile.app-config defines the Makefile
|
||||
# variables $(BUILDTOOLS), $(ANDROID_JAR) and $(PACKAGE)
|
||||
# which depend on the configuration and are necessary to have the Makefile work
|
||||
# the rule whose target is Makefile.app-config will trigger a reload of this include as ncessary
|
||||
# (as explained https://make.mad-scientist.net/papers/advanced-auto-dependency-generation/#include)
|
||||
include Makefile.app-config
|
||||
|
||||
# symlink
|
||||
./app.apk: ./result/app.apk
|
||||
ln -sfrv ./result/app.apk ./app.apk
|
||||
|
||||
# zipalign and sign again (second signing)
|
||||
./result/app.apk : ./result/signed.apk app-config.sh ./keystore
|
||||
$(BUILDTOOLS)/zipalign -v -f 4 $< $@
|
||||
$(BUILDTOOLS)/apksigner sign --ks keystore --key-pass pass:armena --ks-pass pass:armena $@
|
||||
|
||||
# sign the apk file (first sign)
|
||||
./result/signed.apk : ./result/unsigned.apk ./keystore
|
||||
jarsigner -verbose -keystore ./keystore -storepass armena -keypass armena -signedjar $@ $< helljniKey
|
||||
|
||||
# make a "keystore" for the cryptographic signing stuff
|
||||
./keystore :
|
||||
keytool -genkeypair -validity 1000 -dname "CN=alexander,O=Android,C=JPN" -keystore $@ \
|
||||
-storepass armena -keypass armena -alias helljniKey -keyalg RSA -v
|
||||
|
||||
# aapt "package" together the dalvik/hex stuff (and "assets" and "res")
|
||||
./result/unsigned.apk : ./result/bin/classes.dex ./assets ./AndroidManifest.xml
|
||||
rm -rvf "$@"
|
||||
$(BUILDTOOLS)/aapt package \
|
||||
-v -u -f -M ./AndroidManifest.xml -S ./res \
|
||||
-I $(ANDROID_JAR) -A ./assets -F $@ ./result/bin
|
||||
|
||||
# convert "java class"es files (i.e bytecode) to dalvic/d8 android thing
|
||||
./result/bin/classes.dex : ./obj/$(PACKAGE)/AppActivity.class ./obj/$(PACKAGE)/ActivityZwei.class
|
||||
mkdir -p ./result/bin
|
||||
$(BUILDTOOLS)/d8 ./obj/$(PACKAGE)/*.class \
|
||||
--lib $(ANDROID_JAR) --output ./result/bin
|
||||
|
||||
# compile (javac) the class from
|
||||
./obj/$(PACKAGE)/ActivityZwei.class : ./src/$(PACKAGE)/ActivityZwei.java ./src/$(PACKAGE)/R.java
|
||||
mkdir -p ./obj/$(PACKAGE)
|
||||
javac -d ./obj -classpath $(ANDROID_JAR) -sourcepath ./src $<
|
||||
|
||||
# compile (javac) the class from
|
||||
./obj/$(PACKAGE)/AppActivity.class : ./src/$(PACKAGE)/AppActivity.java ./src/$(PACKAGE)/R.java
|
||||
mkdir -p ./obj/$(PACKAGE)
|
||||
javac -d ./obj -classpath $(ANDROID_JAR) -sourcepath ./src $<
|
||||
|
||||
|
||||
# make the resources "R.java" thing
|
||||
./src/$(PACKAGE)/R.java : $(shell find ./res -type f) app-config.sh ./AndroidManifest.xml ./android-sdk/installed | ./src/$(PACKAGE)
|
||||
$(BUILDTOOLS)/aapt package \
|
||||
-v -f -m -S ./res -J ./src -M ./AndroidManifest.xml \
|
||||
-I $(ANDROID_JAR)
|
||||
|
||||
# generate the AppActivity.java (template
|
||||
# the "|" denotes an "order-only" prerequiste (as in https://stackoverflow.com/a/58040049/1711186)
|
||||
./src/$(PACKAGE)/AppActivity.java: app-config.sh | ./src/$(PACKAGE)
|
||||
./.Makefile.scripts/make--AppActivity.java.sh > $@
|
||||
|
||||
./src/$(PACKAGE):
|
||||
mkdir -p $@
|
||||
|
||||
# install the necessary android sdks
|
||||
./android-sdk/installed: app-config.sh
|
||||
./.Makefile.scripts/make--android-sdk.sh
|
||||
|
||||
# generate the AndroidManifest.xml
|
||||
./AndroidManifest.xml: app-config.sh
|
||||
./.Makefile.scripts/make--AndroidManifest.xml
|
||||
|
||||
Makefile.app-config: app-config.sh Makefile
|
||||
source app-config.sh; \
|
||||
tee $@ << MAKEFILE_APP_CONFIG
|
||||
BUILDTOOLS:=$${ANDROID_SDK_ROOT}/$$(tr ';' '/' < android-sdk/.installed.buildtools.version.current)
|
||||
ANDROID_JAR:=$${ANDROID_SDK_ROOT}/$$(tr ';' '/' < android-sdk/.installed.platforms.version.current)/android.jar
|
||||
PACKAGE:=$$(echo "$$APP_PACKAGE" | tr '.' '/')
|
||||
MAKEFILE_APP_CONFIG
|
||||
|
||||
# use whiptail textgui to make configuration (android API level, app-name, app-label etc...)
|
||||
app-config.sh:
|
||||
./.Makefile.scripts/make--app-config.sh
|
||||
|
||||
# rule to effectuate a cleanup
|
||||
clean:
|
||||
rm -rf obj/* result/*
|
||||
|
||||
# this rule's purpose is to run "by force" no matter what, doing nothing
|
||||
# as listed prerequisite to another rule it causes that rule to be made/run
|
||||
# unconditionally every time
|
||||
FORCE:
|
||||
@true
|
5
app/app-config.sh
Normal file
5
app/app-config.sh
Normal file
|
@ -0,0 +1,5 @@
|
|||
APP_NAME='2 activities'
|
||||
APP_PACKAGE='app.twoactivities'
|
||||
APP_VERSION_SDK_TARGET='33'
|
||||
APP_VERSION_SDK_MIN='30'
|
||||
APP_PERMISSIONS='<uses-permission android:name="android.permission.INTERNET"/>'
|
31
app/assets/index.2.html
Normal file
31
app/assets/index.2.html
Normal file
|
@ -0,0 +1,31 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta content="width=device-width,initial-scale=1.0" name="viewport">
|
||||
</head>
|
||||
<body style="background-color:#ffa">
|
||||
<h1>ActivityZwei - Webview</h1>
|
||||
<button id="interface" onclick="myJavaScriptInterface.doStartActivity()">start "AppActivity"</button>
|
||||
<script>
|
||||
|
||||
window.addEventListener("error",(error)=>{
|
||||
document.body.innerHTML = "<h1>error</h1><pre>" +
|
||||
error.filename +
|
||||
"\nline:" + error.lineno +
|
||||
"\n"+error.message +"</pre>";
|
||||
},false);
|
||||
|
||||
window.addEventListener("load",()=>{
|
||||
var count = localStorage.getItem("app-opened-count")|| 0;
|
||||
count++;
|
||||
localStorage.setItem("app-opened-count",count);
|
||||
var h2 = document.createElement("h2");
|
||||
h2.style.color="blue"
|
||||
h2.textContent = "Javascript works! (app was opened " + count + " times)";
|
||||
document.body.appendChild(h2);
|
||||
},false);
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
31
app/assets/index.html
Normal file
31
app/assets/index.html
Normal file
|
@ -0,0 +1,31 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta content="width=device-width,initial-scale=1.0" name="viewport">
|
||||
</head>
|
||||
<body>
|
||||
<h1>AppActivity - Webview</h1>
|
||||
<button id="interface" onclick="myJavaScriptInterface.doStartActivity()">start "AppActivity"</button>
|
||||
<script>
|
||||
|
||||
window.addEventListener("error",(error)=>{
|
||||
document.body.innerHTML = "<h1>error</h1><pre>" +
|
||||
error.filename +
|
||||
"\nline:" + error.lineno +
|
||||
"\n"+error.message +"</pre>";
|
||||
},false);
|
||||
|
||||
window.addEventListener("load",()=>{
|
||||
var count = localStorage.getItem("app-opened-count")|| 0;
|
||||
count++;
|
||||
localStorage.setItem("app-opened-count",count);
|
||||
var h2 = document.createElement("h2");
|
||||
h2.style.color="blue"
|
||||
h2.textContent = "Javascript works! (app was opened " + count + " times)";
|
||||
document.body.appendChild(h2);
|
||||
},false);
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
0
app/obj/.gitkeep
Normal file
0
app/obj/.gitkeep
Normal file
12
app/res/drawable/appicon.xml
Normal file
12
app/res/drawable/appicon.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:viewportWidth="200"
|
||||
android:viewportHeight="200"
|
||||
android:width="100dp"
|
||||
android:height="100dp">
|
||||
<path
|
||||
android:pathData="M195 50A45 45 0 0 1 105 50A45 45 0 0 1 195 50Z"
|
||||
android:fillColor="#0000ff" />
|
||||
<path
|
||||
android:pathData="M95 150A45 45 0 0 1 5 100A45 45 0 0 1 95 150Z"
|
||||
android:fillColor="#0000FF" />
|
||||
</vector>
|
75
app/src/app/twoactivities/ActivityZwei.java
Normal file
75
app/src/app/twoactivities/ActivityZwei.java
Normal file
|
@ -0,0 +1,75 @@
|
|||
package app.twoactivities;
|
||||
|
||||
|
||||
import android.provider.Settings ;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
//import android.view.MenuItem;
|
||||
import android.view.*;
|
||||
// for WebView,WebMessage,WebMessagePort,
|
||||
import android.webkit.*;
|
||||
import android.net.Uri;
|
||||
import org.json.JSONObject;
|
||||
import java.io.InputStream;
|
||||
import java.io.File;
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
|
||||
public class ActivityZwei extends Activity {
|
||||
|
||||
private static final String BASE_URI = "https://alexmahr.de";
|
||||
public String readFileFromAssets(String filename) {
|
||||
String filecontents = "";
|
||||
try {
|
||||
InputStream stream = getAssets().open(filename);
|
||||
int filesize = stream.available();
|
||||
byte[] filebuffer = new byte[filesize];
|
||||
stream.read(filebuffer);
|
||||
stream.close();
|
||||
filecontents = new String(filebuffer);
|
||||
} catch (Exception e) {
|
||||
// I <3 java exceptions
|
||||
}
|
||||
return filecontents;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
// this removes the title bar (a ~1cm big strip at the top of the app showing its name
|
||||
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
// we create the webview (at least on the android 14 that is a webview that features avif + websockets etc....)
|
||||
WebView myWebView = new WebView(this);//activityContext);
|
||||
// MyJavascriptInterface myJavaScriptInterface = new MyJavascriptInterface(this,myWebView);
|
||||
// we create a webview (there is also setwebviewclient-vs-setwebchromeclient
|
||||
WebViewClient myWebViewClient= new WebViewClient();
|
||||
myWebView.setWebViewClient(myWebViewClient);
|
||||
myWebView.setWebContentsDebuggingEnabled(true);
|
||||
// to setup settings
|
||||
WebSettings myWebSettings = myWebView.getSettings();
|
||||
myWebSettings.setBuiltInZoomControls(true);
|
||||
myWebSettings.setDisplayZoomControls(false);
|
||||
myWebSettings.setJavaScriptEnabled(true);
|
||||
myWebSettings.setDomStorageEnabled(true);
|
||||
myWebSettings.setDatabaseEnabled(true);
|
||||
myWebSettings.setDatabasePath("/data/data/" + myWebView.getContext().getPackageName() + "/databases/");
|
||||
myWebView.addJavascriptInterface(this, "myJavaScriptInterface");
|
||||
// load the html from assets file
|
||||
String html = readFileFromAssets("index.2.html");
|
||||
myWebView.loadDataWithBaseURL(BASE_URI,html, "text/html", "UTF-8",null);
|
||||
//myWebView.loadData(encodedHtml, "text/html", "base64");
|
||||
// alternatively this could be to load a website
|
||||
//myWebView.loadUrl("https://alexmahr.de/ru");
|
||||
setContentView(myWebView);
|
||||
}
|
||||
@JavascriptInterface
|
||||
public String doStartActivity() {
|
||||
Intent intent = new Intent(this, AppActivity.class);
|
||||
startActivity(intent);
|
||||
return "zwei";
|
||||
}
|
||||
}
|
77
app/src/app/twoactivities/AppActivity.java
Normal file
77
app/src/app/twoactivities/AppActivity.java
Normal file
|
@ -0,0 +1,77 @@
|
|||
package app.twoactivities;
|
||||
|
||||
import android.provider.Settings ;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
//import android.view.MenuItem;
|
||||
import android.view.*;
|
||||
// for WebView,WebMessage,WebMessagePort,
|
||||
import android.webkit.*;
|
||||
import android.net.Uri;
|
||||
import org.json.JSONObject;
|
||||
import java.io.InputStream;
|
||||
import java.io.File;
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
|
||||
public class AppActivity extends Activity {
|
||||
|
||||
|
||||
private static final String BASE_URI = "https://alexmahr.de";
|
||||
public String readFileFromAssets(String filename) {
|
||||
String filecontents = "";
|
||||
try {
|
||||
InputStream stream = getAssets().open(filename);
|
||||
int filesize = stream.available();
|
||||
byte[] filebuffer = new byte[filesize];
|
||||
stream.read(filebuffer);
|
||||
stream.close();
|
||||
filecontents = new String(filebuffer);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
// I <3 java exceptions
|
||||
}
|
||||
return filecontents;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
// this removes the title bar (a ~1cm big strip at the top of the app showing its name
|
||||
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
// we create the webview (at least on the android 14 that is a webview that features avif + websockets etc....)
|
||||
WebView myWebView = new WebView(this);//activityContext);
|
||||
// MyJavascriptInterface myJavaScriptInterface = new MyJavascriptInterface(this,myWebView);
|
||||
// we create a webview (there is also setwebviewclient-vs-setwebchromeclient
|
||||
WebViewClient myWebViewClient= new WebViewClient();
|
||||
myWebView.setWebViewClient(myWebViewClient);
|
||||
myWebView.setWebContentsDebuggingEnabled(true);
|
||||
// to setup settings
|
||||
WebSettings myWebSettings = myWebView.getSettings();
|
||||
myWebSettings.setBuiltInZoomControls(true);
|
||||
myWebSettings.setDisplayZoomControls(false);
|
||||
myWebSettings.setJavaScriptEnabled(true);
|
||||
myWebSettings.setDomStorageEnabled(true);
|
||||
myWebSettings.setDatabaseEnabled(true);
|
||||
myWebSettings.setDatabasePath("/data/data/" + myWebView.getContext().getPackageName() + "/databases/");
|
||||
myWebView.addJavascriptInterface(this, "myJavaScriptInterface");
|
||||
// load the html from assets file
|
||||
String html = readFileFromAssets("index.html");
|
||||
myWebView.loadDataWithBaseURL(BASE_URI,html, "text/html", "UTF-8",null);
|
||||
//myWebView.loadData(encodedHtml, "text/html", "base64");
|
||||
// alternatively this could be to load a website
|
||||
//myWebView.loadUrl("https://alexmahr.de/ru");
|
||||
setContentView(myWebView);
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public String doStartActivity() {
|
||||
Intent intent = new Intent(this, ActivityZwei.class);
|
||||
this.startActivity(intent);
|
||||
return "this is good";
|
||||
}
|
||||
}
|
16
app/src/app/twoactivities/R.java
Normal file
16
app/src/app/twoactivities/R.java
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*
|
||||
* This class was automatically generated by the
|
||||
* aapt tool from the resource data it found. It
|
||||
* should not be modified by hand.
|
||||
*/
|
||||
|
||||
package app.twoactivities;
|
||||
|
||||
public final class R {
|
||||
public static final class attr {
|
||||
}
|
||||
public static final class drawable {
|
||||
public static final int appicon=0x7f020000;
|
||||
}
|
||||
}
|
71
build-android-app.sh
Executable file
71
build-android-app.sh
Executable file
|
@ -0,0 +1,71 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
CONTAINERRUNTIMES='docker podman nerdctl'
|
||||
for CONTAINERRUNTIME in $CONTAINERRUNTIMES /
|
||||
do
|
||||
type $CONTAINERRUNTIME >/dev/null 2>/dev/null && break
|
||||
test "$CONTAINERRUNTIME" = / && {
|
||||
echo "install a container runtime (e.g ${CONTAINERRUNTIMES//\ /\/})" >&2
|
||||
exit 2
|
||||
}
|
||||
done
|
||||
|
||||
HASHES='md5sum cksum sha1sum base64 uuencode'
|
||||
for HASH in $HASHES /
|
||||
do
|
||||
type $HASH >/dev/null 2>/dev/null && break
|
||||
test "$HASH" = / && {
|
||||
echo "install checksum (e.g ${HASHES//\ /\/})" >&2
|
||||
exit 3
|
||||
}
|
||||
done
|
||||
|
||||
DockerfileContent(){
|
||||
cat << 'DOCKERFILEEOF'
|
||||
FROM debian:latest
|
||||
RUN apt-get update -y && apt-get install -y make openjdk-17-jdk-headless unzip zip wget curl whiptail
|
||||
ENV JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64/"
|
||||
ENV ANDROID_SDK_ROOT="/app/android-sdk"
|
||||
ENV BUILD_TOOLS_LATEST="$ANDROID_SDK_ROOT/cmdline-tools/latest"
|
||||
ENV PATH="$BUILD_TOOLS_LATEST/bin:$PATH"
|
||||
ENV LIBRARY_PATH="$LIBRARY_PATH:$BUILD_TOOLS_LATEST/lib"
|
||||
CMD ["make","--trace"]
|
||||
RUN <<EOF
|
||||
cat > /bin/makefile-bash-wrapper.sh << 'WRAPPER'
|
||||
#!/bin/bash
|
||||
printf $'\033[0;32m''#----------------------------------------\n'$'\033[0m' >&2
|
||||
bash "$@"
|
||||
printf '\n\n\n\n' >&2
|
||||
WRAPPER
|
||||
chmod u+x /bin/makefile-bash-wrapper.sh
|
||||
EOF
|
||||
DOCKERFILEEOF
|
||||
}
|
||||
|
||||
diff Dockerfile <(DockerfileContent) 2>/dev/null > /dev/null || {
|
||||
test -f Dockerfile && {
|
||||
read -p 'reset/start Dockerfile[Y/n]' YES
|
||||
test "$YES" = "n" && { echo "aborting..." >&2; exit 1; }
|
||||
}
|
||||
DockerfileContent > Dockerfile
|
||||
}
|
||||
|
||||
|
||||
IMAGE=build-android-app:"$($HASH Dockerfile | tr -cd '[a-zA-Z0-9]' | head -c 12)"
|
||||
docker image inspect "$IMAGE" >/dev/null 2>/dev/null || {
|
||||
$CONTAINERRUNTIME build --tag "$IMAGE" .
|
||||
}
|
||||
#(optional) tag the latest image build
|
||||
docker tag $IMAGE build-android-app:latest
|
||||
|
||||
time $CONTAINERRUNTIME run --name build-android-app-$(date +%F--%H-%M-%S) \
|
||||
--workdir=/app \
|
||||
--env LINES=10 \
|
||||
--env COLUMNS=$COLUMNS \
|
||||
--hostname build-android-app \
|
||||
--volume ./app:/app \
|
||||
-it \
|
||||
--rm \
|
||||
"$IMAGE" "$@"
|
Loading…
Add table
Reference in a new issue