zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

Android——C语言、JNI与低层调用详解手机开发

AndroidC语言手机开发 详解 调用 JNI
2023-06-13 09:20:14 时间
int:32位,能表示的数字是2的32次方个 最高位用来表示符号位,那么还剩下31位可以表示数值,所以能表示的数字就是2的31次方个 int的表示范围: 当最高位是0时:0~2147483647 当最高位是1是:-2147483648~-1

int* p: 定义一个指针变量p,p中存放一个内存地址,这个地址所存放的数据规定是int型 *p:  取出p中保存的内存地址存放的数据 所有语言所有平台,都只有值传递,引用传递 传递的值是内存地址 系统自动分配和释放 保存全局、静态、局部变量 在栈上分配内存叫静态分配 大小一般是固定的 程序员手动分配(malloc/new)和释放(free/java不用手动释放) 在堆上分配内存叫动态分配 一般硬件内存有多大就有多大
NDK:native developement kit:开发jni必备,就是模拟其他平台特性来编译代码的工具 CDT:C/C++ developement tools:高亮显示c语言关键字 cygwin:一个模拟器,可以再windows下运行linux指令 NDK目录结构 docs:帮助文档 build/tools:linux的批处理文件 platforms:编译c代码需要使用的头文件和类库 prebuilt:预编译使用的二进制可执行文件 sample:jni的使用例子 source:ndk的源码 toolchains:工具链 ndk-build.cmd:编译打包c代码的一个指令 使用jni 在项目根目录下创建jni文件夹 在jni文件中创建一个c文件

在java代码中,创建一个本地方法helloFromC

public native String helloFromC();

jstring Java_com_example_helloworld1_MainActivity_helloFromC(JNIEnv* env, jobject obj)

Android.mk文件中的hello.c也要换成hello.cpp c++的使用的环境变量结构体中,访问了c使用的结构体的函数指针,函数名全部都是一样的,只是参数去掉了结构体指针 访问函数指针时,把env前面的*号去掉,因为此时env已经是一级指针 clean,清除之前编译的残留文件 把声明函数的h文件放入jni文件夹中,include该h文件