Android——C语言、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文件
Android.mk文件中的hello.c也要换成hello.cpp c++的使用的环境变量结构体中,访问了c使用的结构体的函数指针,函数名全部都是一样的,只是参数去掉了结构体指针 访问函数指针时,把env前面的*号去掉,因为此时env已经是一级指针 clean,清除之前编译的残留文件 把声明函数的h文件放入jni文件夹中,include该h文件
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文件
相关文章
- android autosize原理,Android屏幕适配头条:autosize的原理
- android退出app代码,Android应用退出代码各种方式
- android activity singletask,Android Activity启动模式之singleTask实例详解
- android studio SDK 安装不成功
- Android 蓝牙开发(一)蓝牙通信「建议收藏」
- iphone4装android,iPhone4可安装Android实现双系统启动.pdf
- 基于Android的编译原理课程设计:C语言的预处理程序
- android应用程序_chrome Android
- android智能指针介绍
- Android进程间通信(二):通过AIDL介绍Binder的工作机制
- Android Automotive Framework调试技巧
- android 单点登录功能
- 【Android 应用开发】Android 返回堆栈管理 ( 默认启动模式 | 栈顶复用启动模式 | 栈内复用启动模式 | 单实例启动模式 | CLEAR_TOP 标识 )
- 【Android 内存优化】Android 原生 API 图片压缩代码示例 ( PNG 格式压缩 | JPEG 格式压缩 | WEBP 格式压缩 | 动态权限申请 | Android10 存储策略 )
- 【Android 热修复】Tinker 简介
- 【Android 逆向】IDA 工具使用 ( 函数窗口 Function window | 创建引用图 Xrefs graph to | 创建调用图 Xrefs graph from )
- 【错误记录】未安装该应用 ( 在 Android 12 之后 组件设置 android:exported=“false“ 属性 )
- 【Android NDK 开发】CMake 中查找链接 Android 自带动态库位置说明 ( ndk-bundleplatformsandroid-29arch-armusrlib )
- Android O 新特性和行为变更总结
- Android控制文字水平间距android:letterSpacing详解手机开发
- android版本检测Android程序的版本检测与更新实现介绍
- Android界面刷新的方法分享
- Android自定义ActionBar实例