Android NDK 学习笔记(一)

来源:互联网 发布:话费充值软件 编辑:程序博客网 时间:2024/06/05 08:17

1.创建个新项目

2.新建个类

public class AddNum {
    static
    {
        try {
            System.loadLibrary("AddNum");
        } catch (Exception e) {
        }
    }


    public native int numAdd(int num1, int num2);
}


3.然后在cmd 下进入该类的同级目录运行javac AddNum.java 生成.class 文件

4.在项目的java目录下运行javah 包名.类名 生成一个.h文件

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_yyf_test_test01_AddNum */#ifndef _Included_com_yyf_test_test01_AddNum#define _Included_com_yyf_test_test01_AddNum#ifdef __cplusplusextern "C" {#endif/* * Class:     com_yyf_test_test01_AddNum * Method:    numAdd * Signature: (II)I */JNIEXPORT jint JNICALL Java_com_yyf_test_test01_AddNum_numAdd  (JNIEnv *, jobject, jint, jint);#ifdef __cplusplus}#endif#endif


5.新建一个jni文件夹,然后在新建一个.cpp 文件 将.h 文件中的内容copy 过去放入jni目录下,修改其方法 如下

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_yyf_test_test01_AddNum */#ifndef _Included_com_yyf_test_test01_AddNum#define _Included_com_yyf_test_test01_AddNum#ifdef __cplusplusextern "C" {#endif/* * Class:     com_yyf_test_test01_AddNum * Method:    numAdd * Signature: (II)I */JNIEXPORT jint JNICALL Java_com_yyf_test_test01_AddNum_numAdd  (JNIEnv * env, jobject obj, jint num1, jint num2){    return num1+num2;  }#ifdef __cplusplus}#endif#endif

6.编写android.mk 文件,将它放入jni下

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)#编译生成的文件的类库叫什么名字LOCAL_MODULE    := AddNum#要编译的c文件LOCAL_SRC_FILES := add.cppinclude $(BUILD_SHARED_LIBRARY)

7.在build.gradle 中指定编译文件位置

externalNativeBuild {    ndkBuild {        path 'src/main/jni/Android.mk'    }}

8.build 项目会发现生成了一个.externalNativeBuild文件夹,so 文件就在里面


9.在mainActivity中调用

public class MainActivity extends AppCompatActivity {    private AddNum addNum;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        addNum = new AddNum();        int num = addNum.numAdd(2, 3);        Toast.makeText(this, num + "", Toast.LENGTH_SHORT).show();    }}

10,运行,ok 大功告成.


0 0