eclipse中使用NDK的简便开发流程

第一步:在Java代码中写一个本地方法,这个本地方法既可以单独写在一个Java类中,也可以写在MainActivity中,本次demo写在一个单独的java类中;如下

package com.example.jnidemo2;
public class JNITest {
    public native int hello();
}

第二步:在dos窗口下使用javah命令生成头文件;首先进入到项目的src目录下,然后用"javah 本地方法的全路径",这样就生成了本地方法的头文件;

第三步:在eclipse中指定ndk路径

window->preferences->Android->NDK->NDK Locations添加你电脑上下载好的ndk文件

第四步:给工程添加jni的本地支持;

 右键工程->android tools->add native support...,设置动态库的名称。这一步可以自动在工程目录下生成jni目录及其目录下的mk文件和c文件;

第五步:把jni的cpp文件改成c文件,并将mk文件中的.cpp改成.c;

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := JNIDemo2 //这个动态库的名称就是第四步添加jni本地支持时设置的名称
LOCAL_SRC_FILES := JNIDemo2.c

include $(BUILD_SHARED_LIBRARY)

第六步:把头文件拖到jni目录下;

第七步:设置jni头文件的路径

 右键工程->properties->c/c++ General->Paths and Symbols->includes->add->选择你的ndk文件夹下的platforms\android-8\arch -arm\usr\inclde;其中paltforms下的android版本可以随意选;

第八步:把头文件(上面第二步生成的头文件)引入到c文件中,把头文件中的方法拷贝到c文件中,实现这个方法;如下

#include "com_example_jnidemo2_JNITest.h"
#include <stdio.h>
#include <stdlib.h>
JNIEXPORT jint JNICALL Java_com_example_jnidemo2_JNITest_hello
  (JNIEnv * env, jobject obj){
    return 6;
}

第九步:选中工程,点击eclipse上面的小锤子生成动态库;

第十步:在Java代码中调用本地方法,实现在MainActivity中的按钮点击事件中调用本地方法,实现如下

public class MainActivity extends Activity {
    private static final String TAG = "MainActivity";
    private Button callMethod;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        callMethod = (Button) findViewById(R.id.btu_call_method_from_c);
        callMethod.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                
                //1,加载动态库
                System.loadLibrary("JNIDemo2");
                //2,调用本地方法
                JNITest jniTest = new JNITest();
                int result = jniTest.hello();
                Log.e(TAG, "result==="+result);
            }
        });
    }    
}

猜你喜欢

转载自blog.csdn.net/yao_94/article/details/79134323