交叉编译

  • 系统平台: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开发流程

  1. 创建jni目录,创建c文件
  2. 在java类中定义本地方法
  3. 在C文件里定义函数实现本地方法

    //函数名必须是Java开头,_连接包名类名方法名
    jstring Java_com_itheima_helloworld1_MainActivity_helloFromC(JNIEnv* env, jobject thiz)
  4. 创建Android.mk文件。指定要编译的c文件和模块名字

  5. 在jni文件夹下运行ndk-build.cmd指令。编译打包出动态链接库

  6. 在java代码中载入动态链接库。调用本地方法

  7. 部署项目

常见错误

找不到类库

  • 没有加入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使用的更多相关文章

  1. 安卓JNI使用C++类

    安卓JNI使用C++类,同时可使用C++的类成员变量,这就必须保证程序持续保存Native状态,即长期维护C++对象的地址.完成初始化之后,需要使用对象成员的java层函数需要传入对象的地址. 一.N ...

  2. 安卓JNI使用OpenCV

    OpenCV也有Java数据结构的包,不过计算速度还是很慢,非不得已不使用此种方式调用OpenCV.使用NDK编写底层OpenCv的调用代码,使用JNI对代码进行封装,可以稍微提高一点效率. 参考链接 ...

  3. 安卓JNI精细化讲解,让你彻底了解JNI(一):环境搭建与HelloWord

    目录 1.基础概念 ├──1.1.JNI ├──1.2.NDK ├──1.3.CMake与ndk-build 2.环境搭建 3.Native C++ 项目(HelloWord案例) ├── 3.1.项 ...

  4. 安卓JNI精细化讲解,让你彻底了解JNI(二):用法解析

    目录 用法解析 ├── 1.JNI函数 │ ├── 1.1.extern "C" │ ├── 1.2.JNIEXPORT.JNICALL │ ├── 1.3.函数名 │ ├── 1 ...

  5. 解决安卓JNI native 线程不能正常退出问题二

    直面这个解决方法的可以看我转载的博客            https://www.cnblogs.com/Carlsblog/p/9438016.html 本方法是个投机取巧法,不过也解决了不能正常 ...

  6. 在安卓JNI/NDK中使用C++11

    在VS下编写的程序移植到Eclipse下,出现了问题: this file requires compiler and library support for iso C++ 2011 standar ...

  7. android Jni NDK开发环境搭建及其简单实例的编写

    android  Jni  NDK开发环境搭建及其简单实例的编写 由于工作需要,需要采用开发想要的JNI,由于之前没有接触过安卓的开发,所以更加网上的帖子,学习了下.遇到了些问题,然后总结下学习过程中 ...

  8. Windows下将ImageMagick移植到Android平台

    Windows下将ImageMagick移植到Android平台 原文链接  http://www.pedant.cn/2014/06/18/imagemagick-ported-android/ I ...

  9. 【Android Studio安装部署系列】二十五、Android studio使用NDK生成so文件和arr文件

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio使用ndk的简单步骤. NDK环境搭建 下载NDK 下载链接:https://developer.and ...

随机推荐

  1. Cow Navigation(USACO)

    题目大意: 给定一个N*N的矩阵,并告诉你每一个格子能否经过,要求你求出(n,1)到(1,n)的最短路径的操作数. 其中操作有2种,第一种是沿着目前的方向走一格,第二种是向左或向右转90° 由于题目设 ...

  2. 【原创】Linux环境下的图形系统和AMD R600显卡编程(10)——R600显卡的3D引擎编程

    3D图形处理流水线需要流经多个硬件单元才能得到最后的渲染结果,流水线上的所有的硬件单元必须被正确编程,才能得到正确的结果. 总体上看,从图形处理流水线的源头开始,需要准备好vertex和index,在 ...

  3. Linux中brk()系统调用,sbrk(),mmap(),malloc(),calloc()的异同【转】

    转自:http://blog.csdn.net/kobbee9/article/details/7397010 brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的:  ...

  4. java基础练习 19

    public class Ninetheen { /*求1+2!+3!+...+20!的和*/ public static void main(String[] args){ int i,j; lon ...

  5. 关于backBarButtonItem的N种方法

    替换返回按钮的文字 很多app的要求所有的返回按钮的title都是“返回”,如果上一层题目文字太多,下一层的返回按钮文字就会显示不完全,而且这样可以使软件显得整洁. 方法一: 最普通的想法,A界面的n ...

  6. Laravel 项目使用 Carbon 人性化显示文章发表时间

    比如说有这样一个需求:一篇文章的发表时间: **距离现在时间** **显示格式** < 1小时 xx分钟前 1小时-24小时 xx小时前 1天-10天 xx天前 >10天 直接显示日期 针 ...

  7. [scrapy] exceptions.TypeError:XXX is not json serializable

    原因是spider获取items.py中定义的字段的时候,忘记extract()了 def parseItem(self,response): sel = Selector(response) ite ...

  8. Tomcat服务器与HTTP协议

    Tomcat服务器与HTTP协议 一.  Tomcat服务器 1.tomcat服务器 1.web :网页,它代表的是网络上的资源.(java技术开发动态的web资源,即动态web页面,在Java中,动 ...

  9. Uva 11542 Square

    题目中说数组中的数的最大质因子不超过500,我们筛出≤500的质数,然后考虑对每个质数列一个方程组.. 然后这几乎就是高斯消元求解异或方程组的模板题了.... 注意答案是 2^(自由元数量)-1,因为 ...

  10. JavaSript模块规范 - AMD规范与CMD规范介绍 (转)

    JavaSript模块化   在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发?       模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题 ...