安卓---JNI使用
交叉编译
- 系统平台:Windows、Mac OS、Linux
- CPU平台:ARM、X86、MIPS
- 概念:在一个平台下打包编译出还有一个平台能够运行的程序#交叉编译原理
- 源代码->预编译->编译->链接->可运行程序
- 原理:模拟还有一个平台的特性去编译代码#交叉编译工具链*ToolChains,一个工具运行完成自己主动运行下一个工具#常见工具
- NDK:native developement kits
- CDT:eclipse插件,C/C++ developement tool。高亮显示C语言keyword
- cygwin:Linux命令行模拟器#NDK文件夹结构
- doc:帮助文档
- build/tools:linux的批处理文件
- platforms:开发jni过程中会用到的头文件和C语言类库
- prebuilt:预编译时用到的工具
- samples:JNI的使用案例
- sources:NDK源代码
- toolchains:编译打包时用到的工具链
- ndk-build.cmd:開始编译打包JNI代码
JNI开发流程
- 创建jni目录,创建c文件
- 在java类中定义本地方法
在C文件里定义函数实现本地方法
//函数名必须是Java开头,_连接包名类名方法名
jstring Java_com_itheima_helloworld1_MainActivity_helloFromC(JNIEnv* env, jobject thiz)
创建Android.mk文件。指定要编译的c文件和模块名字
在jni文件夹下运行ndk-build.cmd指令。编译打包出动态链接库
在java代码中载入动态链接库。调用本地方法
部署项目
常见错误
找不到类库
- 没有加入x86支持
- 载入动态链接库时写错模块名###本地方法找不到
- 忘记载入动态链接库
- c函数名写错
javah
- 自己主动生成jni样式的头文件
- java1.7:在src文件夹下 运行javah com.itheima.helloworld2.MainActivity
- java1.6:在bin/classes文件夹下 运行javah com.itheima.helloworld2.MainActivity
加入本地支持
- 须要先指定NDK目录
- 自己主动生成jni目录和cpp文件、Android.mk文件
- 能够指定include目录的路径
- 每次部署项目时。开发环境会自己主动编译打包出so类库
javap
- 打印方法的签名
- 在bin/classes文件夹下 javap -s com.itheima.calljava.MainActivity
安卓---JNI使用的更多相关文章
- 安卓JNI使用C++类
安卓JNI使用C++类,同时可使用C++的类成员变量,这就必须保证程序持续保存Native状态,即长期维护C++对象的地址.完成初始化之后,需要使用对象成员的java层函数需要传入对象的地址. 一.N ...
- 安卓JNI使用OpenCV
OpenCV也有Java数据结构的包,不过计算速度还是很慢,非不得已不使用此种方式调用OpenCV.使用NDK编写底层OpenCv的调用代码,使用JNI对代码进行封装,可以稍微提高一点效率. 参考链接 ...
- 安卓JNI精细化讲解,让你彻底了解JNI(一):环境搭建与HelloWord
目录 1.基础概念 ├──1.1.JNI ├──1.2.NDK ├──1.3.CMake与ndk-build 2.环境搭建 3.Native C++ 项目(HelloWord案例) ├── 3.1.项 ...
- 安卓JNI精细化讲解,让你彻底了解JNI(二):用法解析
目录 用法解析 ├── 1.JNI函数 │ ├── 1.1.extern "C" │ ├── 1.2.JNIEXPORT.JNICALL │ ├── 1.3.函数名 │ ├── 1 ...
- 解决安卓JNI native 线程不能正常退出问题二
直面这个解决方法的可以看我转载的博客 https://www.cnblogs.com/Carlsblog/p/9438016.html 本方法是个投机取巧法,不过也解决了不能正常 ...
- 在安卓JNI/NDK中使用C++11
在VS下编写的程序移植到Eclipse下,出现了问题: this file requires compiler and library support for iso C++ 2011 standar ...
- android Jni NDK开发环境搭建及其简单实例的编写
android Jni NDK开发环境搭建及其简单实例的编写 由于工作需要,需要采用开发想要的JNI,由于之前没有接触过安卓的开发,所以更加网上的帖子,学习了下.遇到了些问题,然后总结下学习过程中 ...
- Windows下将ImageMagick移植到Android平台
Windows下将ImageMagick移植到Android平台 原文链接 http://www.pedant.cn/2014/06/18/imagemagick-ported-android/ I ...
- 【Android Studio安装部署系列】二十五、Android studio使用NDK生成so文件和arr文件
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio使用ndk的简单步骤. NDK环境搭建 下载NDK 下载链接:https://developer.and ...
随机推荐
- OI 知识体系
OI Training 知识体系结构 初级 1.1 C语言基础 1.1.1 C语言程序结构(A+B Problem) 1.1.2 变量,常量,数据类型,输入与输出 1.1.3 条件语句 1.1.4 循 ...
- Balanced Lineup(RMQ)
原题传送门 就是裸RMQ啊.. 求区间最大值和区间最小值,一看就像RMQ,当然线段树貌似也可以. 至于算法嘛.自己学~(好吧,放个传送门...) 然后就是最后把maxsum-minsum就好啦233~ ...
- 转 DNS原理及其解析过程【精彩剖析】
DNS原理及其解析过程[精彩剖析] http://369369.blog.51cto.com/319630/812889/ DNS原理及其解析过程 精彩剖析 网络通讯大部分是基于T ...
- 非常好!!!Linux源代码阅读——中断【转】
Linux源代码阅读——中断 转自:http://home.ustc.edu.cn/~boj/courses/linux_kernel/2_int.html 目录 为什么要有中断 中断的作用 中断的处 ...
- python3使用urllib获取set-cookies
#!/usr/bin/env python # encoding: utf-8 import urllib.request from collections import defaultdict re ...
- 使用Sublime Text 3 编写python
1,下载Sublime Text 3 链接:http://pan.baidu.com/s/1eROBpB0 密码:cqjr 2,安装 注意安装时去掉捆绑的软件安装选项,有两处. 3,安装完成打开软件, ...
- J.U.C并发框架源码阅读(九)LinkedBlockingQueue
基于版本jdk1.7.0_80 java.util.concurrent.LinkedBlockingQueue 代码如下 /* * ORACLE PROPRIETARY/CONFIDENTIAL. ...
- 第十四届华中科技大学程序设计竞赛 K Walking in the Forest【二分答案/最小化最大值】
链接:https://www.nowcoder.com/acm/contest/106/K 来源:牛客网 题目描述 It's universally acknowledged that there'r ...
- "科林明伦杯"哈尔滨理工大学第八届程序设计竞赛 题解
题目链接 Problems Problem A 快速幂累加即可. #include <cstdio> #include <cstring> #include <iost ...
- Python的并发并行[4] -> 并发[0] -> 利用线程池启动线程
利用线程池启动线程 submit与map启动线程 利用两种方式分别启动线程,同时利用with上下文管理来对线程池进行控制 from concurrent.futures import ThreadPo ...