NDK开发汇总
cpu识别的是“0101”的字符
c/c++ ========= 二进制文件
编译:xxx.c ------> windows .obj 语法 Linux .o
链接:.o -----> log.so
三段式
cppFlags “-frtti -fexceptions”
new Project 勾选下面两项即可,在CMakeList.txt中配置对应的c文件声明
CMakeList.txt 用来进行JNI引用的配置
add_library 指定需要编译那些文件
target_link_libraries 指定了需要链接那些so库
JNI项目一定包含指定编译文件和需要链接哪些so库这两个动作
注意: 新建项目报错:External Native Build Issues
解决方法:提升.build:gradle版本
由
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
}
提升至:
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
}
public class FileUtils {
public static native void diff(String path,String pattern_Path,int file_number );
}
C:\rj\workspace\NDK\app\src\main\java\com\ray\ndk\ndk>javac FileUtils.java
然后javah,注意两条命令的路径
C:\rj\workspace\NDK\app\src\main\java>javah -classpath . -jni com.ray.ndk.ndk.FileUtils
最好在\java路径下生成一个com_ray_ndk_ndk_FileUtils.h文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class com_ray_ndk_ndk_FileUtils */
#ifndef _Included_com_ray_ndk_ndk_FileUtils
#define _Included_com_ray_ndk_ndk_FileUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_ray_ndk_ndk_FileUtils
* Method: diff
* Signature: (Ljava/lang/String;Ljava/lang/String;I)V
*/
JNIEXPORT void JNICALL Java_com_ray_ndk_ndk_FileUtils_diff
(JNIEnv *, jclass, jstring, jstring, jint);
#ifdef __cplusplus
}
#endif
#endif
#include "com_ray_ndk_ndk_FileUtils.h"
#include
#define TAG "RAY"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__)
JNIEXPORT void JNICALL Java_com_ray_ndk_ndk_FileUtils_diff
(JNIEnv * env, jclass clazz, jstring path, jstring pattern_Path, jint file_num){
LOGI("JNI的方法被调用");
}
public class FileUtils {
static {
System.loadLibrary("native-lib");
}
public static native void diff(String path,String pattern_Path,int file_number );
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
diff();
}
public void diff(){
Log.d("RAY", "diff");
FileUtils.diff("ss","33" ,4 );
}
}
代码