Android jni(2)
来源:互联网 发布:慧莫森软件科技 编辑:程序博客网 时间:2024/05/21 06:44
交叉编译
- 在一个平台下编译出另一个平台可以执行的二进制文件
- 不同平台是彼此不兼容的
- CPU平台:x86,arm,mips
- 系统平台:Windows,Linux,Mac os
- 原理:模拟另一个平台的特性去编译代码
开发工具
- NDK:native development kits
- CDT:C/C++ development tools
- 高亮显示C语言关键字
NDK目录
- build/tools:存放了大量Linux的批处理文件,用于模拟Linux特性交叉编译
- docs:离线帮助文档
- platforms:按照Android版本分了若干个文件夹
- 按系统平台分了3个文件夹
- usr:Unix system resource
- include:开发jni会用到的头文件
- lib:编译运行C代码时会用到的so动态链接库
- usr:Unix system resource
- 按系统平台分了3个文件夹
- sample:使用jni的案例
- sources:ndk的源码
- ndk-build:编译C代码,打包成so类库
JNI流程
- 在java代码定义本地方法
- 在项目根目录下创建jni文件夹,文件夹中创建c文件
- c文件中定义函数实现java的本地方法
- 函数的命名要注意返回值、包名、类名本地方法名和方法的参数
- 在jni文件夹下创建Android.mk文件,配置要编译的c文件是哪一个
- 编译打包c文件,生成so类库
- 在java代码中,加载so类库,然后调用本地方法
常见错误
找不到类库
- 类库名写错了
- 没有添加相应平台的支持
找不到本地方法
- 没有加载类库
- C函数名写错
javah
- 生成函数声明
- 1.7:在src目录下执行javah com.itheima.helloworld2.MainActivity
- 1.6:在bin/classes目录下执行
添加本地支持
- 自动创建jni文件夹,文件夹中自动创建cpp文件和Android.mk文件
- 项目可以指定jni.h头文件的路径
- c文件中可以实时编译
- 项目部署时,自动编译打包出so类库,然后才会部署到手机上
- 在jni–》application。mk–》添加“APP_ABI := armeabi x86”
javap
- 在bin/classes目录下执行javap -s com.itheima.helloworld2.MainActivity
0 0
- Android jni(2)
- Android JNI浅析(2)
- Android JNI浅析(2)
- android JNI 简单demo(2)之JNI demo 编写
- 【Tech-Android-Jni】Jni中基本方法(2)
- android jni 入门(2)jni编译生成so包
- Android NDK开发(2)----- JNI多线程
- Android NDK开发(2)----- JNI多线程
- Android NDK开发(2)----- JNI多线程
- Android NDK开发(2)----- JNI多线程
- Android NDK开发(2)----- JNI多线程
- Android NDK开发(2)----- JNI多线程
- Android NDK开发(2)----- JNI多线程
- Android JNI 面面观 2
- android jni(1)
- Android jni(1)
- Android jni(3)
- Android jni包裹文件(jni wrapper)
- 线程池 Executors
- 二叉查找树的查找、插入和删除
- synchronized同步方法2
- virtualenv 使用
- 基于docker compose的应用服务部署
- Android jni(2)
- HBuilder封装APP
- 使用积分图进行法线估计
- Android启动流程分析之二:内核的引导
- 《Java虚拟机原理图解》 1.2.2、Class文件中的常量池详解(上)
- 记录
- 使用shell脚本守护node进程
- 代码解读
- boost学习之BOOST_PP_REPEAT