JNI和NDK编程

1、背景                                                               

Java JNI的本意是Java Native Interface(java本地接口),它是为了方便Java调用C、C++等本地代码所封装的一层接口。

NDK是Android所提供的一个工具集合,通过NDK可以在Android中更加方便地通过JNI来访问本地代码C或C++。NDK提供的交叉编译器让开发人员只需要简单地修改mk文件就可以生成特定CPU平台的动态库。

使用NDK的好处:

a、提供代码的安全性。因此so库反编译比较困难。

b、可以很方便地使用目前已有的c、c++开源库。

c、便于平台间的移植。通过c/c++实现的动态库可以很方便地在其他平台上使用。

d、提供程序在某些特定情形下的执行效率,但是不能明显提升Android程序的性能。

JNI和NDK开发主要用于底层和嵌入式。

2、JNI的开发流程                                                

a、在Java中声明native方法。

b、编译Java源文件得到class文件,然后通过javah命令到处JNI的头文件。

c、实现JNI方法。

d、编译so库并在java中调用。

3、NDK的开发流程                                               

NDK的开发是基于JNI的,主要有如下几个步骤:

a、下载并配置NDK。

b、创建一个Android项目,并声明所需的native方法。

c、实现Android项目中所声明的native方法。

d、切换到jni目录的父目录,然后通过ndk-build命令编译产生so库。

时间: 2024-10-12 23:04:32

JNI和NDK编程的相关文章

超全Android JNI&NDK编程总结

由于网上关于JNI/NDK相关的知识点介绍的比较零散而且不具备参照性,所以写了这篇JNI/NDK学习笔记,便于作为随时查阅的工具类型的文章,本文主要的介绍了在平时项目中常用的命令.JNI数据类型.签名等,便于查阅相关资料.文末相关参考资料比较适合刚接触或者不熟悉Android NDK开发的朋友参阅. 常用命令 javac 编译java源文件生成.class文件 由于JNI对应的头文件由javah工具根据对应的.class文件生成,所以在进行JNI编程之前,写好Java代码后需要先编译,在使用ja

【转】 Android 开发 之 JNI入门 - NDK从入门到精通

原文网址:http://blog.csdn.net/shulianghan/article/details/18964835 NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub - https://github.com/han1202012/NDKHelloworld.git -- Java传递参数给C语言实例程序 : GitHub - https://github.com/han1202012/NDKParameterPassing.git --C语言回调Java方法示例

【转】JNI和NDK的区别

原文网址:http://blog.csdn.net/ithomer/article/details/6828830 NDK(Native Development Kit)“原生”也就是二进制 android常用的开发方式是java封装的库,而这些库的底层实现是由C/C++实现,如媒体,图形库等 java调用这样实现就需要用JNI(Java Native Interface) 平时用的也就是google给我们封装的好的库,即底层实现用的不是Java,但都有统一的Java接口 NDK的作用是“我们自

Android Studio Ndk 编程

现在开发Android程序基本都已经从Eclipse转到了Android Studio了, 最近项目需求, 需要用到ndk编程, 于是就折腾了一下. 开发环境 Android Studio 1.5.1 android-ndk-r10e gradle 2.8 首先我们新建一个工程叫做NdkDemo, 创建后的工程目录结构如下 然后我们打开gradle.properties文件, 在文件的尾端写一句, 如果没有写这一句会编译不通过 android.useDeprecatedNdk=true 接着配置

android的JNI 、 NDK 学习!

转载的! Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C.C++ 和汇编语言)编写的应用程序和库进行交互操作. 1.从如何载入.so档案谈起 由于Android的应用层的类都是以Java写的,这些Java类编译为Dex型式的Bytecode之后,必须靠Dalvik虚拟机(VM: Virtual Mac

两分钟学会Android平台NDK编程(无须Eclipse和cygwin,可使用命令行打包多个so)

之前在进行cocos2dx开发时,已经详细介绍了如何将win32的c++代码移植到Android平台,当再次回顾时,发现一些基础的东西理解并不是很彻底,今天使用Android NDK提供的一个例子做一个简单的移植.在进行该demo前,请确认你已经配置了Android开发环境和安装了最新的Android NDK. 1.创建Android项目 创建一个Android项目 , 包名是com.example.hellojni,创建一个Activity作为程序进入的Acitivity,命名为HelloJn

Android平台NDK编程

转自:http://blog.csdn.net/wangbin_jxust/article/details/37389383 之前在进行cocos2dx开发时,已经详细介绍了如何将win32的c++代码移植到Android平台,当再次回顾时,发现一些基础的东西理解并不是很彻底,今天使用Android NDK提供的一个例子做一个简单的移植.在进行该demo前,请确认你已经配置了Android开发环境和安装了最新的Android NDK. 1.创建Android项目 创建一个Android项目 ,

windows安卓NDK编程

去年搞过一次NDK,当时觉得挺麻烦,以后就一直没再搞过,现在公司的项目需要使用NDK编程,今天又搞了一边,遇到了些问题,和大家分享一下 . 一. 安装Cygwin 1.下载Cygwin http://cygwin.com/setup-x86.exe   双击运行出现如下界面,点击下一步 选择install from internet ,点击下一步 选择默认位置 c:\cygwin ,点击下一步 依旧默认位置,继续点击下一步 默认选项Direct Connection 就可以,继续点击下一步 可以

NDK编程心得

初学NDK编程,编程中碰到了不少的问题,有点心得,现总结一下: 1. 注意java类在NDK里的表现形式,也就是smali格式.比如Ljava/lang/String; String是大写,后面的分号也不能少.类型一定要匹配,比如调用getClassLoader时,函数的类型是 ()Ljava/lang/ClassLoader; 而不能写成()Ljava/lang/Object; 如果写错,则错误很难马上查到. 2. NDK里对java函数的调用非常严格,静态方法必须使用静态调用接口,返回值为空