2016-08-29 15 views
6

Androidスタジオ2.2では、cmake外部ビルドシステムを導入しています。問題はドキュメンテーションが本当に不足していることと、サードパーティのライブラリをどのようにリンクするべきかわからないことです。私はcmakeのディレクティブtarget_link_libraries試してみた:そのアプリのコンパイルでAndroidのcmake外部ビルドシステムでサードパーティライブラリをリンクするにはどうすればよいですか?

target_link_libraries(native-lib libs/libSomething.so)

そして「作品」が、libSomething.soがアプリケーションとパッケージ化されていないため、私は、実行時にdlopenのエラーを取得します。それが何かを変更し、私は、Android Studioの2.2によって生成されるデフォルトJNIプロジェクトを開始した場合libsディレクトリは...「アプリ」の下にある

[更新]

が、私はアプリの下libSomething.soを入れて試してみました/ src/main/jniLibs/armeabi-v7aしかし、 "main"(native-lib)ライブラリはパッケージ化されていません。

[アップデート2]

私は...今のところ

sourceSet 
{ 
    main 
    { 
     jniLibs.srcDirs = [ "libs", ".externalNativeBuild/cmake/debug/obj"] 
    } 
} 

答えて

9

をcmakeの出力ディレクトリが含まれており、これは動作しますが、地獄のように醜いですし、実際に恒久的な解決策ではないソースセットの設定を追加しました私はポストビルドステップでlibSomething.soをcmakeライブラリの出力ディレクトリにコピーしてしまいました。これは、Android StudioがそのディレクトリにあるすべてのAPKファイルにコピーすることが判明したためです。 cmake

コマンドは以下の通りです:

今の
add_custom_command(TARGET native-lib POST_BUILD 
     COMMAND ${CMAKE_COMMAND} -E copy 
     ${CMAKE_CURRENT_SOURCE_DIR}/libs/${ANDROID_ABI}/libSomething.so 
     ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libSomething.so 
    ) 
1

、あなたもそれをパックすることを、ディレクトリにあなたの共有ライブラリを入れて、そのディレクトリを指すようにjniLibsを設定することができます。 1つのサンプルがここにあります:https://github.com/googlesamples/android-ndk/tree/master/hello-libs、gperfに従ってください。この方法では、生成されたビルドフォルダに依存しません。アンドロイドスタジオにパッケージングライブラリが追加されたとき、jniLibsの回避策はもう必要ありません

関連する問題