Configure Play Store distribution
ProGuard / R8 Configuration
When compiling release APKs or Android App Bundles (AAB) with code shrinking enabled (R8 / ProGuard), add the necessary keep rules to prevent obfuscation or stripping of MobbScan SDK interfaces and models.
Add the following rules to your proguard-rules.pro file. Keep the existing rules for your application and its dependencies unless a minified release build verifies they are no longer needed.
Standard ProGuard rules
-keepattributes *Annotation*, Exceptions, Deprecated, Signature, MethodParameters, InnerClasses
-keepparameternames
## Rules for EventBus (2.4.0)
-keepattributes *Annotation*
-keepclassmembers class * {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
<init>(java.lang.Throwable);
}
## Rules for Tesseract
-keep class com.googlecode.tesseract.android.TessBaseAPI {
protected void onProgressValues(int, int, int, int, int, int, int, int, int);
}
## Rules for MobbScan
-dontwarn com.mobbeel.**
-dontwarn okio.mobbeel.**
-dontwarn org.opencv.**
-dontnote org.apache.http.**
-keep class com.mobbeel.** { *; }
## Rules for Gson
-dontwarn sun.misc.**
-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
# Prevent ProGuard from stripping interface information from Gson adapters
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
## MobbCommons rules
-dontwarn mobbeel.http.**
-dontwarn okio.mobbeel.**
-dontwarn javax.annotation.**
-dontwarn org.conscrypt.**
# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class mobbeel.http.internal.publicsuffix.PublicSuffixDatabase
## SpongyCastle rules
-keep class org.spongycastle.crypto.* {*;}
-keep class org.spongycastle.crypto.agreement.** {*;}
-keep class org.spongycastle.crypto.digests.* {*;}
-keep class org.spongycastle.crypto.ec.* {*;}
-keep class org.spongycastle.crypto.encodings.* {*;}
-keep class org.spongycastle.crypto.engines.* {*;}
-keep class org.spongycastle.crypto.macs.* {*;}
-keep class org.spongycastle.crypto.modes.* {*;}
-keep class org.spongycastle.crypto.paddings.* {*;}
-keep class org.spongycastle.crypto.params.* {*;}
-keep class org.spongycastle.crypto.prng.* {*;}
-keep class org.spongycastle.crypto.signers.* {*;}
-keep class org.spongycastle.jcajce.provider.** { *; }
-keep class org.spongycastle.jcajce.provider.digest.** {*;}
-keep class org.spongycastle.jcajce.provider.keystore.** {*;}
-keep class org.spongycastle.jcajce.provider.symmetric.** {*;}
-keep class org.spongycastle.jcajce.spec.* {*;}
-keep class org.spongycastle.jce.** {*;}
## BouncyCastle rules
-keep class org.bouncycastle.crypto.* {*;}
-keep class org.bouncycastle.crypto.agreement.** {*;}
-keep class org.bouncycastle.crypto.digests.* {*;}
-keep class org.bouncycastle.crypto.ec.* {*;}
-keep class org.bouncycastle.crypto.encodings.* {*;}
-keep class org.bouncycastle.crypto.engines.* {*;}
-keep class org.bouncycastle.crypto.macs.* {*;}
-keep class org.bouncycastle.crypto.modes.* {*;}
-keep class org.bouncycastle.crypto.paddings.* {*;}
-keep class org.bouncycastle.crypto.params.* {*;}
-keep class org.bouncycastle.crypto.prng.* {*;}
-keep class org.bouncycastle.crypto.signers.* {*;}
-keep class org.bouncycastle.jcajce.provider.** { *; }
-keep class org.bouncycastle.jcajce.provider.digest.** {*;}
-keep class org.bouncycastle.jcajce.provider.keystore.** {*;}
-keep class org.bouncycastle.jcajce.provider.symmetric.** {*;}
-keep class org.bouncycastle.jcajce.spec.* {*;}
-keep class org.bouncycastle.jce.** {*;}
-dontwarn javax.naming.**
-keep class net.sf.scuba.smartcards.** { public *; }
Video module ProGuard rules
If you integrate the mobbscan-video-android module, also include:
# Twilio Video rules
-keep class tvi.webrtc.** { *; }
-keep class org.webrtc.** { *; }
-keep class com.twilio.video.** { *; }
-keepattributes InnerClasses
NFC module ProGuard rules
If you integrate the mobbscan-nfc-extension-android module, also include:
## NFC rules
-dontwarn de.tsenger.androsmex.**
-dontwarn jj2000.**
-dontwarn java.awt.**
-dontwarn com.fasterxml.jackson.**
-dontwarn javax.**
Architectures and ABI Filters
MobbScan Android SDK binaries are aligned for 16 KB page sizes across all four standard Android architectures. Mobbeel-built native libraries use NDK r29; the Twilio Video 7.10.0 native library is also verified for 16 KB alignment:
arm64-v8aarmeabi-v7ax86x86_64
Reducing APK size with ABI filters
If your app targets mobile devices exclusively and you want to reduce APK size, you can filter for ARM architectures in your build.gradle:
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
Or configure per-buildType / per-flavor filters:
android {
buildTypes {
debug {
debuggable true
minifyEnabled false
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
}
