01-JNI-基础
来源:互联网 发布:点云数据处理算法 编辑:程序博客网 时间:2024/05/29 17:47
1.交叉编译
介绍:
在一个平台去编译另一个平台上执行的本地代码cpu 平台 arm x86 mips操作系统平台 windows linux mac os原理:模拟不同平台的特性去编译代码
2.JNI开发工具介绍
ndk native develop kit
ndk 常用目录:
docs 帮助文档
platforms 平台, 选择项目支持的最小版本号的文件夹
include jni 开发中常用的头文件
samples gooles 官方提供的样例工程 .h文件
lib gooole打包好的 .so 文件
build/tools 批处理命令的存放位置
常用命令: ndk-build
3.JNI helloword开发
开发步骤:
1.java中
声明方法:
public native String helloFromC();
在适当位置加载库文件:
System.loadLibrary("hello"); String hello = helloFromC(); Toast.makeText(getApplicationContext(), hello, 0).show();
2.项目根目录创建jni文件夹
- 创建hello.c
#include <stdio.h> #include <stdlib.h> #include <jni.h> jstring Java_com_uu_jnihelo_MainActivity_helloFromC(JNIEnv* env,jobject thiz){ char* cstr = "hello from c!"; return (*env)->NewStringUTF(env,cstr); }
参数解释: 1. JNIEnv* env 是结构体JNINativwInterface 的二级指针 JNIEnv 是结构体JNINativeInterface的一级指针 所以使用env 调用结构体中的函数时要 采用以下方式: **env.函数名(); 或者 *env->函数名(); 2. jobject thiz 调用本地函数的java对象,在这个例子中 就是MainActivity的实例(class 文件) 3. c本地函数命名规则 java_包名_类名_本地方法名
- 创建Andorid.mk
注意:此文件一般只需改变图中标注的内容
*创建Application.mk
APP_ABI := armeabi x86 //支持的cpu APP_PLATFORM := android-19 //最低编译版本
编译c文件
cmd下:
E:\Android\NDK\01-JNIHelo> ndk-build
解释:项目所在路径 编译命令自动生成函数名称命令
cmd下:
E:\Android\NDK\01-JNIHelo\src>javah com.uu.jnihelo.MainActivity
解释: src 所在路径 javah 类所在相对路径
3.常见错误
java.lang.UnsatisfiedLinkError: Native method not found:(本地方法没有找到)
原因:本地函数名写错 忘记加载.so文件 没有调用System.loadlibrary
findLibrary returned null
原因:System.loadLibrary("libhello"); 加载动态链接库时 动态链接库名字写错平台类型错误 把只支持arm平台的.so文件部署到了 x86cpu的设备上 在jni目录下创建 Application.mk 在里面指定 APP_ABI := armeabi APP_PLATFORM := android-14
4.eclipse小技巧
0 0
- 01-JNI-基础
- JNI基础01
- JNI基础
- JNI基础
- JNI基础
- JNI基础
- JNI基础
- JNI基础
- jni基础
- Android JNI基础:什么是JNI
- Android JNI基础篇
- Android Jni基础学习
- JNI基础ABC
- JNI 入门基础
- java基础---JNI原理
- Android JNI开发基础
- Android基础--jni开发
- 安卓JNI基础
- c++this指针
- 1011笔记 mongodb+mongoose+angularjs
- Leetcode-80. Remove Duplicates from Sorted Array II
- BeanUtils入门
- 【UE4学习】15_UE4读取CSV文件并使用
- 01-JNI-基础
- 枚举类型
- 阿里一面总结
- HDU 5768 Lucky7 中国剩余定理+状压+容斥+快速乘法
- 逆向过程中全局变量和局部变量的识别
- HDU 5924 Mr. Frog’s Problem(想看证明的来)——2016CCPC东北地区大学生程序设计竞赛 - 重现赛
- 图的广度优先搜索与深度优先搜索
- MATLAB数组乘方
- selenium:1.关于安装selenium的坑