版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36946260/article/details/77735290
交叉编译
- 在一个平台下,编译出另一个平台能够执行的二进制代码
- 平台:windows,mac,os,linux
- 处理器:x86,arm,mips
交叉编译的原理
- 源代码–>编译–>连接–>可执行程序
- 模拟其他的平台特性
交叉编译的工具链
- 多个工具的集合,一个工具使用完后按着调用下一个工具
常见工具
- NDK:native developement kit: 开发jni必备,就是模拟其他平台特性来编译代码的工具
- CDT:c/c++ development tools:高亮显示c语音关键字
- cygwin:一个模拟器,可以在windows下运行linux指令
NDK目录结构
- docs:帮助文档
- build/tools: 预编译使用的二进制可执行文件
- sample:jni的使用例子
- source: ndk的编码
- toolchains:工具链
- ndk—build.cmd:编译打包c代码的一个指令
使用jni的步骤:(以下为调用c方法输出hello world为例)
- 在项目中根目录下创建jni文件夹
- 在jni文件中创建一个c文件
- 在java代码中,创建一个本地方法helloFromC:
public native String helloFromC(); - 在jni中定义函数实现这个方法,函数名必须为: “jstring Java_包名类名方法名(JNIEnv env,jobject obj)”
jstring Java_com_wangzp_packet_MainActivity_helloFromC(JNIEnv env,jobject obj) - 返回一个字符串,用c定义一个字符串:
char* cstr = “hello form c” - 把c的字符串转换成java字符串
jstring jstr = (*env)->NewStringUTF(env,cstr) - 在jni中创建Android.mk文件
- 在c文件中添加头文件“jni.h”头文件
- 在jni文件夹下执行ndk-build.cmd指令