http://developer.android.com/google/play/billing/billing_best_practices.html
注: Proguard を使用してコードを難読化する場合は、Proguard 構成ファイルに次の行を追加する必要があります。
-keep class com.android.vending.billing.**
問題は、なぜ?!
http://developer.android.com/google/play/billing/billing_best_practices.html
注: Proguard を使用してコードを難読化する場合は、Proguard 構成ファイルに次の行を追加する必要があります。
-keep class com.android.vending.billing.**
問題は、なぜ?!
これは本当に良い質問です。一部のクラスで難読化を無効にする必要がある理由はわかっていますが、これはなぜ難読化を無効にする必要があるのか という質問には答えていませんInAppBillingService
。generated をチェックアウトするInAppBillingService.class
と、単一のリフレクション呼び出しだけでなく、getClass().getName()
呼び出しもまったくないことがわかります。これは、そこでリフレクションが使用されていないことを意味します。IAB 実装は、生成されたクラスを名前で直接参照します。つまり、難読化ツールは最適化ステップでベンディング コールを削除しません。したがって、「なぜこれが必須なのか」ということはまだあります。質問。
私のアプリは、難読化された課金パッケージでIAP V3 を半年以上使用しており、IAB にはまったく問題はありません。私が見ている唯一の潜在的な問題は、Android が aidl インターフェイスの Java クラスを生成する方法を変更した場合です。リフレクションを使い始めたので、そのようなクラスが難読化されないようにする必要があります。しかし、aidl を使用している他の多くのアプリでもコーディングが中断される可能性があるため、これが発生する可能性は低いです。
プロガードを使用する際の主な理由/問題は、リフレクションを使用するコードを難読化することです。
たとえば、Web サービスのようにクラスを名前でインスタンス化すると、一部の xml パーサーがそうする場合、これは機能しなくなります。
難読化が許可されていないが、おそらく質問とは関係ないもう 1 つの理由:
GPL のようなライセンス条件では、エンド ユーザーが lib の更新されたバージョンで lib を置き換える可能性が要求されます。
そのようなライブラリは、難読化することが許可されていません (proguard には、sich ライブラリ jar のオプションがあります)。