2011-12-08 2 views
5

私は共有オブジェクトを持っています。これはNDFに対してコンパイルされた 'libFoo.so'と呼ばれます。私は、Javaのプロジェクトは、私はjarファイルとしてエクスポートし、アンドロイドのアプリケーションで使用することをJARのネイティブ共有オブジェクトをアンドロイドアプリケーションからロードするにはどうすればいいですか?

System.loadLibrary("Foo"); 

を呼び出すことで、その共有オブジェクトを使用するJavaプロジェクトを(私は「jarlib」それを呼ぶことにします)、持っています。共有オブジェクトに関するすべてのビットをコメントアウトすると、jarファイルは正常に動作し、完全に対話できます。

jarlibを、Unityアンドロイドアプリケーションの共有オブジェクトとともに、./lib/armeabi/libFoo.soの共有オブジェクトとともに使用することができます。これはすべてpeachyまでロードされます。

私はunityのAndroidアプリケーションでjarlibとlibFoo.soを使用しようとしていますが、loadLibraryは絶対にlibFoo.soの検索を拒否します。私は./libと./lib/armeabiのapkに含まれるように配置しようとしましたが、何もロード・コールを見ないように見えます。

私は./libまたはjarlibの./lib/armeabiにlibFoo.so含めて試してみたが、私は私のAndroidアプリを実行する/ビルドしようとしたら、私は聞いています:

The library 'jarlib.jar' contains native libraries that will not run on the device. 
The following libraries were found: 
    - libFoo.so 
これで

、それは(./lib/armeabiない)./libに

Additionally some of those libraries will interfer with the installation of the application because of their location in lib/ 
lib/ is reserved for NDK libraries. 

だ場合はちょうど私が私が欠けているものを組み合わせわからないんだけど、私はそれを行うことができると確信している、Iどのようにそれを行う方法を把握することができない!

答えて

6

それはそれが私に頭痛の8時間を引き起こした、それは非常に小さいものだったことが分かります。

私のlibFoo.soが、app.apk/lib/armeabi/libFoo.soに表示されていないことが判明しました。私はそれと何か関係があると思ったので、libフォルダがapkにコピーされたことを確認するための設定を探し始めました。

結局のところ、libフォルダではない、しかし...

は私が(アンドロイドアプリケーション側)でそれを試してみましたか覚えておいてください:

./lib/libFoo.so 
-and- 
./lib/armeabi/libFoo.so 

が判明し、どのような私はそれを似たような道筋に置く必要がありました。ああそう似ています。

./libs/armeabi/libFoo.so 

ええ。 libs。 sとなります。

実際、フォルダ 'lib'の名前を 'libs'に変更したとき、binフォルダやresフォルダにあるように、Eclipseのフォルダのアイコンを小さなアンドロイドのシンボルに変更しました。そして確かに、あなたがapkをビルドするとき、lib/armeabiフォルダがそこにあります(APKにlibという名前があり、libsではないことに気づきます)。

私の同僚の一人(私の前にこのプロジェクトで働いていた)私に、フォルダのどこかがlibにありましたが、AndroidのSDKのそれ以降のバージョンではlibsに変更されていたことを教えてくれました。いずれにしても、このプロジェクトを選んだだけで、フォルダに「lib」という名前を付ける必要があります。私は私の髪を引き出す準備ができていた。私は、誰かが私がやったのと同じ問題を抱えていて、少し速くそれを解決することを望んで、これをここに残しています。

関連する問題