0

我正在开发一个本机应用程序名称 test.c,我想从本机 C 文件返回 arrayofByte,我能够编译并在运行我的应用程序时生成 .so 文件

    05-08 13:04:08.477: D/dalvikvm(945): No JNI_OnLoad found in /data/data/com.ssg.nativelibtest/lib/libnativelibtest.so 0x45f3da78, skipping init  

在我的应用程序中没有任何崩溃的情况下收到此消息,因此如何解决 Nativefile 的调用。作为参考,我提供了我的 test.c 文件,这是用 CI 编写的文件,正在调用 .so 文件 Java 应用程序

jbyteArray Java_com_ssg_nativelibtest_MainActivity_getEncryptionKey(JNIEnv * env, jobject obj)
{

    unsigned char ukey[] = { 'H','A','R','D','C','O','D','E','D',' ','K','E','Y','1','2','3'};
    int lengthOfArray = (*env)->GetArrayLength(env, ukey);
    //jsize lengthOfArray =(*env)->GetArrayLength(env, ukey);
    jbyteArray byteKey = (*env)->NewByteArray(env, lengthOfArray);
    (*env)->SetByteArrayRegion(env, byteKey, 0, lengthOfArray, (jbyte *)ukey);
    return byteKey;
}
4

1 回答 1

0

请参阅文档

如果用 C++ 编写,JNI_OnLoad 函数应该如下所示:

jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
    JNIEnv* env;
    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
        return -1;
    }

    // Get jclass with env->FindClass.
    // Register methods with env->RegisterNatives.

    return JNI_VERSION_1_6;
}
于 2013-05-08T09:01:55.767 回答