1

基本的に、私の製品は jar ファイルであり、クライアントがそれを解凍し、.class ファイルを jar ファイルにパッケージ化してから、jar ファイルをアプリケーション クライアントに配布することを期待しています。

したがって、アプリケーションは、同じクラス定義を含む 2 つの異なる jar ファイルを使用することになる可能性があります。したがって、Java コンパイラ (または Android の dex) は文句を言います。

もう少し説明すると:

  1. client1 は私の jar を受け取ります ==> 解凍 ==> jar1 の .class ファイルをパッケージ化します
  2. client2 は私の jar を受け取ります ==> 解凍 ==> jar2 のパッケージ .class ファイル
  3. アプリが jar1 と jar2 を取る ==> 問題! クラスの複数の定義。

どうすればそれを防ぐことができますか?

4

1 に答える 1

1

ここにはいくつかのアプローチがあります。

1)これをしないでください!通常、依存関係はこの方法で再パッケージ化されません。代わりに、client1 はクライアントに jar (バージョン番号付き) と jar を配信します。client2 も同様です。これで、client3 が client1 と client2 を使用している場合、クライアントが期待するソフ​​トウェアのバージョンが一致するかどうかを確認できます。そうでなければ、彼らは困っています。

2) クライアントごとにクラスを jar ファイルに再パッケージ化します。これは、jar を client1 に渡すときに、すべてのクラスを com.my.package.client1 に配置してから、それらを渡し、jar にアクセスするときにそのパッケージから処理するようにする場合です。これは、client1 と client2 を使用する client3 のコードが重複する可能性がありますが、ソフトウェアの複数のバージョンが共存できることを意味します。

3) client1 と client2 に proguard を使用して、jar からすべてのクラスを再パッケージ化してから、配布するようにします。これは基本的に、書き換えを行うためにプロガードによって自動化された回答2と同じです。これには、人々が自分の (およびあなたの) コードをリバース エンジニアリングするのが難しくなるという追加の利点があります。

于 2014-08-15T08:33:17.940 に答える