Android NDK 学习笔记(一)

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 
/* Header for class com_yyf_test_test01_AddNum */
#ifndef _Included_com_yyf_test_test01_AddNum
#define _Included_com_yyf_test_test01_AddNum
#ifdef __cplusplus
extern "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 
/* Header for class com_yyf_test_test01_AddNum */

#ifndef _Included_com_yyf_test_test01_AddNum
#define _Included_com_yyf_test_test01_AddNum
#ifdef __cplusplus
extern "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.cpp
include $(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 大功告成.


你可能感兴趣的:(Android)