2

ここには、特定のライブラリを含める必要がある JavaME プロジェクトがあります。私は Netbeans 6.8 を使用しているので、ライブラリをプロジェクトに追加しました。ライブラリのクラスは、結果の jar ファイルに正しくパックされます。

私の問題は、このライブラリのクラスが Proguard 難読化ツールによって変更されてはならないということです。だから私は別の -keep オプションを試しました:

-keep class com.package.**

-keepnames と -keepclassmembers も試しましたが、Proguard は次のように言うのをやめます:

コードの編集中に予期しないエラーが発生しました:

クラス = [com/パッケージ/クラス]

メソッド = [run()V]

例外 = [java.lang.IllegalArgumentException] (長さ [1075] のコード内の無効な命令オフセット [1077])

エラー: 長さ [1075] のコードの無効な命令オフセット [1077]

Proguard に特定のライブラリまたは特定のクラスを無視するように指示する方法はありますか?

前もって感謝します!

4

3 に答える 3

1

ProGuard でライブラリを変更しない場合は、-injars の代わりに -libraryjars を使用して指定する必要があります。

-libraryjars somelibrary.jar

そのクラスは出力 jar に含まれないため、ライブラリ jar を処理済みアプリケーションのクラス パスに追加する必要があります。

または、ライブラリ jar を入力 jar として処理することもできますが、そのクラスとクラス メンバーは保持します。

-keep class some.library.** { *; }

さて、予期しないエラーは別のものです。これは、ProGuard のバグを示しています。ProGuard の最新バージョンを使用していることを確認する必要があります。それ以外の場合は、Sourceforge の ProGuard のバグ トラッカーで問題を報告する必要があります。

于 2011-08-07T15:14:18.357 に答える
0

ライブラリのクラスは、結果のjarファイルに正しくパックされます。

それがあなたの問題です。Proguardに提供されたjarファイルに入ると、処理されます。すべての依存関係を持つ大きなjarファイルを作成している必要があると思います。その場合は、JavaMEコードをこの大きなjarから除外し、別のjarに保管してください。その後、Proguardはそれを処理しません。

それ以外の場合は、JavaMeコードを別のjarに移動し、Proguardに提供しているjarの依存関係にする方法を見つけます。

于 2011-08-04T18:36:17.247 に答える
0

次のオプションを指定して、JAR を別のパスに ProGuard と組み合わせることができます。

-dontnote **
-dontwarn **
-dontobfuscate
-dontshrink
-dontoptimize

これには、JAR をまったく処理せずに結合するという単純な効果があります。

dontnoteおよびオプションは、メモと警告を抑制するためのdontwarnもので、単純な結合操作では偽物です (そして、それらの数が多くなります)。

最初のパスは次のようになります。

-injars        MyApplication-Unobfuscated.jar
-libraryjars   SomeLibraryJar.jar(!META-INF/**)
-libraryjars   AnotherLibraryJar.jar(!META-INF/**)
-outjars       MyApplication-Obfuscated.jar

// other options.

2 番目のパスは次のようになります。

-injars        MyApplication-Obfuscated.jar
-injars        SomeLibraryJar.jar(!META-INF/**)
-injars        AnotherLibraryJar.jar(!META-INF/**)
-outjars       MyApplication.jar

-dontnote **
-dontwarn **
-dontobfuscate
-dontshrink
-dontoptimize
于 2014-02-02T00:10:55.530 に答える