2

私は、Bouncy Castle J2ME ライブラリを利用する Java ME/J2ME プロジェクトに取り組んでいます。ただし、プロジェクトに追加すると、.jar ファイルのサイズが 40 倍 (50kB 対 2000kB) になることに気付きました。ProGuard の難読化ツールの設定をレベル 9 (最大) に設定する以外に、このファイル サイズの増加を最小限に抑える方法はありますか?

私はライブラリの実際のクラスのいくつかのみを使用しています。

import org.bouncycastle.util.encoders.Hex;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.*;
import org.bouncycastle.crypto.digests.SHA256Digest;

前もって感謝します。

4

1 に答える 1

2

これは非常に難しい問題です。

何よりもまず、jar ファイルを解凍して、Proguard が BouncyCastle のクラス ファイルを難読化しているかどうかを確認していただけますか? ライブラリとして bouncycastle jar ファイルが含まれており、その中にクラス ファイルがあるため、Proguard がこれらのクラス ファイルを難読化しておらず、多くのスペースを占有していると想定しています。

とにかく、弾む城のjarファイルをダウンロードしたところ、純粋にクラスファイルで構成されていることがわかります。したがって、結果のjarファイルを減らすために削除して取り除くことができる余分なファイルはありません.

本当に削減したい場合は、次の 2 つのソリューションを作成します。どちらもリスクがあります。

解決策 1 (非推奨) :

  1. これは簡単ですが、お勧めしません。ランタイムの例外やエラーが発生する可能性があります: bouncycastle jar ファイルを解凍します。次に、ディレクトリ src\org\bouncycastle に移動します。前述のように、以下のパッケージのみを使用しています

  2. ここで、これら 2 つのパッケージ内のソース コードは、他のパッケージ内のソース コード/クラス ファイルに依存していないと仮定します。

  3. 他のディレクトリ、つまり「asn1」、「bcpg」を削除します。この段階では、肉屋になってすべてを削除するのではなく、いくつかを削除してから戻ってきて、うまくいった場合は他の人を削除します.

  4. ここで、jar ファイルを再生成します。ディレクトリを削除したら、ディレクトリのルートに戻ります。そこには、META-INF org utils などの他のディレクトリが表示されます。

これは、これを正しく行うために必要な重要なステップです。そうしないと、jar ファイルが機能しません。ルート ディレクトリ内のすべてのディレクトリを選択し、右クリック -> zip に送信

zip ファイルが作成されたら、名前を *.zip ではなく *.jar に変更します。

  1. jar ファイルのサイズが縮小され、プロジェクトにこの jar ファイルが含まれるようになりました。コンパイルおよび実行されるかどうかを確認します。次に、実行時に正しく機能しているかどうかを確認します。すべてがうまくいけば、完了です。これで、上記の手順を繰り返してさらにディレクトリを削除し、jar ファイルのサイズを縮小できます。

解決策 2:

  1. 使用している bouncycastle jar ファイルのソース コードをダウンロードします。
  2. プロジェクトから jar ファイルを削除する必要があります。
  3. ソース コードをプロジェクトに含めます。プロジェクトをビルドし、コンパイル エラーが発生しないかどうかを確認します。この段階で、元の jar ファイルを使用しておらず、コードのみを使用していることを確認する必要があります。
  4. 不要なコードを含むパッケージの削除を開始します。コンパイル エラーが発生しないようにプロジェクトを再構築し続けます。エラーが発生した場合は、そのパッケージを削除して他のパッケージの削除に進む必要はありません。
  5. この一括処理が完了したら、プロジェクトをビルドして jar ファイルを生成します。
  6. このようにして、Proguard は弾む城のコードを難読化し、不要なコードのほとんどを削除するため、結果の jar ファイルが大幅に減少するはずです。
于 2013-02-22T12:13:19.543 に答える