Невозможно извлечь диспетчер доверия на aak@... - PayPal-Android-SDK 2.13.3

Недавно я обновил приложение Song Scrapbook до последней версии, а также обновил все сторонние API, используемые приложением. Одним из таких сторонних инструментов является PayPal Android SDK, который я использую для монетизации своего приложения, так как живу в стране, где в настоящее время не поддерживается служба Google Wallet Merchant, что означает, что я не могу использовать Play Store в приложении или разовые системы покупки в моем приложении.

Однако после обновления PayPal SDK до последней версии в моем приложении (через mavenCentral) я получаю следующую ошибку в Android Studio (версия: 1.5.1) каждый раз, когда я хочу выполнить транзакцию PayPal:

    debug W/paypal.sdk: PayPalService created. API:19 PayPalSDK/PayPal-Android-SDK 2.13.3 (Android 4.4.4; samsung GT-I9060I; )
    03-20 16:58:45.540 7804-7804/com.whitsoft.songscrapbook.debug W/ApplicationPackageManager: getCSCPackageItemText()
    03-20 16:58:45.550 7804-7804/com.whitsoft.songscrapbook.debug W/ApplicationPackageManager: getCSCPackageItemText()
    03-20 16:58:45.550 7804-7804/com.whitsoft.songscrapbook.debug I/dalvikvm: Could not find method com.google.android.gms.common.GooglePlayServicesUtil.isGooglePlayServicesAvailable, referenced from method com.paypal.android.sdk.at.a
    03-20 16:58:45.550 7804-7804/com.whitsoft.songscrapbook.debug W/dalvikvm: VFY: unable to resolve static method 10405: Lcom/google/android/gms/common/GooglePlayServicesUtil;.isGooglePlayServicesAvailable (Landroid/content/Context;)I
    03-20 16:58:45.610 7804-7804/com.whitsoft.songscrapbook.debug I/dalvikvm: Could not find method io.card.payment.CardIOActivity.checkSelfPermission, referenced from method io.card.payment.CardIOActivity.onCreate
    03-20 16:58:45.610 7804-7804/com.whitsoft.songscrapbook.debug W/dalvikvm: VFY: unable to resolve virtual method 13172: Lio/card/payment/CardIOActivity;.checkSelfPermission (Ljava/lang/String;)I
    03-20 16:58:45.820 7804-7843/com.whitsoft.songscrapbook.debug I/System: Loaded time zone names for "en" in 132ms (127ms in ICU)
    03-20 16:58:45.840 7804-7804/com.whitsoft.songscrapbook.debug W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x4168cbc0)
    03-20 16:58:45.840 7804-7804/com.whitsoft.songscrapbook.debug E/AndroidRuntime: FATAL EXCEPTION: main
                                                                            Process: com.whitsoft.songscrapbook.debug, PID: 7804
                                                                            java.lang.RuntimeException: Unable to start service com.paypal.android.sdk.payments.PayPalService@41e9c5a0 with Intent { cmp=com.whitsoft.songscrapbook.debug/com.paypal.android.sdk.payments.PayPalService (has extras) }: java.lang.IllegalStateException: Unable to extract the trust manager on a.a.k@41ff61a0, sslSocketFactory is class com.paypal.android.sdk.bn
                                                                                at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2987)
                                                                                at android.app.ActivityThread.access$2100(ActivityThread.java:166)
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1380)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                at android.os.Looper.loop(Looper.java:136)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5584)
                                                                                at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                at java.lang.reflect.Method.invoke(Method.java:515)
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
                                                                                at dalvik.system.NativeStart.main(Native Method)
                                                                             Caused by: java.lang.IllegalStateException: Unable to extract the trust manager on a.a.k@41ff61a0, sslSocketFactory is class com.paypal.android.sdk.bn
                                                                                at a.ak.<init>(Unknown Source)
                                                                                at a.ak.<init>(Unknown Source)
                                                                                at a.am.b(Unknown Source)
                                                                                at com.paypal.android.sdk.bt.<init>(Unknown Source)
                                                                                at com.paypal.android.sdk.payments.PayPalService.a(Unknown Source)
                                                                                at com.paypal.android.sdk.payments.PayPalService.onStartCommand(Unknown Source)
                                                                                at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2970)
                                                                                at android.app.ActivityThread.access$2100(ActivityThread.java:166) 
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1380) 
                                                                                at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                at android.os.Looper.loop(Looper.java:136) 
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5584) 
                                                                                at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                                at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
                                                                                at dalvik.system.NativeStart.main(Native Method) 
     03-20 17:03:46.103 7804-7804/? I/Process: Sending signal. PID: 7804 SIG: 9

Я знаю, что эта проблема не связана с устройством, на котором я тестировал приложение, - поскольку я тестировал это приложение на двух совершенно разных устройствах (Samsung Grand Neo и Cubot X15), и оба устройства выдали похожие ошибки. Я попытался погуглить проблему, чтобы попытаться решить проблему, но после нескольких часов поиска не нашел решения.

Любая помощь будет высоко ценится. Шор-Т.

1 ответ

Решение

Таким образом, мне потребовалось около 5 часов, чтобы понять это, чего я добился путем поэтапного устранения возможных причин проблемы.

Оказывается, настоящей проблемой была моя поспешность в попытке обновить приложение. Причина в том, что версия PayPal SDK 2.13.3 имеет новое правило в файле 'proguard-rules.pro', которое очень важно включать в себя:

Правило следующее:

    # This is added for okhttp 3.1.2 bug fix as shown at https://github.com/square/okhttp/issues/2323
    -keepclassmembers class * implements javax.net.ssl.SSLSocketFactory {
         private javax.net.ssl.SSLSocketFactory delegate;
    }

Это предотвращает процесс минимизации (обфускации) Gradle от удаления ВАЖНОГО кода из предыдущего исправления ошибки в PayPal SDK, которое вызывало проблемы с фабрикой сокетов защищенного уровня. Так что да - это было исправлением: обновленное приложение теперь работает отлично (так, как требуется).

Извлеченный урок: убедитесь, что ваши "правила proguard" точно такие, какими они должны быть!

Over & Out, SilSur.

Другие вопросы по тегам