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目录下。



    本文转自 一点点征服   博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/6228925.html,如需转载请自行联系原作者



相关文章
|
17天前
|
Android开发
Android JNI与CAN通信遇到的问题总结
Android JNI与CAN通信遇到的问题总结
37 1
|
17天前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
22 1
|
17天前
|
Shell Android开发
Android系统 init.rc文件详解
Android系统 init.rc文件详解
34 0
|
18天前
|
存储 Java API
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
74 0
|
19天前
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
18天前
|
Android开发
Android JNI 报错(signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr )
Android JNI 报错(signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr )
59 1
|
3天前
|
Android开发
android 12 U盘 /mnt/media_rw 下读取文件异常 没有权限
android 12 U盘 /mnt/media_rw 下读取文件异常 没有权限
9 0
|
3天前
|
XML Android开发 数据安全/隐私保护
android 11后文件读写访问权限申请
android 11后文件读写访问权限申请
11 0
|
3天前
|
JSON Android开发 数据格式
Android 打开系统文件管理器,并返回选中文件的路径
Android 打开系统文件管理器,并返回选中文件的路径
11 0
|
17天前
|
Java Android开发 C++
Android源代码定制:MK文件执行顺序|属性覆盖
Android源代码定制:MK文件执行顺序|属性覆盖
18 2
Android源代码定制:MK文件执行顺序|属性覆盖