Android之SDK、NDK、JNI和so文件

1.     SDK

Android SDK(AndroidSoftware Development Kit),即Android软件开发工具包,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三方应用只能使用Java”,也就是说我们还可以采用C/C++语言。

Android SDK主要包括开发文档、编译工具等等,其主要目录如下:

(1)  Build-tools

保存着一些编译工具,比如aapt、aidl、dx等文件。

(2)  Extras

一些Android的支持库、Google的工具等。

(3)  Platforms

是每个平台的SDK真正的文件,里面会根据API level划分SDK版本,这里以Android4.4来说,进入后有一个android-19文件夹,里面的data主要包含资源文件和字体文件等;skins主要包含Android模拟器的皮肤;templates是工程承建的默认模板;android.jar则是该版本的主要framework文件。

(4)  Platform-tools

包含一些调试工具,比如adb、fastboot等。

(5)  Samples

是Android SDK自带的默认示例工程。

(6)  System-images

包含有Android模拟器需要的系统文件,有kernel-qmemu(内核文件)、ramdisk.img(文件系统)、userdata.image(包含应用及用户相关数据)和system.img(Android操作系统文件)。

(7)  Temp

用于存放一些临时文件,比如下载文件时保存下载下来的包。

(8)  Tools

这里包含了重要的工具,比如ddms是用于启动Android调试工具, draw9patch则是绘制android平台的可缩放png图片的工具,sqlite3可以在PC上操作SQLite数据库,而monkeyrunner则是一个不错的压力测试应用,模拟用户随机按键,mksdcard则是模拟器SD映像的创建工具,emulator是Android SDK模拟器主程序,不过从android 1.5开始,需要输入合适的参数才能启动模拟器,traceview作为android平台上重要的调试工具。

2.     NDK

2.1   什么是NDK

NDK即Native Development Kit,众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。

NDK是一系列工具的集合。它提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk(AndroidPackage的缩写,Android安装包)。这些工具对开发者的帮助是巨大的。它集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。它可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作

NDK提供了一份稳定、功能有限的API头文件声明,Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。

2.2   为什么使用NDK

(1)  代码的保护。由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。

(2)  可以方便地使用现存的开源库。大部分现存的开源库都是用C/C++代码编写的。

(3)  提高程序的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。

(4)便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。

图1

3.     JNI

JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分。

JNI是java语言提供的Java和C/C++相互沟通的机制,Java可以通过JNI调用本地的C/C++代码,本地的C/C++的代码也可以调用java代码。JNI 是本地编程接口,Java和C/C++互相通过的接口。Java通过C/C++使用本地的代码的一个关键性原因在于C/C++代码的高效性。

4.     so文件

即使第三方应用开发者使用JNI完成了自己的C动态链接库(so)开发

NDK编译C/C++源代码文件生成动态链接库so,android系统编译生成的so文件放在\out\target\product\prj\system\lib目录下。

Android之SDK、NDK、JNI和so文件相关推荐

  1. 关于解决UnityHub无法下载Android的sdk ndk模块的问题

    具体步骤: 找一个全局f墙软件,例如ssr,直接百度搜就可以,启动成功并验证可以f墙后退出此软件并确保unity也已退出 启动unityhub,找到你要下载的版本对应的android 的sdk,ndk ...

  2. android studio使用ndk,jni随记

    1.下载ndk(会下载到sdk目录下) 2.配置 3.配置build.gradle(app) android {defaultConfig {ndk {moduleName "JniDemo ...

  3. Android Studio 开发NDK项目生成.h文件方法

    参看文章原文 1, 从Android Studio的Terminal里进入到, /src/main/java 目录下,一定要刀这个文件夹下来执行命令操作. 2, 执行javah XXX.XX.XXX ...

  4. NDK JNI Android Studio开发与调试DEMO(三)(生成 .so 文件)

    Android Studio NDK 开发与调试(生成 .so 文件) 温馨提示:如果你的 Android Studio 版本在 3.0以上 , 建议你用 cMake /ndk-build 的新姿势进 ...

  5. android zip格式的ndk,Android 使用NDK (JNI)容易解压7z压缩文件

    C语言使用LZMA SDK解压非加密7z文件介绍:http://hzy3774.iteye.com/blog/2104510 github项目地址:https://github.com/hzy3774 ...

  6. NDK/JNI demo ( 五 ) ORB_SLAM2在Android上的移植过程

    Android平台搭建和NDK环境配置 Android移植基础 NDK是集成的Android中调用C++代码的工具包,核心是JNI(Java Native Interface)技术,具体这里略过不表. ...

  7. NDK JNI方式读写Android系统的demo(二)

    NDK & JNI(方式读写Android系统的Demo) 大家都知道Android系统是一种基于Linux的自由及开放源码的操作系统,所以读写GPIO也可以直接用Linux那一套export ...

  8. Android NDK JNI 简单例子2

    转载请标明出处: http://blog.csdn.net/michael1112/article/details/55271823 江东橘子的博客 前言 使用Android studio 进行NDK ...

  9. Android studio 使用NDK工具实现JNI编程

    前言: Android开发中常常会使用到第三方的.so库.在使用.so库的时候就要用到JNI编程.JNI是Java Native Interface的缩写.它提供了若干的API实现了Java和其它语言 ...

最新文章

  1. [C++]Call virtual member function in constructor or destructor
  2. Null return value from advice does not match primitive return type for: public abstract boolean
  3. Android 8.0 运行时权限策略变化和适配方案
  4. 每周.NET前沿技术文章摘要(2017-05-24)
  5. easyuefi只能在基于uefi启动的_电脑知识:5分钟教你深入了解BIOS+MBR和UEFI+GPT
  6. SpringBoot笔记整理(四)
  7. VMware为全球数字化基础架构提供原生安全
  8. HTML-唯美二次元百度引导页面源码
  9. java 重载赋值_java中构造方法,set/get方法,方法重载使用解读
  10. numpy保存和读取dictionary字典
  11. 51NOD 1185 威佐夫游戏 V2(威佐夫博弈)
  12. BZOJ 3251: 树上三角形
  13. 渠道下沉 阿里争食社区经济最后一公里
  14. your cuda software stack is old.we fall back to the NIVIDIA driver for some compilation. Update your
  15. 洛谷B2095 白细胞计数(sort排序)
  16. 微信企业号支付授权目录
  17. 开篇 | 想成为技术牛人?先搞定网络协议!
  18. Linux删除带‘\\’的文件夹
  19. 赴港澳台或出国参加短期学术会议前应该做哪些准备
  20. 景区售票管理系统,景区票务系统,景区售票系统毕业设计

热门文章

  1. RabbitMQ 高可用之如何确保消息成功消费
  2. 017_Cookie
  3. vc2005运行库彻底卸载_解决不安装VC运行库(VC2005,VC2008),程序运行出错的方法...
  4. 电脑前面的插孔没声音怎么设置_手机没声音是怎么回事
  5. python开发效率高吗_提升python开发者工作效率的六个库,你知道几个?
  6. Kotlin极简教程:第4章 基本数据类型与类型系统
  7. Android OkHttp完全解析
  8. LinkedHashMap源码剖析
  9. 表达式树 php,Linux_LINQ学习笔记:表达式树,构建查询表达式 本节中, 我们 - phpStudy...
  10. Python Django框架入门第一课