4

我有一个由 C++ 编写的旧应用程序,我正在尝试将其移植到androidEclipse 并使用 Eclipse 对其进行调试,但该项目正在停止并出现错误消息:

10-03 12:21:55.344: D/dalvikvm(15262)​​: 试图加载 lib/data/data/com.android.test/lib/libtest.so 0x40effa48

应用程序只是停止而不给出任何其他消息。我不知道该怎么办继续。

4

2 回答 2

2

我有同样的问题,但它是由这个错误引起的

所以只需从 Application.mk 中删除 NDK_TOOLCHAIN_VERSION=4.7 我只有在带有 android-ndk-r8e 的 Android 2.2 上才有这个

于 2013-07-07T17:32:57.153 回答
0

您必须将以下功能添加到您的库中:

#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()

签名中进行此类全局初始化:

/*
 * 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);
于 2012-10-03T08:28:28.387 回答