5

Google と Proguard のアプリ内課金サービスを使用しています。Proguard として使用している構成ファイルは、.../sdk/tools/proguard/proguard-android.txt にあるものです。

Google がここで言っているように: http://developer.android.com/google/play/billing/billing_best_practices.html構成ファイルに次の行を追加しました。

-keep class com.android.vending.billing.**

Google の IAB の更新ファイルも使用しています: https://code.google.com/p/marketbilling/source/detail?r=7ec85a9b619fc5f85023bc8125e7e6b1ab4dd69f

問題は、ユーザーがこのスタックトレースでランダムなクラッシュを報告する場合があることです:

E/AndroidRuntime: FATAL EXCEPTION: Thread-455
java.lang.NullPointerException
    at com.xx.xxxx.util.IabHelper.startSetup(Unknown Source)
    at com.xx.xxxx.util.IabHelper$2.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:856)

私のデバイスでも発生しましたが(アプリを開いたところ)、今日は一度だけ発生しました。

また、Google ファイル (IAB) の問題なのか、Proguard 構成ファイルに何かが欠けているのかはわかりません。

4

6 に答える 6

2

IabHelpers startSetup() のこの行

mContext.getPackageManager()
                .queryIntentServices(serviceIntent, 0);

null を返す場合があるため、リストが空かどうかを確認するときに nullpointer を取得します。

他のことをする前に null をチェックするように変更しただけです。

List<ResolveInfo> queryIntentServices = mContext.getPackageManager()
            .queryIntentServices(serviceIntent, 0);
    if (queryIntentServices != null && !queryIntentServices.isEmpty()) {
        // service available to handle that Intent
        mContext.bindService(serviceIntent, mServiceConn,
                Context.BIND_AUTO_CREATE);
    }else ...
于 2014-05-30T06:45:18.057 に答える
2

あなたのプロガード構成は正しいです。アプリで生成されたものを難読化することもできcom.android.vending.billing.IInAppBillingService、すべてが正常に機能します。

IabHelperクラスについて。「そのまま」使用することはお勧めしません。まず、バグがあることが証明されています。第二に、難読化されていても自動ツールによってハッキングされる可能性があります。に基づいて独自のクラスを作成しIabHelper、そのためのjunitテストを作成することをお勧めします。これは、私が自分のプロジェクトでも行ったことです。

于 2013-08-22T05:51:29.247 に答える
0

これをproguard構成ファイルに追加して行番号を保持するだけで、ソースが不明になることはありません。

-keepattributes Signature、SourceFile、LineNumberTable

于 2014-11-12T20:05:56.537 に答える