2

JRE7 ライブラリから Android プロジェクトにいくつかの jar を追加する必要があります。しかし、たとえば、Adroid 2.2 SDKrt.jarと競合しているため、次のエラーが発生します。android.jar

コア ライブラリを構築しない場合のコア クラス (java.* または javax.*) の不適切な使用または誤った使用。

これは多くの場合、IDE (Eclipse など) を使用しているときに、コア ライブラリ ファイルをアプリケーションのプロジェクトに誤って含めたことが原因です。コア クラスを意図的に定義していないことが確実な場合は、これが何が起こっているかの最も可能性の高い説明です。

ただし、実際にはコア名前空間でクラスを定義しようとしている可能性があります。そのソースは、たとえば非 Android 仮想マシン プロジェクトから取得した可能性があります。これは確実に機能しません。少なくとも、アプリとプラットフォームの将来のバージョンとの互換性が損なわれます。また、合法性が疑わしいこともよくあります。

アプリケーションをコンパイルするのではなく、完全な仮想マシン ディストリビューションを作成する一部としてのみ適切なコア ライブラリをビルドする場合は、「--core-library」オプションを使用してこのエラー メッセージを抑制します。

「--core-library」を使用しても実際にはアプリケーションをビルドしている場合は、アプリケーションがまだビルドまたは実行に失敗する可能性があることに注意してください。たとえば、オペレーティング システムをアップグレードすると、アプリケーションが機能しなくなったことに気付いた顧客が怒っていることに備えてください。この問題の責任はあなたにあります。

たまたまコア パッケージにあるコードを合法的に使用している場合、最も簡単で安全な代替手段は、そのコードを再パッケージ化することです。つまり、問題のクラスを独自のパッケージ名前空間に移動します。これは、コア システム クラスと競合しないことを意味します。JarJar は、この取り組みに役立つツールです。これができないとわかった場合、それはあなたがたどっている道が最終的に痛み、苦しみ、悲しみ、嘆きにつながることを示しています.

私はそれについていくつかのスレッドがあり、 JarJarOneJar 、またはFatJarのようなものが私にとって良いかもしれないことを知っています. しかし、私はそれらのいずれかを機能させる方法を知りませんし、ドキュメンテーションはそれを実際には明確にしません(私にとって)。彼らはAntコマンドを使用していると思いますが、私は常にEclipse組み込みビルダーを使用しており、Antも上記のいずれも使用する方法がわかりません。

私の質問は次のとおりです。この rt.jar を再パックして、Android プロジェクトでコンパイルできるようにするにはどうすればよいですか?

ありがとうございました!

編集:

さて、私が達成したいのは、Androidアプリケーションの開発中に使用できる.jarを作成することです(いくつかの機能を簡素化しますが、実際には問題ではありません)。しかし、同じ .jar を標準の Java プロジェクトに追加して、そこでいくつかの機能を使用できるようにしたいとも考えています。次のようになります: アプリケーションを作成する人は誰でも、この .jar を自分の Java プロジェクトに追加します -> 特定のファイルを生成できるようにします (これを行うにはインターネットが必要です) -> これらの生成されたファイルは Android プロジェクトに追加されます -> 後で、誰かがこの Android アプリを使用すると、これらのファイルはインターネットを使用せずに (オフラインで) 特定の機能を提供します。

4

3 に答える 3

3

たとえそれが可能であったとしても、どのプロジェクトでもこれを行うことはお勧めできません。豊富なクラスの非互換性と読み込みの問題にさらされることになります。しかし、いずれにせよ、アーカイブが変更される前にコア Java ライブラリがロードされるため、アーカイブを上書きしようとする試みは無意味になるため、それは問題ではありません。

Android が独自の JVM 実装を使用しており、JDK 6 と完全には互換性がないという事実についても語らないでください (JDK 7 は忘れてください)。また、コア Java ライブラリをコードと一緒にパッケージ化することは著作権違反になる可能性があり、ライセンス オプション (IANAL) を変更する可能性があることにも注意してください。

発生している問題を解決する別の方法を見つける必要があります (質問で言及できませんでした)。

于 2012-04-25T12:25:32.643 に答える
0

Android と従来の Java の両方で適切に動作する JAR が多数あります。Android 開発者が海賊版を作成することはありませんrt.jar。Android SDK とサポートしている Java の任意のレベルの両方に存在するクラスに固執するjava.*javax.*、JAR は両方の環境で正常に動作します。

于 2012-04-26T14:53:44.360 に答える
0

このような .jar ファイルの使用は控えるのが理想的ですが、必要に応じてそれらをビルド パスに追加できます。しかし、これは時として、あなたが今直面しているような対立を生むことがあります。この種の競合を解決するために必要なことは、次のとおりです。

  1. ビルド パスに jar を追加します。
  2. 「参照ライブラリ」にチェックを入れます。jar ファイルは同じ下に表示されます。
  3. 参照ライブラリの下に配置されたら、「Android 依存関係」仮想ディレクトリを確認します。そこにも同じjarファイルのインスタンスがあることがわかった場合は、「android dependencies」フォルダーを完全に削除する必要があります。(私を信じてください、これはあなたのプロジェクトにはまったく影響しません)。
  4. それができれば、それ以上競合することなくコードをコンパイルできるはずです。

幸せなコーディング.. :)

于 2013-01-18T12:55:23.480 に答える