- 27 Feb 2025
- 8 Minutes à lire
- Impression
- SombreLumière
- PDF
Mobile Application Shielding for Android Version 7.2.0 (February 2025)
- Mis à jour le 27 Feb 2025
- 8 Minutes à lire
- Impression
- SombreLumière
- PDF
Introduction
Welcome to Mobile Application Shielding for Android 7.2.0!
The OneSpan Customer Portal only accepts connections via TLS 1.2 or later. Earlier versions are no longer supported because all versions of the TLS protocol prior to 1.2 have been deprecated.
This is a release of Mobile Application Shielding, which contains enhancements and other product updates. For more information about new features and fixed defects, refer to the respective chapters in this document. For information about configuring and using Mobile Application Shielding, see the Mobile Application Shielding Integration Guide.
To maintain protection against the latest mobile threats, ensure to update Mobile Application Shielding to the latest version!
Supported platform versions
App Shielding version 7.2.0 was successfully tested with Android 15.
Android 5.0 (API level 21) – Android 15 (API level 35).
Shielding Tool:
Windows 10: 64-bit Java 17
Mac OSX (10.9+)
Ubuntu Linux 20.04 LTS or 22.04 LTS
Android platform updates
The Android minimum supported version is 5.0 (API level 21). This version of App Shielding supports Android 15.
If you want your protected app to run on Android 15, you must upgrade to App Shielding 6.6.0 or later.
Beginning with Android 15, Android supports devices that are configured to use a page size of 16 KB (i.e., 16 KB devices). App Shielding has been updated to work on these 16 KB devices. However, if your app uses any native libraries, you must ensure that these libraries are ready for 16 KB page sizes. For more information, refer to the Android Developer documentation.
As of March 1, 2025, App Shielding for Android version 5.7.1.98641 and earlier are no longer supported. For more information, refer to the OneSpan Mobile Portal or the OneSpan Customer Portal.
Deprecations
Platform minimum supported versions
Android 4.4 (API levels 19 and 20) are no longer supported by App Shielding. The new minimum supported version is Android Lollipop 5.0 (API level 21).
Android Native Development Kit (NDK)
Google has announced that Android Native Development Kit (NDK) (r26) will no longer support KitKat (API levels 19 and 20). The minimum version supported by the NDK for r26 will be Lollipop (API level 21).
App Shielding switches to NDK r26 after its release as LTS version.
Deprecated API: ShieldSDK-secure-edit-text
The ShieldSDK-secure-edit-text API has been marked as deprecated. It is no longer maintained and is considered obsolete. It will be removed in an upcoming release.
Deprecated configuration option removed: Allow work profile and device vendor virtual spaces
The Allow work profile and device vendor virtual spaces configuration option is now deprecated and has been removed. It has been replaced with the Check Private Space option.
For more information, see Configuration of App Shielding for Android apps.
New features and other updates
PIPL Support without consent activity
The App Shielding feature to comply with China’s Personal Information Protection Law, PIPL, has been extended. For applications with a single-activity architecture, the consent activity can be disabled while integrators are still able to notify App Shielding of granted consent through the SDK. Enable the PIPL Support without Consent Activity configuration option to use this feature extension.
For more information about complying with PIPL, see Integrate App Shielding for app distribution in China.
Support for APK signature scheme v3 and v3.1
App Shielding now supports APK signature scheme v3 and v3.1. APKs targeting a minSdk of Android 9 (API level 28) or later are signed with a v3 signing block. When Android App Bundles (AABs) are uploaded to Google Play, they are split into multiple APKs. Among these, at least one APK with a minSdk of Android 9 or later is generated and signed with a v3 signing block instead of a v2 signing block.
Fixes and other changes
SHAND-3789: Improved Java name obfuscation
Some Android libraries use reflection to find the implementation of an interface by taking the interface name and appending the string "_Impl". The Shielding Tool can now correctly obfuscate those class and interface names by first randomly renaming the interface name and then setting the class name to a matching name. For example, MyInterface and MyInterface_Impl might be obfuscated to a and a_Impl.
SHAND-4518 (Support Case ESC-43): Fix parsing byte code for applications with a minSdk of 26 or newer
An issue existed when the Shielding Tool needed to parse a specific byte code instruction that may be in an app that was compiled for a minSdk of 26 or newer. The Shielding Tool previously exited with an error like the following:
ERROR: Error: java.lang.RuntimeException: Unable to parse line 40 from classes.dex/com.example.Test:
invoke-custom {p0}, call_site_0("run", ...)@...Ljava/lang/invoke/CallSite;
...
Caused by: java.lang.IllegalArgumentException: Unknown primitive value type ()V
```
Status: This issue has been fixed.
SHAND-4533: Improved unblocking screen readers on slow devices
Some devices are rather slow on enabling accessibility services (e.g., Talkback). If a trusted screen reader is enabled while a protected application is running, and enabling that screen reader takes a long time, App Shielding failed to see the enabled trusted screen reader and thus did not unblock the application for screen reader access.
Status: The initial fix for this, introduced in App Shielding version 7.0.1, has been refined to address rare edge cases.
SHAND-4618: Screen Mirroring Data contains the display name
The ScreenMirroringData callback data in the ExtendedObserver interface adds an option to collect the display name of the first blocked screen. Use the getScreenMirroringDisplayName() method to retrieve the name. The sample included in the product package has been extended accordingly.
SHAND-4633: Improved rooting detection
App Shielding can now detect more cases of rooted devices.
SHAND-4659: Improved emulated input detection
The detection of emulated input has been enhanced with improved scoring algorithms for specific Huawei, Oppo, and Realme devices.
SHAND-4682: Fixed Shielding Tool parsing byte code
Newer Java/Kotlin compilers now compile some Java code into byte code instructions like invoke-XX/range {} with an empty register range, instead of using invoke-XX. This caused the Shielding Tool to exit with an error message like the following:
ERROR: Error: java.lang.RuntimeException: Unable to parse line 154 from classes.dex/com.example.Test: invoke-static/range {}, Lcom/invoke/TestCase;->aMethod()I
java.lang.Error: java.lang.RuntimeException: java.lang.RuntimeException: Unable to parse line 154 from classes.dex/com.example.Test: invoke-static/range {}, Lcom/invoke/TestCase;->aMethod()I
at ...
Status: This issue has been fixed.
Fixed ANR (Android Not Responding) issues and unexpected terminations
Unexpected App Shielding termination on some Android 5.x devices
On some Android 5.x devices, App Shielding exited with an invalid option error. This was caused by App Shielding passing a flag to a libc function that was unknown to the old Linux Kernel of that Android version.
Status: This issue has been fixed.
Rare unexpected termination in libshield caused by race condition
A race condition in the libshield activity lifecycle listener could potentially cause an unexpected termination.
Status: This issue has been fixed.
SHAND-4517: Rare unexpected App Shielding termination on spuriously awakening
App Shielding terminated unexpectedly when being awoken spuriously.
Status: This issue has been fixed.
SHAND-4529: NullPointerException when blocking untrusted screen readers
A NullPointerException related to AccessibilityNodeInfo occurred on some Android versions while App Shielding blocked an untrusted screen reader.
Status: This issue has been fixed.
SHAND-4544 (Support Case ESC-52): Leaking Intent Receiver
An Intent Receiver was leaking. The error may have been observed in an adb log message like the following:
```
... 1234 1234 E ActivityThread: Activity com.example.MyActivity has leaked IntentReceiver ab.C@12345678 that was originally registered here. Are you missing a call to unregisterReceiver()?
```
Status: This issue has been fixed.
SHAND-4549: Stack overflow terminates unexpectedly when executing onTransact
An unexpected stack overflow termination on executing onTransact was observed on several Huawei devices when running a shielded application
Status: This issue has been fixed.
SHAND-4614: ANR observed with LeakCanary
LeakCanary is a memory leak detection library for Android. An issue in the LeakCanary tool triggers an ANR in the Application-Lifecycle-Listener's onPause method.
Status: This issue has been fixed. App Shielding was modified to move resource allocation to some other time, which both improves runtime performance and avoids the ANR with LeakCanary.
Known limitations
The limitations described here have not yet been solved for the current Mobile Application Shielding version. Possible workarounds are described where available.
Bypassing App Shielding protection in Cordova-based applications
Description: Because of the nature of pure Javascript frameworks such as Cordova, the effectiveness of the push and pull bindings of App Shielding is affected. As a result, it might be possible to extract all Javascript files from a shielded application and build a new Cordova-based application with the extracted Javascript files. That new application will behave identical to the original one but has two major differences:
It is not longer protected with App Shielding.
It is signed with a different developer certificate.
Because this new application is signed with a different developer certificate, it is recognized by the stores or every device as a completely different and new application in comparison to the original shielded application. It cannot be avoided that a new application like this is built that looks and behaves similar to the original application.
OneSpan risk assessment: Threat actors will need to make heavy use of targeted phishing attacks to convince users of the original application to install the rogue version. For attackers, however, it is much easier to use existing malware frameworks that mimic hundreds of login screens in one single piece of malware. In addition, the existence of any rogue versions of the application does not affect the security features of the original shielded application. Everyone who is using the genuine, shielded application is protected with all the features of App Shielding, including all security measures of the original application. Therefore, we consider this issue to be of low risk.
NFC payment failure in shielded apps with Thales Gemalto SDK
Description: When using the shielded version of the app, NFC payments fail. This is caused by a compatibility issue with the Thales Gemalto TSH Pay SDK which also provides debugger detection. The SDK incorrectly flags the App Shielding debugger detection as a native debugger.
Solution: Allowlisting. For implementations integrating both the Thales Gemalto SDK and App Shielding, debuggers coming from the SDK's own debugging processes and sub-processes should be added to an allowlist within theThales Gemalto SDK.
It is essential to not only add the processes to the allowlist but also their sub-processes. Otherwise, the SDK will still handle App Shielding as a native debugger!
Magisk and root hider tools on new Android versions
Root hider tools such as Magisk Hide are designed to hide the fact that the device is compromised (rooted). Android has been increasingly restricted in what can be inspected and observed of the system from inside an app. This means that a rooted system with a root hider tool can be hard to detect due to missing privileges.
On Android 8+, App Shielding may not able to reliably detect a rooted device with Magisk Hide depending on the version of these tools.
Android App Bundles
The OneSpan Customer Portal support for Android App Bundles does not yet include instant-enabled app bundles.