2016-06-16 30 views
2

私は現在、独自の書かれたネイティブコードを使用するJavaライブラリ(バインディング)に取り組んでいます。このネイティブコードは、複数のアーキテクチャ(arm-v7、i686、x86-64など)用に.soファイルとしてコンパイルされます。.soファイルをjarファイルにバンドルするにはどうしたらいいですか?

私は、jniLibsというフォルダを作成し、適切な.soファイルを含む各アーキテクチャのサブフォルダを作成する必要があります。その後、Android.mkファイルとSystem.loadLibraryと私のコードにこれらのファイルを含めることができます。

しかし、これらのファイルを通常のJavaプロジェクト/ライブラリに含めるには手がかりがありません。 System.loadLibraryは、通常のファイル(および必ずしもプロジェクトファイルではない)を見るためにのみ機能します。

+1

あなたの単一のjarは、Androidと通常のデスクトップ/サーバーJava環境の両方で「クロスデプロイ」することを意図していますか?それは野心的な響きです。 – unwind

+1

@Max:これをチェックしてください:http://blog.guillaumeagis.eu/setup-andengine-with-android-studio/ – AndiGeeky

+1

これは、Javaの「一度コンパイルして、どこでも動く」アイデアと幾分矛盾します。とにかく、これはCとは関係ありません。共有ライブラリはC固有のものではありません。 – Olaf

答えて

1

android .jarファイルにはコード以外のコードを使用することはできませんが、.aarファイルでリソースを使用できます。

Android Archive Library (aar) vs standard jar

あなたはあなたのライブラリーのための.aarは、あなたのライブラリーの再配布/再利用可能なコンパイルされたバージョンであることがわかります。 Javaコードによって手動で(そう、あなたがそれに書き込むためのアクセス権を持っていることを確認している)ユーザーのホームディレクトリにご.jarファイルからライブラリ・ファイルを抽出 - SWTがそれをやったとして

+0

この記事をありがとう、確かに '.jar'と' .aar'の違いを理解するのに役立ちました。しかし、私のネイティブコードを '.jar'でユーザフレンドリーなやり方で提供するには、回避策がありますか? – Max

+0

aarファイルを使用する必要があります。それ以上のユーザーフレンドリーは得られません。 jarファイルを置き換えるので、それはまだ1つのファイルを配布することです。 – weston

0

あなたはそれを行うことができます。 ソースコードorg.eclipse.swt.internal.Library、方法extract()を確認することができます。

関連する問題