私は C++ で書かれた古いアプリを持っています。それを に移植しandroid
、Eclipse でデバッグしようとしていますが、プロジェクトはエラー メッセージで停止しています:
10-03 12:21:55.344: D/dalvikvm(15262): lib /data/data/com.android.test/lib/libtest.so 0x40effa48 を読み込もうとしています
アプリケーションは、他のメッセージを表示せずに停止します。続ける方法がわかりません。
私は C++ で書かれた古いアプリを持っています。それを に移植しandroid
、Eclipse でデバッグしようとしていますが、プロジェクトはエラー メッセージで停止しています:
10-03 12:21:55.344: D/dalvikvm(15262): lib /data/data/com.android.test/lib/libtest.so 0x40effa48 を読み込もうとしています
アプリケーションは、他のメッセージを表示せずに停止します。続ける方法がわかりません。
ライブラリに次の関数を追加する必要があります。
#include <jni.h>
jint JNI_OnLoad( JavaVM* vm, void* reserved )
{
JNIEnv* jEnv = NULL;
if ( JNI_OK != ( *vm )->GetEnv( vm, (void**)&jEnv, JNI_VERSION_1_4 ) ){
return -1;
}
return JNI_VERSION_1_4;
更新: JNI_OnLoad
() が存在しないことは問題ではありません...
コメントに、グローバル初期化子がたくさんあると書いています - JNI_OnLoad()
Signaturesでそのようなグローバル初期化を行うことを検討してください:
/*
* Class: com_android_test_testLib
* Method: init
* Signature: (II)V
*/
JNIEXPORT void JNICALL Java_com_android_test_testLib_init
(JNIEnv *, jclass, jint, jint);
/*
* Class: com_android_test_testLib
* Method: uninit
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_android_test_testLib_uninit
(JNIEnv *, jclass);
/*
* Class: com_android_test_testLib
* Method: touch
* Signature: (IIII)V
*/
JNIEXPORT void JNICALL Java_com_android_test_testLib_touch
(JNIEnv *, jclass, jint, jint, jint, jint);
/*
* Class: com_android_test_testLib
* Method: update
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_android_test_testLib_update
(JNIEnv *, jclass);