Known wrapper limitations

The following sections summarize the limitations of app capabilities of both the Generation 1 and 2 wrappers, and the limitations of only one wrapper or the other.

Generation 1 and Generation 2 wrapper limitations

Apps wrapped with either the Generation 1 or Generation 2 wrapper have limitations regarding app capabilities.

The following limited app capabilities have been identified:

  • Accessing Google Play from the AppConnect app is not supported.

  • Google Cloud Messaging XMPP Mode is not supported, and the deprecated GCM APIs (com.google.android.gcm) are not supported.

    See also Google Cloud Messaging considerations.

  • Embedded SQLite databases are not supported.

    If you embed an SQLite database in your app as an asset or raw resource, the app cannot be wrapped. Similarly, you cannot download an SQLite database from over the network and use it in your app. However, programmatically creating SQLite databases is supported.

  • The Secure Apps Manager (SAM) displays a list of Secure Apps. When tapping and holding one of the app icons, a list of shortcuts displays. These shortcuts were declared in the wrapped app's manifest file.
  • Hidden APIs are not supported. Using hidden APIs can cause undefined behavior in your app, including possible data leakage.

  • Android widgets are not supported.

  • android.security.KeyChain APIs are not supported.

  • Launcher icons must be in RGB format.

  • Launcher icons must be square.

  • Android Device Administration APIs are not supported.

  • Some non-standard libraries are not supported with AppTunnel with HTTP/S tunneling.

    See AppTunnel with HTTP/S tunneling.

  • java.util.jar.JarFile is not supported.

  • java.net.JarURLConnection is not supported.

  • Using SQLCipher and Android SQLite databases at the same time is not supported.

    Developers should move all databases to SQLCipher or Android SQLite.

  • Creating documents using the DocumentsProvider action android.intent.action.CREATE_DOCUMENT is not supported.

  • Installing other apps is not supported.

  • Using multiple JAR files using the Android Support Library is not supported.

  • The DexClassLoader class is not supported.

  • The deprecated contacts authority (android.provider.Contacts) is not supported.

    Only the newer android.provider.ContactsContract is supported.

  • Using packages starting with an upper case character is not supported.

  • Access to content://media/ is not supported.

    As a result, camera access in apps is not supported using the Cordova APIs.

  • If an app reads and writes application directories on external storage, the
    [READ/WRITE]_EXTERNAL_STORAGE permission must be specified in the Android manifest.

  • URIs are rewritten in WebView objects, which potentially impacts Content-Security-Policies:

    • File:// URIs are rewritten to allow access to encrypted files. For example, the URI file://someFileName is rewritten as content://com.forgepond.0.<pkg_name>/<data>.

    • Content:// URIs are rewritten to restrict access to apps within the container. For example, the URI content://foo/bar is rewritten as content://forgepond.foo/bar.

  • PrintManager APIs are not supported.

  • Google Analytics APIs are not supported.

  • Kiosk mode (screen pinning) is not supported.

  • Wrapped Cordova apps cannot read from the photo gallery using com.synconset.MultiImageChooserActivity or com.synconset.ImagePicker because they do not create an ACTION_GET_CONTENT intent. Ensure Cordova plugins use ACTION_GET_CONTENT intent for image selection.

  • Using JobIntentService and manifest permission "android.permission.BIND_JOB_SERVICE" is not supported unless you add the following code to Proguard:

       -keep class android.support.v4.app.JobIntentService {
    	*; 
        } 
  • When a wrapped app attempts to retrieve a file from external storage using an Intent with the action ACTION_PICK, only content in the Gallery app with types image/ or video/ are presented to the user to choose from.

  • Wrapping apps that load unwrapped Java code is not supported. Although wrapping the app succeeds, the app will fail when it runs.

  • Starting from the Android Gradle tool plugin version 4.2+, the Android Asset Packaging Tool (AAPT2) resource compiler was replaced with Java Virtual Machine (JVM) resource compiler. All resource XML files now have obfuscated names and paths. For more information, see https://developer.android.com/studio/releases/gradle-plugin#resource-compiler.

  • In AppConnect for Android 9.3.0.0, Ivanti recommends avoiding using the Android Gradle plugin version 4.2. The reason is starting from 'com.android.tools.build:gradle:4.2.0' plugin, (for release builds), the Android build tools add a new stage that crunches PNG files, obfuscates filenames of resources and links obfuscated names into resources.arsc file. The workaround for this is to use the Android Gradle plugin version 4.1.3 or below.

    For more information, see https://developer.android.com/studio/releases/gradle-plugin#behavior_changes.

Generation 1 wrapper limitations

Apps wrapped with the Generation 1 wrapper have limitations regarding app capabilities.

The following limited app capability has been identified:

  • AppTunnel with TCP tunneling is not supported.

Generation 2 wrapper limitations

Apps wrapped with the Generation 2 wrapper have limitations regarding app capabilities.

  • Upgrading a Generation 1 wrapped app to a Generation 2 wrapped version of the app is not supported.

  • Creating multiple processes is not supported.

  • Calling exec() via native libraries are not supported.

    Java's Runtime.exec() is supported, with some limitations as described in Generation 2 Wrapper support for commonly used app capabilities.

  • AppTunnel with TCP tunneling is not supported for apps that use OOB (Out-of-band messaging) and TCP urgent packets.
  • Wi-Fi proxies are not supported with AppTunnel with TCP tunneling.
  • Calling mmap() to map private pages (the MAP_PRIVATE flag) is not supported.
  • Calling mremap() with the MREMAP_FIXED flag is not supported on file descriptors.
  • The DocumentsProvider API functionality is not supported. However, the app can be wrapped.
  • Although Generation 2 wrapping supports wrapping apps that load native libraries, it does not support loading native libraries by any means other than system calls such as System.load, System.loadLibrary, or dlopen().