2012-03-17 25 views
4

難読化されたプログラムに問題があります。Obsusculated code does not work

  • client.jarの
  • server.jar

私はそれらを縮小するProGuardのを使用する場合、それは正常に動作します:私は2つのファイルを持っています。しかし、私がNullPointerExceptionsを持っていれば、私はwriteObject()メソッドを使ってサーバにオブジェクトを送信しなければならないときに、私がclient.jarにInternalErrorを持っています。

Proguardの設定で私を助けてください(私はこのツールを本当に知っていません)か、なぜそれらのエラーが出るのか教えてください。事前のおかげで。

PS:私はフランス語ですので、私の説明で間違いを犯すとすみません。

私が起こっているのかを見ることができるかどうかを確認するための.batと私client.jarのを起動しようとしましたが、それは、クライアントがサーバーにオブジェクトを送信する必要があるときに私が取得エラーです: enter image description here

+0

http://sourceforge.net/tracker/?atid=474704&group_id=54750&func=browseでバグレポートを開く – Java42

答えて

3

質問には詳細がほとんどないので、私の答えは非常に一般的ですが、正しい方向にあなたを始めることを願っています。

呼び出しメソッドへの反映を行う場合は、設定ファイルにkeepオプションを追加する必要があります。リフレクションによって呼び出されるすべてのメソッドは、keepにする必要があります(マニュアルのKeep Optionsを参照)。直列化のために

、助けるべきrecipe in the manualがあります:

-keepclassmembers,allowobfuscation class * implements java.io.Serializable { 
    static final long serialVersionUID; 
    private static final java.io.ObjectStreamField[] serialPersistentFields; 
    !static !transient <fields>; 
    private void writeObject(java.io.ObjectOutputStream); 
    private void readObject(java.io.ObjectInputStream); 
    java.lang.Object writeReplace(); 
    java.lang.Object readResolve(); 
} 

インクリメンタル難読化オプションは、クライアントとサーバーの間で一貫性の難読化を維持します。 Proguardマニュアルのsee this section

希望に役立ちます。

+0

お手数ですが、ありがとうございます!シリアライザブルを実装するクラスを難読化しないようにするためにはそれを使うことができますが、それは私がそれらを全くobsfucateできないことを意味しますか?あるいは、私はオプションを扱わなければならないのですか? – Flawyte

+0

まあ、serialVersionUIDは重要な部分だと私は思います。クラスが難読化されている限り、あなたは上手くいくはずです。あなたが望んでいないのは、それらを最適化することです。私は答えを編集します。しかし、サーバとクライアントが同じ難読化されたものを使用するのはおそらく安全でしょう。たとえば、難読化ファイルをファイル(たとえば、サーバ用)に印刷し、もう一方のプロジェクトでそのファイルを使用するというオプションがあります。 – Justin

+0

私はサーバーとクライアントの両方で同じオプションを使用し、 "shrink"、 "optimize"、 "obfuscate"をチェックしています。クライアントでイメージをロードするので、 "optimize"オプションでNullPointerException enums変数の名前を使用しているため、名前が変更され、ファイルが見つかりませんでした。だから私はちょうどそれが列挙を最適化していないことを作った、そして今それは動作します。もう一度お手伝いしていただきありがとうございます。 – Flawyte