In native Android application, I have this release build crash, related to the SalesForce Marketing cloud SDK implementation:
Fatal Exception: java.lang.IllegalAccessError: Method 'boolean com.salesforce.marketingcloud.a.a$a.a(com.salesforce.marketingcloud.f.j)' is inaccessible to class 'com.salesforce.marketingcloud.i$d' (declaration of 'com.salesforce.marketingcloud.i$d' appears in /data/app/somepackage-1/base.apk:classes2.dex)
at com.salesforce.marketingcloud.a.b.b(b.java)
at com.salesforce.marketingcloud.a.b.c(b.java)
at com.salesforce.marketingcloud.registration.e.b(e.java)
at com.salesforce.marketingcloud.registration.e.(Unknown Source)
at com.salesforce.marketingcloud.registration.d.b(d.java)
at com.salesforce.marketingcloud.registration.d.b(d.java)
at com.salesforce.marketingcloud.MarketingCloudSdk.d(MarketingCloudSdk.java)
at com.salesforce.marketingcloud.MarketingCloudSdk.getInstance(MarketingCloudSdk.java)
at com.salesforce.marketingcloud.MarketingCloudSdk$1.run(MarketingCloudSdk.java)
at java.lang.Thread.run(Thread.java:761)
which I suppose it's coming from the proguard rules in my project, because when I switch OFF proguard the crash doesn't appear any more.
I am using SF SDK marketing cloud ver. 6.2.2
Any recommendation for the right SF SDK proguard rules are appreciated.
Thanks in advance
Update:
The app crashes right after I run
MarketingCloudSdk.init(application, marketingCloudConfiguration)
My build configuration looks like this:
val marketingCloudAppId = "some_app_id"
val marketingAccessToken = "some_token"
val senderId = "firebase_sender_id"
val serverUrl = "some_url"
val mid = "1234567"
val notificationCustomisationOptions = createNotificationCustomisationOptions()
val marketingCloudConfiguration = MarketingCloudConfig.builder()
.setApplicationId(marketingCloudAppId)
.setAccessToken(marketingAccessToken)
.setSenderId(senderId)
.setMarketingCloudServerUrl(serverUrl)
.setMid(mid)
.setNotificationCustomizationOptions(notificationCustomisationOptions)
.setAnalyticsEnabled(true)
.setPiAnalyticsEnabled(true)
.build(application)
The proguard looks like this:
-keep class com.comscore.** { *; }
-dontwarn com.comscore.**
-keep public class com.google.android.gms.ads.** { public *; }
-keep public class com.google.ads.** { public *; }
-keepattributes *Annotation*
-keepclassmembers class ** {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
<init>(java.lang.Throwable);
}
-keep class androidx.appcompat.widget.SearchView { *; }
-keepclassmembers class com.ebay.app.common.fragments.ZoomImageViewSwipeNavFragment {
public void onMessageSuccess(**);
public void onParallelMessageSuccess(**);
}
-keep public class com.ebay.app.common.push.fcm.EcgFcmListenerService { *; }
-keep public class com.ebay.app.common.push.fcm.EcgFcmServerMessages { *; }
-keep public class com.ebay.app.common.push.fcm.EcgFcmReceiver { *; }
-keepnames class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient <fields>;
!private <fields>;
!private <methods>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
-keep interface org.simpleframework.xml.core.Label { public *;}
-keep class * implements org.simpleframework.xml.core.Label { public *;}
-keep interface org.simpleframework.xml.core.Parameter { public *;}
-keep class * implements org.simpleframework.xml.core.Parameter { public *;}
-keep interface org.simpleframework.xml.core.Extractor { public *;}
-keep class * implements org.simpleframework.xml.core.Extractor { public *;}
-keep interface org.simpleframework.xml.convert.Convert { public *;}
-keep class * implements org.simpleframework.xml.convert.Converter { public *;}
-keepattributes *Annotation*
-keepattributes InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,EnclosingMethod,Attribute,Element,Root
-keepclassmembers class * {
@org.simpleframework.xml.* *;
}
-keep class com.tickaroo.tikxml.** { *; }
-keep @com.tickaroo.tikxml.annotation.Xml public class *
-keep class **$$TypeAdapter { *; }
-keepclasseswithmembernames class * {
@com.tickaroo.tikxml.* <fields>;
}
-keepclasseswithmembernames class * {
@com.tickaroo.tikxml.* <methods>;
}
-dontwarn com.google.android.gms.**
-keep public class com.google.android.gms.**
-dontwarn com.apptentive.android.sdk.**
-keep class com.apptentive.android.sdk.** { *; }
-keep class sun.misc.Unsafe { *; }
-keep class com.ebay.app.common.categories.models.** { *; }
-keep class com.ebay.app.common.location.models.** { *; }
-keep class com.ebay.app.common.models.** { *; }
-keep class com.ebay.app.common.models.ad.** { *; }
-keep class com.ebay.app.common.models.ad.extendedInfo.** { *; }
-keep class com.ebay.app.common.models.ad.raw.** { *; }
-keep class com.ebay.app.common.models.raw.** { *; }
-keep class com.ebay.app.contactPoster.models.** { *; }
-keep class com.ebay.app.messageBox.models.** { *; }
-keep class com.ebay.app.search.models.** { *; }
-keep class com.ebay.app.userAccount.register.models.** { *; }
-keep class com.ebay.app.userAccount.models.** { *; }
-keep class com.ebay.app.contactPoster.models.raw.** { *; }
-keep class com.ebay.app.common.analytics.ebayTracking.** { *; }
-keep class com.ebay.app.featurePurchase.models.raw.** { *; }
-keep class com.ebay.app.featurePurchase.models.worldPay.raw.** { *; }
-keep class com.ebay.app.featurePurchase.models.** { *; }
-keep class com.ebay.app.recommendations.** { *; }
-keep class com.ebay.app.common.networking.papiDataModels.** { *; }
-keep class com.ebay.app.externalPartner.models.treebay.** { *; }
-keep class com.ebay.app.flagAds.models.raw.** { *; }
-keep class com.ebay.app.search.map.models.** { *; }
-keep class com.ebay.smaato.networking.model.** { *; }
-keep class com.bumptech.glide.integration.okhttp3.OkHttpGlideModule { *; }
-keep class com.ebay.app.common.glide.EcgGlideModule { *; }
-keep class com.adjust.sdk.** { *; }
-keep class com.google.android.gms.common.** { *; }
-keep class com.google.android.gms.ads.identifier.** { *; }
-dontwarn rx.**
-dontwarn retrofit2.**
-dontwarn okio.**
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-keep class retrofit2.** { *; }
-keepclasseswithmembers class * {
@retrofit2.http.* <methods>;
}
-keep class **.R$* {
<fields>;
}
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception
-ignorewarnings
-keepnames class com.google.gson.Gson
-keepnames class org.json.** { *; }
-dontwarn com.fasterxml.jackson.**
-dontwarn org.json.**
-dontwarn javax.annotation.**
-dontwarn edu.umd.cs.findbugs.annotations.SuppressFBWarnings
-dontwarn org.slf4j.**
-keep class com.ebay.app.abTesting.firebase.model.** { *; }
-keep class com.ebay.app.abTesting.firebase.** { *; }
-keep class com.google.firebase.perf.** { *; }
-keep class com.ebay.algolia.models.** { *; }
-dontwarn com.algolia.**
-keep class org.prebid.mobile.** { *; }
-keep class com.google.android.gms.ads.doubleclick.PublisherAdRequest {
public *;
}
-keepclassmembers class com.mopub.** { public *; }
-keep public class com.mopub.**
-keep public class android.webkit.JavascriptInterface {}
-keep class * extends com.mopub.mobileads.CustomEventBanner {}
-keep class * extends com.mopub.mobileads.CustomEventInterstitial {}
-keep class * extends com.mopub.nativeads.CustomEventNative {}
-keep class * extends com.mopub.nativeads.CustomEventRewardedAd {}
-keepclassmembers class ** { @com.mopub.common.util.ReflectionTarget *; }
-keepclassmembers class com.integralads.avid.library.mopub.** { public *; }
-keep public class com.integralads.avid.library.mopub.**
-keepclassmembers class com.moat.analytics.mobile.mpub.** { public *; }
-keep public class com.moat.analytics.mobile.mpub.**
-keep class com.google.android.gms.common.GooglePlayServicesUtil {*;}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient {*;}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info {*;}
-keep class * extends java.util.ListResourceBundle {
protected Object[][] getContents();
}
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
public static final *** NULL;
}
-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {
@com.google.android.gms.common.annotation.KeepName *;
}
-keepnames class * implements android.os.Parcelable {
public static final ** CREATOR;
}
-ignorewarnings
-keep class com.threatmetrix.TrustDefender.internal.** { *; }
-keep class com.threatmetrix.TrustDefender.** { *; }
-dontwarn com.threatmetrix.TrustDefender.**
-dontwarn androidx.annotation.NonNull
-dontwarn androidx.annotation.Nullable
-dontwarn androidx.annotation.RequiresApi
minifyEnabled true
set for my builds.