2013-10-31 24 views

答えて

1

主な理由は、/困難がリフレクションを使用するコードを難読化proguardのを使用しているとき、あなたのproguard.cfgにその行を追加する必要があります。

たとえば、Webサービスのように名前でクラスをインスタンス化して、一部のXMLパーサーがそうした場合、これはもう機能しません。

難読化が許可されていないもう1つの理由はおそらく質問とは関係ありません。
GPLのようなライセンス条件では、libの更新版でエンドユーザーによるlibの置き換えが必要です。
このようなlibは難読化することができません(proguardにはライブラリ瓶のオプションがあります)

0

Proguardはアプリケーションを難読化するだけでなく、それらを最適化します。これを最適化すると、参照されないクラスが削除されます。販売のクラスを削除しないようにするに

あなたは

2

これは本当に良い質問です。私たちは、一部のクラスで難読化を無効にする必要がある理由を知っていますが、InAppBillingServiceで無効にする必要がある理由については答えません。チェックアウトでInAppBillingService.classが生成された場合、1回のリバースコールはなく、getClass().getName()コールもないことがわかります。これは反射がそこで使用されないことを意味します。 IAB実装では、生成されたクラスを名前で直接参照するため、難読化者は最適化ステップでベンディングカルスを削除しません。したがって、まだ「なぜこれは必須であるのですか?」というものがあります。質問。

My appはすでに半年以上にわたってIAP V3を使用しています。難読化された請求パッケージであり、IABにはまったく問題はありません。私が見る唯一の潜在的な問題は、Androidが補助インタフェース用のJavaクラスを生成する方法を変更した場合です。それはリフレクションを使い始めるところですが、そのクラスを難読化しないようにする必要があります。しかし、これはおそらくaidlを使って他の多くのアプリでコーディングを中断する可能性があるため、起こりそうもありません。

+0

@AlexWienが指摘しているように、xmlデシリアライズと関係がありますか?私は本当にGoogleがこれに関する詳細を提供すべきだと思う。アプリ内課金ランタイムエラーが発生した場合は、難読化につながる可能性のある原因について知っておくとよいでしょう。 – l33t

+0

Android AIDLは、直列化および逆シリアル化に 'android.os.Bundle'クラスを使用します。難読化されたコードで使用することは安全です。私が認識している唯一のXML関連の問題は、AndroidManifest.xmlにサービスを登録して難読化する状況です。この場合、サービスの名前も難読化され、システムはもう古い名前の下にそれを見つけることができません。彼らが難読化する必要があるのは本当に奇妙です。多分ちょうどの場合;) –

+0

パラノイアモード:「Googleスパイエンジンが課金クラスへのすべてのアクセスを追跡したいからかもしれません;-)」、パノニアモードはオフです。 – AlexWien

関連する問題