私はこれで数日間苦労しています。現時点では私は、単純なC++プロジェクト(1つの.H & 1 .cppファイル)と(簡単に完璧に働いていた)NDK helloJNIのサンプルコードを含む最小限のアプリケーションでそれをテストしています:AndroidスタジオのCファイル内で共有ライブラリ(.so)メソッドを呼び出す
ターゲット インポートAndroidのメーカーに、既存のC/C++ファイル(プロジェクト)
アプローチ は異なる可能性(数十)のいくつかを試した後、私は/には、次のステップは、私の目的のために最善の解決策になるだろうと思ったと思う:
- Visual Studio 2015 "Android用共有ライブラリを作成する"(または何か)から[共有ライブラリを作成する](成功)
- src/main /にサブフォルダを持つjniLibsフォルダを作成します)
- src/main/jniLibsにAndroid.mkファイルを追加する必要があります(?)
- Include文: "lib"と ".so"を含まないSystem.loadLibrary( "Calculator") MainActivity
このライブラリは、Android.mkと同じように、フォルダjniLibsにAndroid Studioにリストされています。さらに、apkをビルドすると、ライブラリは正常に圧縮され(解凍によって検証されます)、何のエラーもありません。 BUT:ライブラリのメソッドを呼び出すにはどうすればよいですか?私は他のスレッドで提供されているさまざまなソリューションを試してみましたが、私は上記の私の.mkまたは私のステップで何かを逃したと思います。
Sのようなネイティブlib.cppで
- 異なる
#include <myLib>
文を、試してみました - 異なるAndroid.mk設定(それでもないチュートリアルで私をずっと助けたので、私は、ファイルを作るために新たなんです私の特定の問題:サブフォルダのx86
- および他の多くのようにlibCalculator.soため:))
- その他の場所 - 単に気圧思い出さない(wasntme)
ご協力いただきありがとうございます。
Android.mk
LOCAL_PATH := $(call my-dir)
APP_ABI := x86
# library info
include $(CLEAR_VARS)
LOCAL_MODULE := Calculator
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/Calculator.so
LOCAL_EXPORT_C_INCLUDES := ..../Visual Studio 2015/Projects/SO_Library/SO_Library
include $(BUILD_SHARED_LIBRARY)
私はライブラリをAndroid Studioからコンパイルするようにしました。 .mkファイルの大きな助けをありがとう、私は検索から多く誤解されました。今私はもう一つの質問があります:私はそれを達成することができなかったので、どのように私は実行することができます(.jni構文でラップされていない)メソッドは、サンプルnative-lib.cppと言うことができますか? –
ようこそ!)。 .SOはメソッドではなく、共有ライブラリです。 C++ソースと静的ライブラリからビルドされています。 .SOライブラリに存在するメソッドを使用する場合は、 "native"キーワードを使用して呼び出すことができます。私はすでにそれを説明しました。 – JavadKhan