私は、実際に最終パッケージに含めずに、他のアプリケーションの2つの共有ライブラリとリンクする必要のあるプロジェクトを扱っています。私は外部のndk-build
を実行する一般的な方法でAndroid Studioを使用していましたが、現在は実験的なNDKサポートを使用しています。最終パッケージに含まれていない共有ライブラリとのリンク方法を教えてください。
私が情報hereから理解しているところでは、jniLibsソースセットを使用すると、最終アプリケーションでバイナリがパッケージ化されますが、これは私が望むものではありません。私はコンパイル時にライブラリとリンクしたいと思いますし、自分のモジュールが利用可能な環境にロードされることを期待しています。
私の古い回避策は、Android.mk内にTARGET_NO_UNDEFINED_LDFLAGS :=
という行を追加することでしたが、私は新しいNDKサポートに相当する方法を認識していません。
現在、私はldFlags
に-L"<directory>"
を追加することによって、私のソースと一緒にライブラリが含まれているjni
ディレクトリを含めています、と私はシステムライブラリと同じように(現在は、私が唯一のARMv7のために構築しています)、以下のように、それらに対してリンク:
android.ndk {
moduleName = "ropecraftpe"
ldLibs.addAll(['log', 'name of one library', 'name of other library'])
ldFlags.add('-L"' + file('src/main/jni').absolutePath + '"')
cppFlags.add('-std=c++11')
stl = 'gnustl_shared'
abiFilters.addAll(['armeabi-v7a'])
}
これは、ほとんどの部分のために働く - 奇妙なことに、リンカは静的関数やグローバルへの呼び出し文句はありませんが、ライブラリのいずれかで定義されたコンストラクタを使用しようとしたときは文句を言うん:Error:(12) undefined reference to 'ClassName::ClassName(std::string const&, etc.)'
を。このクラスは、私自身のC++コードからインクルードされたヘッダファイルで定義されており、コンストラクタはリンクされた.so
に確実に存在します。
このプロジェクトを正常にリンクするにはどうすればよいですか?