The Android Manifest File

When you build an Android app by using Quantum Visualizer, an AndroidManifest.xml file is created in the app's corresponding dist folder. The file is located at WorkspaceName>/temp/<AppName>/build/luaandroid/dist. The manifest file provides essential information about your app to the Android operating system, and Google Play store.

The Android manifest file helps to declare the permissions that an app must have to access data from other apps. The Android manifest file also specifies the app’s package name that helps the Android SDK while building the app. The Android manifest file provides information such as activities, services, broadcast receivers, and content providers of an android application.

With Quantum Visualizer, you can define the following options in the AndroidManifest.xml file:

  • Supported screen sizes
  • Supported SDK versions: minimum, target, and maximum
  • Ability to send Push Notifications
  • Various permissions for the application

To modify the Android Manifest.xml file from Visualizer, follow these steps:

  1. From the Project Explorer, click Project Settings. The Project Settings window appears.
  2. Click the Native tab.
  3. Click the Android sub-tab, and then scroll down to the Manifest Properties & Gradle Entries section.
  4. Configure the Permissions, Tags, and Deeplink URL scheme tabs. More information on how to

to configure manifest properties such as Permissions, Tags,and Deeplink URL in the Android Manifest file. Here is an example of a basic Android Manifest file generated with default permissions.

Permissions

An app must have certain permissions to access data from the other apps. By default, Quantum Visualizer enables and disables certain permissions in the AndroidManifest.xml file. When you build an application, an AndroidManifest.xml file is automatically generated for the app. This manifest file will contain permissions based on how you have configured those permissions. If you have not specified any permissions explicitly, default permissions would apply.

For more information on the AndroidManifest.xml file, refer App Manifest on the Android Developer site.

The following permissions are set to true and added by default:

  • ACCESS_NETWORK_STATE
  • INTERNET
  • READ_PHONE_STATE

These permissions are set to false by default. You can add the permissions according to the requirements.

ACCESS_COARSE_LOCATION ACCESS_FINE_LOCATION ACCESS_LOCATION_EXTRA_COMMANDS
ACCESS_MOCK_LOCATION ACCESS_SURFACE_FLINGER ACCESS_WIFI_STATE
ACCOUNT_MANAGER AUTHENTICATE_ACCOUNTS BATTERY_STATS
BIND_APPWIDGET BIND_DEVICE_ADMIN BIND_INPUT_METHOD
BIND_REMOTEVIEWS BIND_WALLPAPER BLUETOOTH
BLUETOOTH_ADMIN BRICK BROADCAST_PACKAGE_REMOVED
BROADCAST_STICKY BROADCAST_WAP_PUSH CALL_PHONE
CALL_PRIVILEGED CAMERA CHANGE_COMPONENT_ENABLED_STATE
CHANGE_CONFIGURATION CHANGE_NETWORK_STATE CHANGE_WIFI_MULTICAST_STATE
CHANGE_WIFI_STATE CLEAR_APP_CACHE CLEAR_APP_USER_DATA
CONTROL_LOCATION_UPDATES DELETE_CACHE_FILES DELETE_PACKAGES
DEVICE_POWER DIAGNOSTIC DISABLE_KEYGUARD
DUMP EXPAND_STATUS_BAR FACTORY_TEST
FLASHLIGHT FORCE_BACK GET_ACCOUNTS
GET_PACKAGE_SIZE GET_TASKS GLOBAL_SEARCH
HARDWARE_TEST INJECT_EVENTS INSTALL_LOCATION_PROVIDER
INSTALL_PACKAGES INTERNAL_SYSTEM_WINDOW KILL_BACKGROUND_PROCESSES
MANAGE_ACCOUNTS MANAGE_APP_TOKENS MASTER_CLEAR
MODIFY_AUDIO_SETTINGS MODIFY_PHONE_STATE MOUNT_FORMAT_FILESYSTEMS
MOUNT_UNMOUNT_FILESYSTEMS NFC PERSISTENT_ACTIVITY
PROCESS_OUTGOING_CALLS READ_CALENDAR READ_CONTACTS
READ_FRAME_BUFFER READ_HISTORY_BOOKMARKS READ_INPUT_STATE
READ_LOGS READ_SMS READ_SYNC_SETTINGS
READ_SYNC_STATS REBOOT RECEIVE_BOOT_COMPLETED
RECEIVE_MMS RECEIVE_SMS RECEIVE_WAP_PUSH
RECORD_AUDIO REORDER_TASKS RESTART_PACKAGES
SEND_SMS SET_ACTIVITY_WATCHER SET_ALARM
SET_ALWAYS_FINISH SET_ANIMATION_SCALE SET_DEBUG_APP
SET_ORIENTATION SET_PREFERRED_APPLICATIONS SET_PROCESS_LIMIT
SET_TIME SET_TIME_ZONE SET_WALLPAPER
SET_WALLPAPER_HINTS SIGNAL_PERSISTENT_PROCESSES STATUS_BAR
SUBSCRIBED_FEEDS_READ SUBSCRIBED_FEEDS_WRITE SYSTEM_ALERT_WINDOW
UPDATE_DEVICE_STATS USE_CREDENTIALS USE_SIP
VIBRATE WAKE_LOCK WRITE_APN_SETTINGS
WRITE_CALENDAR WRITE_CONTACTS WRITE_EXTERNAL_STORAGE
WRITE_GSERVICES WRITE_HISTORY_BOOKMARKS WRITE_SECURE_SETTINGS
WRITE_SETTINGS WRITE_SMS WRITE_SYNC_SETTINGS

 

