Android-NDK “java.lang.UnsatisfiedLinkError”

标签 android android-ndk

我是 NDK 的新手。

我有一个具有以下功能的cpp文件

/* This is a trivial JNI example where we use a native method
 * to return a new VM String. See the corresponding Java source
 * file located at:
 *
 *   apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java
 */
JNIEXPORT jstring JNICALL
Java_com_some_player_MainActivity_stringFromJNI( JNIEnv* env,
                                                  jobject thiz )
{
    return env->NewStringUTF("Hello from JNI!");
}

调用它的Java类

package com.some.player;
public class MainActivity extends Activity {
    public native String stringFromJNI();
    static {
        System.loadLibrary("hello-jni");
    }

     @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       TextView tv = (TextView) findViewById(R.id.textView);
       tv.setText(stringFromJNI());
    }
}

生成文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.cpp

include $(BUILD_SHARED_LIBRARY)

问题是,当我调用 native 函数时,我得到了

07-28 23:42:34.256: E/AndroidRuntime(32398): java.lang.UnsatisfiedLinkError: stringFromJNI

最佳答案

其实我想通了,我需要添加

extern "C" {
    JNIEXPORT jstring JNICALL Java_com_some_player_MainActivity_stringFromJNI( JNIEnv* env, jobject thiz )
};

关于Android-NDK “java.lang.UnsatisfiedLinkError”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11704920/

相关文章:

android - 使用 Android NDK 和 GDB 断言后继续

c++ - 是否可以在 ARC 中使用 native C++ 代码?

java - 如何通过 NDK 在 Android 上使用 C 函数

android - React Native android TextInput无法显示键盘

android - Cordova/Phonegap 获取设备的电话号码 (Android & iOS)

android - 如何通过一个 Facebook 应用程序将 facebook 登录集成到多个 Android 包?

android - 将 ConstraintLayout 内的 FrameLayout 对齐到底部

Android ADT 版本更新抛出错误状态

android - 无法转换为 c\c++ 项目 eclipse ndk cocos2dx

安卓 REST 客户端 : best solution?