-
13-09-2019 - |
質問
私は Antenna を使用して j2me アプリを構築、パック、難読化しています。構築と梱包は正常に動作します。
このプロジェクトは、一部のインターフェイスを除いてすでに難読化されているサードパーティの jar を使用しています。
難読化しようとすると、次のようないくつかのエラーが発生しました。
[wtkobfuscate] Warning: i: can't find referenced class fooPackage.fooClass
Class i と fooPackage.fooClass は、前述したこのサードパーティの jar からのものです。
アップデート:
このサードパーティ ライブラリは j2me-xmlrpc.jar を使用します。すべてをまとめてパッケージ化しないと、サードパーティのインターフェイスと j2me-xmlrpc.jar を難読化できなくなります。(この方法ではアプリを実行できません。理由はわかりません)
j2me-xmlrpc.jar とプロジェクト クラスのみをパッケージ化すると、難読化中にこのエラーが発生します
[wtkobfuscate] Warning: there were 2 instances of library classes depending on program classes.
更新 2:
Netbeans では Proguard を使用して難読化できるため、この難読化が可能であることはわかっています。
Netbeans 内部ではビルドの作成に ANT を使用するため、生成された build.xml を自分の build.xml にコピーしようとしました。
難読化のために、Netbeans は Netbeans の外部で使用できるライブラリ org-netbeans-modules-Mobility-antext.jar を使用します。このライブラリをプロジェクトにインポートし、問題なく使用しました。
しかし、アンテナを使用した場合と同じエラーが発生します。
Netbeans で難読化すると多くの警告が生成されますが、それでも難読化された jar が生成されます。
私に足りないものは何でしょうか?
解決 2
Proguard 4.3を使用していました。Proguard 4.2 にダウングレードすると問題が解決しました。
他のヒント
サードパーティのライブラリが難読化されている場合は、クラスを難読化するときにそのライブラリを含めないでください。むしろ次の手順に従ってください
- クラスだけを Jar 化します (サードパーティのライブラリは含めないでください)
- ステップ 1 で取得した jar を難読化します
- 手順 2 で取得した難読化された jar とサードパーティのライブラリを一時フォルダーに解凍します。
- すべての unjar クラスを Jar 化します
- 事前検証して再度パッケージ化します
jshrinkを使ってみてください。proguard よりもはるかに良い結果が得られます。
<java jar="obfuscator\jshrink.exe" fork="true">
<arg value="..\${projectdir}\${projectname}.jar"/>
<arg value="-classpath"/>
<arg pathref="project.class.path"/>
<arg value="-keep"/>
<arg value="${midletclass}"/>
<arg value="-o"/>
<arg value="..\${projectdir}\${projectname}.jar"/>
</java>