转载请注明原文地址
笔者把Android重难点和读书笔记都整理在github上:https://github.com/miomin/AndroidDifficulty
如果你觉得对你有帮助的话,希望可以star/follow一下哟,我会持续保持更新。
一、Java和C/C++混编的步骤
(1)在Java代码中声明本地方法
(2)实现Java本地接口(JNI)粘合层
(3)创建Android makefile文件(Android Studio不需要,Gradle代替)
(4)使用C/C++实现native方法
(5)编译native库
(6)加载native库
1、声明本地方法
- JniUtils.java
private static native long fibonacciNative(int n);
写好之后clean然后rebuild,可以看到生成了classes文件夹。
2、实现JNI粘合层
- 打开Terminal,输入命令,进入到debug文件夹。
cd app/build/intermediates/classes/debug
- 继续输入命令,生成头文件。
javah -jni com.scu.miomin.learnndk.JniUtils
这个时候查看debug文件夹,可以看到多了一个.h文件,剪切一下,在scr/main下创建jni文件夹,把这个.h文件粘贴进去。
下面上代码
com_scu_miomin_learnndk_JniUtils.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_scu_miomin_learnndk_JniUtils */
#ifndef _Included_com_scu_miomin_learnndk_JniUtils
#define _Included_com_scu_miomin_learnndk_JniUtils
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jlong JNICALL Java_com_scu_miomin_learnndk_JniUtils_fibonacciNative
(JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif