NDK を使用して、Android 用の FMOD を使用する Android プラグインを作成しようとしています (正常に動作する FMOD と対話する必要があるサードパーティのオープンソース C++ ライブラリも使用しているため、これをネイティブにする必要があります)。NDK OK ですべてをコンパイルできますが、Unity プロジェクトを作成すると、FMOD 共有ライブラリを使用している場合、常に DLLNotFoundException が発生します。私が作成した共有ライブラリは、FMOD 呼び出しを含めなくても正常に動作することに注意してください。そのため、Unity プレーヤーが FMOD 共有ライブラリを見つけられないことは確実です。
これは私のプラグインコードです:
extern "C" {
#endif
static int mycount = 0;
int FooTest(){
unsigned int version;
FMOD::System* system_;
//Init
FMOD_RESULT result = FMOD::System_Create(&system_);
if (result != FMOD_OK) return -1;
result = system_->getVersion(&version);
if (result != FMOD_OK) return -1;
if (version < FMOD_VERSION)
{
//printf("Error! You are using an old version of FMOD %08x. This program requires %08x\n", version, FMOD_VERSION);
return -1;
}
result = system_->init(32, FMOD_INIT_NORMAL, 0);
if (result != FMOD_OK) return -1;
return mycount++;
}
#ifdef __cplusplus
}
#endif
すべての FMOD をコメントアウトすると、返されたカウントが増加し、画面に表示されます。FMOD 呼び出しでビルドするたびに、「DLLNotFoundException:FooTest」が発生します。
plugins/android ディレクトリとプロジェクトのルートの両方に fmodex.so および fmodexL.so ライブラリを含め、生成された APK の lib/armeabi フォルダーに存在することを確認しました。
興味のある方は、共有ライブラリの生成に使用する Android メイクファイルを投稿することもできます。