Android NDK找不到本地函数

文章标签: android-ndk,android
2015-1-3 11:34:58     人阅读    

package com.example.maxim.myapplication;

//...

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView  tv = new TextView(this);
        tv.setText( stringFromJNI() );
        setContentView(tv);
    }

    public native String  stringFromJNI();

    static {
        System.loadLibrary("hello-jni");
        }


}


C代码:

#include <string.h>
#include <jni.h>


    jstring Java_com_example_maxim_myapplication_MainActivity_stringFromJNI( JNIEnv* env,
                                                      jobject thiz )
    {


        return (*env)->NewStringUTF(env, "Hello from JNI !  Compiled with ABI .");
    }

LogCat输出:

Process: com.example.maxim.myapplication, PID: 2306
    java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String com.example.maxim.myapplication.MainActivity.stringFromJNI() (tried Java_com_example_maxim_myapplication_MainActivity_stringFromJNI and Java_com_example_maxim_myapplication_MainActivity_stringFromJNI__)
            at com.example.maxim.myapplication.MainActivity.stringFromJNI(Native Method)
 ....

包的名称是相同的函数名,但是有一个错误包名称的名称是一样的功能,但有一个错误

处理方法

 

你应该在你的共享对象中声明在你的本地方法

JNIEXPORT jstring Java_com_example_maxim_myapplication_MainActivity_stringFromJNI (JNIEnv *env, jobject obj)


关键的一点是 JNIEXPORT
它可以  链接/编译/暴露/导出你的本机方法

你还需要确认一下 libhello-jni.so 是否被加载
添加如下测试

jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
{

    LOGI("In JNI_OnLoad()");
    return JNI_VERSION_1_6; // or the version corresponded to your NDK version
}


原文地址:http://www.itmmd.com/201501/431.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

My app 在Android Studio中一直崩溃..运行不起来   上一篇
下一篇  android ImageView 显示 144dp bitmap位图
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!