問題タブ [jarjar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - .jar ファイルの再パッケージ化
JRE7 ライブラリから Android プロジェクトにいくつかの jar を追加する必要があります。しかし、たとえば、Adroid 2.2 SDKrt.jar
と競合しているため、次のエラーが発生します。android.jar
コア ライブラリを構築しない場合のコア クラス (java.* または javax.*) の不適切な使用または誤った使用。
これは多くの場合、IDE (Eclipse など) を使用しているときに、コア ライブラリ ファイルをアプリケーションのプロジェクトに誤って含めたことが原因です。コア クラスを意図的に定義していないことが確実な場合は、これが何が起こっているかの最も可能性の高い説明です。
ただし、実際にはコア名前空間でクラスを定義しようとしている可能性があります。そのソースは、たとえば非 Android 仮想マシン プロジェクトから取得した可能性があります。これは確実に機能しません。少なくとも、アプリとプラットフォームの将来のバージョンとの互換性が損なわれます。また、合法性が疑わしいこともよくあります。
アプリケーションをコンパイルするのではなく、完全な仮想マシン ディストリビューションを作成する一部としてのみ適切なコア ライブラリをビルドする場合は、「--core-library」オプションを使用してこのエラー メッセージを抑制します。
「--core-library」を使用しても実際にはアプリケーションをビルドしている場合は、アプリケーションがまだビルドまたは実行に失敗する可能性があることに注意してください。たとえば、オペレーティング システムをアップグレードすると、アプリケーションが機能しなくなったことに気付いた顧客が怒っていることに備えてください。この問題の責任はあなたにあります。
たまたまコア パッケージにあるコードを合法的に使用している場合、最も簡単で安全な代替手段は、そのコードを再パッケージ化することです。つまり、問題のクラスを独自のパッケージ名前空間に移動します。これは、コア システム クラスと競合しないことを意味します。JarJar は、この取り組みに役立つツールです。これができないとわかった場合、それはあなたがたどっている道が最終的に痛み、苦しみ、悲しみ、嘆きにつながることを示しています.
私はそれについていくつかのスレッドがあり、 JarJar、OneJar 、またはFatJarのようなものが私にとって良いかもしれないことを知っています. しかし、私はそれらのいずれかを機能させる方法を知りませんし、ドキュメンテーションはそれを実際には明確にしません(私にとって)。彼らはAntコマンドを使用していると思いますが、私は常にEclipse組み込みビルダーを使用しており、Antも上記のいずれも使用する方法がわかりません。
私の質問は次のとおりです。この rt.jar を再パックして、Android プロジェクトでコンパイルできるようにするにはどうすればよいですか?
ありがとうございました!
編集:
さて、私が達成したいのは、Androidアプリケーションの開発中に使用できる.jarを作成することです(いくつかの機能を簡素化しますが、実際には問題ではありません)。しかし、同じ .jar を標準の Java プロジェクトに追加して、そこでいくつかの機能を使用できるようにしたいとも考えています。次のようになります: アプリケーションを作成する人は誰でも、この .jar を自分の Java プロジェクトに追加します -> 特定のファイルを生成できるようにします (これを行うにはインターネットが必要です) -> これらの生成されたファイルは Android プロジェクトに追加されます -> 後で、誰かがこの Android アプリを使用すると、これらのファイルはインターネットを使用せずに (オフラインで) 特定の機能を提供します。
ant - JarJarとAnt-ルールファイルの使用方法
AntでJarJarを実行し、外部のルールファイルでルールを渡す方法を知りたいです。
1)私は以下のようにルールを1つずつ渡すことができることを知っています:
2)コマンドラインからルールを実行すると、ファイルでルールを渡すことができることを知っています。
3)上記のコマンドラインをAnt<exec>
タスクで使用できます。(最善の回避策)
<rulesFile>
4) Mavenでタグを使用することへの参照を見つけました。
上記のオプションは、私がやりたいことには理想的ではありません。
ルールファイルを渡して、AntタスクからJarJarを実行したいと思います。
java - AndroidでJarJarを使用して外部jarのパッケージ名を変更するには?
Android プロジェクトでJarJarを使用する方法に関する明確な指示が見つからないようです。
アプリケーション プロジェクトが 2 つの別個のライブラリに依存しているシナリオがありますが、これらのライブラリはたまたま同じ外部 .jar ファイルを使用しています。アプリケーションをコンパイルしようとすると、「Dalvik 形式への変換がエラー 1 で失敗しました」というメッセージが表示されます。
サードパーティの .jar フォルダーのパッケージ名を変更するために、Android で build.xml ファイルを使用して JarJar を使用する方法を教えてもらえますか?
java - jarjar形式を使用してMavenプロジェクトを組み立てる方法は?
のようなアセンブリ プラグインをいくつか試しましたがmaven-assembly-plugin
、maven-shading-plugin
いずれもjarjar
ファイル形式をサポートしていません。
jarjar
Uber-Jar をファイル形式で組み立てる Maven プラグインはありますか?
spring.handlers
[ 、spring.schemas
]のようなリソースの競合を回避すると便利です
android - HttpClient 4.3.1 を再パッケージ化して commons-logging への依存を削除するには?
Apache の httpclient lib を再パッケージ化して、Android アプリ ( https://code.google.com/p/httpclientandroidlib/のように HttpClient 4.3.1 を使用)に同梱したいと考えています。
したがって、 httpclient 4.3.1 jar (すべての依存関係を含む) を手動でダウンロードし、jarjar を使用して再パッケージ化しました。
rules.txtを使用:
次に、ant を使用して出力をまとめました。
そのファイルを使用してアプリを開発およびテストできますが、それを Android にデプロイするとmy.repackaged.org.apache.logging.log4j.something
、my.package.org.apache.logging.whatEver
.
そこで、バイトコード操作を使用して、commons-logging への依存関係を取り除きたいと思います。これは以前に行われました: http://sixlegs.com/blog/java/dependency-killer.html
しかし、私は実際にどのようにそれを行うのだろうか?org.apache.commons.logging.Log への依存関係のみがあります。
私は、これらの依存関係を削除し、彼がここで行ったように独自の実装に置き換えることだと思いますhttps://code.google.com/p/httpclientandroidlib/。provided
したがって、 org.apache.commons.logging.Log インターフェイスを実装し、単に dedefates する commons-logging のスコープを持つクラスが 1 つだけの新しい Maven プロジェクトを作成しましたandroid.utils.Log
。
MyLog implements org.apache.commons.logging.Log {}
パッケージmy.log
に入れ、それを my-log-1.0.0.jar にパッケージ化しました。その jar を再パッケージ化された httpclient-jars と同じフォルダーに配置し、上記のように ant を使用して my-org-apache-httpclient-4.3.1.jar にまとめてパッケージ化しました。
アプローチ1
私は再びjarjarを使用しようとしました:
rules2.txtを使用:
しかし、それは機能しません。my.repackaged.org.apache.logging.log4j.something
参照先が見つからないという例外my.package.org.apache.logging.whatEver
は引き続きスローされます。
アプローチ 2
また、最終的な jar からログ記録を削除するか、my.repackaged.org.apache.log4j を再パッケージ化して元のパッケージにログを記録しようとしました。
rules2.txt v2 :
しかし、それはまだ例外を投げています:my.repackaged.org.apache.logging.log4j.something
によって参照されていますmy.package.org.apache.logging.whatEver
質問
commons-logging の依存関係を強制終了/置換して、例外を取り除くにはどうすればよいですか?
maven - Mavenでjarjajrを使用する場合のヌルポインタ
Maven でビルドすると、次のようになります。
Failed to execute goal org.sonatype.plugins:jarjar-maven-plugin:1.9:jarjar (default) on project myproject: Unable to JarJar: null cause: null: NullPointerException
私の pom.xml ファイルの断片:
-e -X オプションを使用してログを編集します。
android - 間違ったjarjar mavenプラグイン構成
これは jarjar プラグインの構成です。android では java.Beans を使用できないため、このプラグインを追加して、java.beansをHarmony.beansに置き換える必要があります。
結果タグにエラーがあると思います。どうすれば修正できますか?
jar - プロジェクトで同じ名前でバージョンが異なる2つのjarファイルをマージする方法は?
httpclient-4.2.3.jar
とのような 2 つの jar ファイルhttpcore-4.2.jar
を使用していますが、同じ名前でバージョンが異なる別の 2 つのファイルhttpclient-4.3.4.jar
とhttpcore-4.3.jar
. 同じプロジェクトで 4 つのファイルすべてを使用するにはどうすればよいですか?
私を助けてください。