TOP
> 記事閲覧
Unity(Android)からの呼び出し方
| 件名 | : Re: Unity(Android)からの呼び出し方 |
| 投稿日 | : 2017/10/27 10:15 |
| 投稿者 | : 石田 |
| 参照先 | : https://qiita.com/ishidafuu/items/79581034ef81be062d0f |
迅速な対応ありがとうございました。
qiitaの方にも記事を投稿させていただきました。
今後、利用される方の参考になれば幸いです。
qiitaの方にも記事を投稿させていただきました。
今後、利用される方の参考になれば幸いです。
| 件名 | : Re: Unity(Android)からの呼び出し方 |
| 投稿日 | : 2017/10/27 08:44 |
| 投稿者 | : 管理人 |
| 参照先 | : |
Cの関数エントリポイントを追加した、AquesTalk10 Android V.1.0.1を公開しました。
これで、Unityからも使用できるようになりました。
石田さん、ご協力ありがとうございました。
これで、Unityからも使用できるようになりました。
石田さん、ご協力ありがとうございました。
| 件名 | : Re: Unity(Android)からの呼び出し方 |
| 投稿日 | : 2017/10/26 02:04 |
| 投稿者 | : 石田 |
| 参照先 | : |
ご回答ありがとうございます。
早速サポートページの方からメールをさせていただきました。
早速サポートページの方からメールをさせていただきました。
| 件名 | : Re: Unity(Android)からの呼び出し方 |
| 投稿日 | : 2017/10/25 08:00 |
| 投稿者 | : 管理人 |
| 参照先 | : |
詳細情報ありがとうございます。
おかげ様で、Unityの共有ライブラリのアクセスについて理解できました。
Java_aquestalk_AquesTalk_syntheWav()は、引数、戻り値共にJavaのオブジェクトになっています。
そのため、UnityからCのインターフェースで呼び出しても動かないと考えます。
念のため、AquesTalk10 AndroidのlibAquesTalk.soに、Cのインターフェースが残っていないか確認しましたが、すべて隠されていました。
ただ、Windows版と同様のCの関数インターフェースを出すことも技術的には可能です。
もし、興味がございましたら当社の問い合わせ先に直接メールください。
おかげ様で、Unityの共有ライブラリのアクセスについて理解できました。
Java_aquestalk_AquesTalk_syntheWav()は、引数、戻り値共にJavaのオブジェクトになっています。
そのため、UnityからCのインターフェースで呼び出しても動かないと考えます。
念のため、AquesTalk10 AndroidのlibAquesTalk.soに、Cのインターフェースが残っていないか確認しましたが、すべて隠されていました。
ただ、Windows版と同様のCの関数インターフェースを出すことも技術的には可能です。
もし、興味がございましたら当社の問い合わせ先に直接メールください。
| 件名 | : Re: Unity(Android)からの呼び出し方 |
| 投稿日 | : 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!”
---
諸々情報がおよび知識が不足しておりましてすいません。
>他の呼び出し可能な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!”
---

UnityからAquesTalk10を呼び出そうとしています。
Windowsではdllを問題なく呼び出せたのですが、
Androidからのsoの呼び出しが、色々と試してみたものの行うことが出来ません。
どなたか呼び出し方が分かる方はいらっしゃいますでしょうか?
また、ライブラリ側での.soファイルのUnity呼び出し対応予定などはありませんでしょうか?