zoukankan      html  css  js  c++  java
  • 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 argetproductprjsystemlib目录下。

  • 相关阅读:
    项目开发中的注意点和技巧
    addslashes — 使用反斜线引用字符串
    PHP error_reporting() 错误控制函数功能详解
    零碎收集cocos知识
    LeetCode:二叉树的前序遍历【144】
    SpringBoot学习笔记:SpringBootAdmin
    LeetCode:简化路径【71】
    LeetCode:组合总数II【40】
    LeetCode:全排列II【47】
    LeetCode:全排列【46】
  • 原文地址:https://www.cnblogs.com/ldq2016/p/6228925.html
Copyright © 2011-2022 走看看