Re: Unity(Android)からの呼び出し方 ( No.1 ) |
- 日時: 2017/10/24 17:14
- 名前: 管理人
- UnityのAndroid環境にて、一般的なso(共有ライブラリ)の呼び出しという話ではなく、AquesTalkのsoだと呼び出せないということでしょうか。
Unityを使ったことがないのですが、他の呼び出し可能なsoと、AquesTalkとの違いに、なにかお気づきの点があったら教えてください。 また、呼び出せないのは、ビルド時でなく、実行時の話なのでしょうか? 呼び出せないとは、呼び出し時にエラーが出るということでしょうか?
|
Re: Unity(Android)からの呼び出し方 ( No.2 ) |
- 日時: 2017/10/25 02:51
- 名前: 石田
- 迅速な返答ありがとうございます。
諸々情報がおよび知識が不足しておりましてすいません。
>他の呼び出し可能なsoと、AquesTalkとの違いに、なにかお気づきの点があったら教えてください。 参考になるか分かりませんが、こちらにUnity公式が用意した ネイティブプラグインの動作参考例があり、 https://docs.unity3d.com/ja/current/Manual/AndroidNativePlugins.html プラグイン制作のサンプルがページ下部にあります。 パッケージがUnityの独自形式なので、以下に共有ライブラリをビルドするための構成ファイル (Android.mk、Application.mk、NativeCode.c、build_plugin.sh)と、その内容を 文面の末尾に記述します。
上記で作成されたと思われる同梱のNativeCode.soはUnityから呼び出すことが出来ました。
>また、呼び出せないのは、ビルド時でなく、実行時の話なのでしょうか? >呼び出せないとは、呼び出し時にエラーが出るということでしょうか? ビルドは問題なく出来ます。呼び出しも関数に届いてはいるようなのですが アプリが即落ちてしまいます。
エントリポイントの指定として「syntheWav」では関数名が見つからず、 soファイルをバイナリエディタで開くことで見つかった Java_aquestalk_AquesTalk_syntheWav と指定することで一応呼び出されたようで、アプリが落ちました。
syntheWav関数が処理的に動作しないのかと思い、 Java_aquestalk_AquesTalk_setDevKey Java_aquestalk_AquesTalk_setUsrKey も適当な引数で呼び出しましたが、同様にアプリが落ちました。
以下、アプリが落ちた瞬間のlogcat内容です。
10-25 02:05:34.569 2149-2171/? W/linker: libAquesTalk.so: unused DT entry: type 0x6ffffffe arg 0xe78 10-25 02:05:34.569 2149-2171/? W/linker: libAquesTalk.so: unused DT entry: type 0x6fffffff arg 0x1 --------- beginning of crash 10-25 02:05:34.743 2149-2171/? A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0xa326 in tid 2171 (UnityMain) 10-25 02:05:34.743 2149-2171/? I/libc: Suppressing debuggerd output because prctl(PR_GET_DUMPABLE)==0 --------- beginning of system 10-25 02:05:34.785 977-1793/? W/ActivityManager: getRunningAppProcesses: caller 10153 does not hold REAL_GET_TASKS; limiting output 10-25 02:05:34.797 977-2353/? I/WindowState: WIN DEATH: Window{d86f13 u0 com.isdf/com.unity3d.player.UnityPlayerActivity}
何か参考になりましたら幸いです。 長文失礼いたしました。
以下共有ライブラリ構成ファイルです。 (BBSの禁止文字に引っかかったので、一部全角文字を使用しています。)
Android.mk --- include $(CLEAR_VARS)
# override strip command to strip all symbols from output library; no need to ship with those.. # cmd-strip = $(TOOLCHAIN_PREFIX)strip $1
LOCAL_ARM_MODE := arm LOCAL_PATH := $(NDK_PROJECT_PATH) LOCAL_MODULE := libnative LOCAL_CFLAGS := -Werror LOCAL_SRC_FILES := NativeCode.c LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY) ---
Application.mk --- APP_OPTIM := release APP_ABI := armeabi APP_PLATFORM := android-8 APP_BUILD_SCRIPT := Android.mk ---
NativeCode.c --- float add(float x ,float y) { return x + y; } ---
build_plugin.sh --- ♯!/bin/sh echo ”” echo ”Compiling NativeCode.c...” $ANDROID_NDK_ROOT/ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk $* mv libs/armeabi/libnative.so ..
echo ”” echo ”Cleaning up / removing build folders...” #optional.. rm -rf libs rm -rf obj
echo ”” echo ”Done!”
---
 |
Re: Unity(Android)からの呼び出し方 ( No.3 ) |
- 日時: 2017/10/25 08:00
- 名前: 管理人
- 詳細情報ありがとうございます。
おかげ様で、Unityの共有ライブラリのアクセスについて理解できました。
Java_aquestalk_AquesTalk_syntheWav()は、引数、戻り値共にJavaのオブジェクトになっています。 そのため、UnityからCのインターフェースで呼び出しても動かないと考えます。
念のため、AquesTalk10 AndroidのlibAquesTalk.soに、Cのインターフェースが残っていないか確認しましたが、すべて隠されていました。 ただ、Windows版と同様のCの関数インターフェースを出すことも技術的には可能です。 もし、興味がございましたら当社の問い合わせ先に直接メールください。
|
Re: Unity(Android)からの呼び出し方 ( No.4 ) |
- 日時: 2017/10/26 02:04
- 名前: 石田
- ご回答ありがとうございます。
早速サポートページの方からメールをさせていただきました。
|
Re: Unity(Android)からの呼び出し方 ( No.5 ) |
- 日時: 2017/10/27 08:44
- 名前: 管理人
- Cの関数エントリポイントを追加した、AquesTalk10 Android V.1.0.1を公開しました。
これで、Unityからも使用できるようになりました。 石田さん、ご協力ありがとうございました。
|
Re: Unity(Android)からの呼び出し方 ( No.6 ) |
- 日時: 2017/10/27 10:15
- 名前: 石田
- 参照: https://qiita.com/ishidafuu/items/79581034ef81be062d0f
- 迅速な対応ありがとうございました。
qiitaの方にも記事を投稿させていただきました。 今後、利用される方の参考になれば幸いです。
|