2016-05-01 8 views
3

ストライプライブラリとサンプルlocated hereを使用しています。私は我々のアプリのリリースバージョンでトークンを作成しようとすると私は、次のスタックトレースを取得する:Android用のストライプExceptionInInitializerError

java.lang.RuntimeException: An error occured while executing doInBackground() 
    at com.stripe.android.compat.AsyncTask$3.done(AsyncTask.java:250) 
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 
    at java.util.concurrent.FutureTask.setException(FutureTask.java:223) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
    at java.lang.Thread.run(Thread.java:818) 
Caused by: java.lang.ExceptionInInitializerError 
    at com.stripe.net.APIResource.<clinit>(APIResource.java:37) 
    at com.stripe.android.Stripe$1$1.doInBackground(Stripe.java:28) 
    at com.stripe.android.Stripe$1$1.doInBackground(Stripe.java:23) 
    at com.stripe.android.compat.AsyncTask$2.call(AsyncTask.java:236) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
    ... 3 more 
Caused by: java.lang.RuntimeException: Missing type parameter. 
    at com.google.a.c.a.getSuperclassTypeParameter(TypeToken.java:84) 
    at com.google.a.c.a.<init>(TypeToken.java:62) 
    at com.stripe.model.FeeRefundCollectionDeserializer$1.<init>(FeeRefundCollectionDeserializer.java:17) 
    at com.stripe.model.FeeRefundCollectionDeserializer.<clinit>(FeeRefundCollectionDeserializer.java:17) 
    ... 8 more 

細かいデバッグビルドを使用して動作するようです。私は、ProGuardのを使用していますが、除外はドキュメントに記さ追加しました:

-keep class com.stripe.** { *; } 

私が使用しているカードが優雅に私に語った試験1である、それは私がデバッグを実行すると、ライブキーで使用されているテストカードですAPKライブapkで同じことをしようとすると、このクラッシュが発生します。

のテストすべてで今どんなProGuardのなし...

編集:私は完全にProGuardのがオフになっていると、問題が離れて行く作っているようだオーケー

。だから今、私は試してみて、ここで何が起こっているかを把握しようと、私の非常に限られたProGuardの知識を周りに掘るよ:)

ここに私の完全なproguard-rules.proファイルです:かなり後

-dontwarn com.facebook.** 
-dontwarn org.joda.time.** 
-dontwarn org.codehaus.** 
-dontwarn java.nio.** 
-dontnote **ILicensingService 
-keep class com.crashlytics.** { *; } 
-keep class com.crashlytics.android.** 
-keep class com.stripe.** { *; } 
-keepattributes SourceFile,LineNumberTable,*Annotation* 

答えて

1

私はプロガードがStripeライブラリのGson関連のクラスを取り除いているように見えることがわかっています。

As posted here、Googleがgsonのためにいくつかの追加ProGuardの設定を推奨しているようだ:

-dontwarn com.facebook.** 
-dontwarn org.joda.time.** 
-dontwarn org.codehaus.** 
-dontwarn java.nio.** 
-dontnote **ILicensingService 
-keep class com.crashlytics.** { *; } 
-keep class com.crashlytics.android.** 
-keep class com.stripe.** { *; } 
##---------------Begin: proguard configuration for Gson ---------- 
# Gson uses generic type information stored in a class file when working with fields. Proguard 
# removes such information by default, so configure it to keep all of it. 
-keepattributes Signature 

# For using GSON @Expose annotation 
-keepattributes *Annotation* 

# Gson specific classes 
-keep class sun.misc.Unsafe { *; } 

##---------------End: proguard configuration for Gson ---------- 
-keepattributes SourceFile,LineNumberTable 

は、ProGuardのために、これらの設定を追加する私のアプリのリリースビルドを固定しているようです。

関連する問題