Set Android Manifest Permissions

You can modify the permissions in the AndroidManifest.xml file based on the requirements of the application.

To set the permissions in the Android Manifest file, follow these steps:

  1. In Quantum Visualizer, from the Project Explorer, click Project Settings. The Project Settings window appears.
  2. Click the Native tab.
  3. Click the Android sub-tab and then scroll down to the Manifest Properties & Gradle Entries section.
  4. To enable permissions, select the permissions from the left pane and click Add >.
    For example, If you need to save images to an external storage device such as USB drive or SD card, add the WRITE_EXTERNAL_STORAGE setting.
  5. NOTE: To select multiple permissions, hold the Ctrl key and click the permissions. To select continuously listed permissions, hold the Shift key and click the permissions.

  6. To disable permissions, select the permissions from the right pane and click < Remove.
  7. Click Finish.
    When you build the app, Quantum Visualizer generates the manifest file with the permissions that you specified.

    • If the app lists normal permissions in its manifest (permissions that don't pose risk to the user's privacy or the device's operation), the system automatically grants those permissions to the app.
    • If the app lists dangerous permissions in its manifest (permissions that could potentially affect the user's privacy or the device's normal operation), the app must explicitly request those permissions.

For more information on requesting runtime permissions, refer Runtime Permissions.

For more information on the list of dangerous permissions, refer Dangerous Permissions List.

Tags

Apart from the permissions, you can also configure tags such as application and activity. Following is a list of the manifest tags that can be configured from Visualizer:

  • Child Tag entries under <manifest> tag
  • Child Tag entries under <application> tag

  • Application Tag Attributes (ex: android:name=”string”)

  • Manifest Tag Attributes

  • Child Tag Entries under Main Launcher <activity> tag

  • Main Launcher <activity> Tag Attributes

For example, manifest attributes can be modified in the Android manifest file as follows.

<manifest xmlns: android = "http://schemas.android.com/apk/res/android"
xmlns: tools = "http://schemas.android.com/tools" package = "com.orgname.Sample" android: versionCode = "1" android: versionName = "1.0.0" //Manifest attributes>

For more information on Android Manifest tags and their attributes, refer Manifest Elements

Deeplink URL Scheme

You can use the URL Scheme tab for Deeplinking. The values for Scheme/ port/ path/host/pathprefix/path pattern specified under the Deeplink URL tab can be used to deep-link to a particular URL directly.

For example, if a scheme is defined as https and a host is defined as www.example.com, the following entry will be added to the Android manifest.xml file under intent-filter tag of default activity.

<intent-filter> <data android: scheme = "https"
android: host = "www.example.com"/> </intent-filter>

Android Manifest Example

The following is a basic AndroidManifest.xml file that is generated with default permissions.

<? xml version = "1.0"
encoding = "utf-8" ?>
//Manifest attributes

< manifest
xmlns: android = "http://schemas.android.com/apk/res/android"
xmlns: tools = "http://schemas.android.com/tools"
package = "com.orgname.Sample"
android: versionCode = "1"
android: versionName = "1.0.0" >
//Application attributes are added here  

< application
android: name = "com.konylabs.android.KonyApplication"
android: icon = "@drawable/Sample_icon"
android: label = "@string/app_name"
tools: remove = "supportsRtl"
tools: replace = "icon" >
//Activity attributes are added here  

< activity
android: name = ".Sample"
android: configChanges = "locale|keyboardHidden|orientation|screenSize|screenLayout"
android: label = "@string/app_name"
android: launchMode = "singleTask"
android: screenOrientation = "sensor"
android: theme = "@style/Theme.AppCompat.NoActionBar"
android: windowSoftInputMode = "adjustResize" > < intent - filter > < action android: name = "android.intent.action.MAIN" / > < category android: name = "android.intent.category.LAUNCHER" / > < /intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" / > < category android: name = "android.intent.category.DEFAULT" / > < /intent-filter>
            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable
" /> //Deeplink text is added here
//Add Child Tag Entries under Main Launcher here if required 
    
        </activity>
        <meta-data
            android:name="
android.app.default_searchable "
            android:value=".KonyMain " />
        <provider
            android:name="
com.orgname.Sample.SampleSearchSuggestionProvider "
            android:authorities="
com.orgname.Sample.SampleSuggestionProvider " />
    </application>
    //supported screens
    <supports-screens
        android:anyDensity="
true "
        android:largeScreens="
true "
        android:normalScreens="
true "
        android:smallScreens="
true "
        android:xlargeScreens="
true " />
	//These are the default permissions set as true
    // Add permissions here
    
    <uses-permission android:name="
android.permission.READ_PHONE_STATE " />
    <uses-permission android:name="
android.permission.ACCESS_NETWORK_STATE " />
    <uses-permission android:name="
android.permission.INTERNET " />
	
	//Add the Manifest child tags here if required


</manifest>