昨天一个同事问我Android PDK,NDK,SDK都是做什么的,什么意思。之前听到过这几个词,感觉自己能够理解,
但是发现要比较清晰的给她解释才发现自己的理解可能还不是很到位,带着疑问查了查资料,结合自己的理解写
下来。
其实这个三个词应该是在软件开发领域通用的,它们的全称分别为SDK(Software Development Kit),PDK(Platform
Development Kit),NDK(Native Development Kit),我们可以从它们的用途以及针对的人群来理解一下。
1.SDK 软件开发套件
一般平台都会发布自己的SDK,SDK包含该平台为应用程序开发人员提供的开发工具,主要是所有公开API
的集合,应用程序开发人员可以借助SDK中的API快速的进行应用的开发。
Android SDK针对所有安卓应用开发人员开放,下载ADT查看sdk目录如下:
sdk
├── add-ons
├── build-tools
├── extras
├── platforms
├── platform-tools
└── tools
SDK文件目录解释:
1) add-ons 这里保存一些附加库,例如GoogleMaps
2) build-tools 这里放的是Android的一些重要的编译工具,比如aapt、aidl、逆向调试工具dexdump和编译脚本dx等
3) extras 存放的是几次大的升级添加的新功能相关的static library,如android-v4,android-v7,android-v13
4) platforms 存放的是平台真正的SDK,其中会根据APILevel来区分SDK的版本,命名规则android-APILevel,如android 4.4
SDK的文件夹名称为android-20,其文件目录如下:
├── android.jar
├── build.prop
├── data
├── framework.aidl
├── sdk.properties
├── skins
├── source.properties
├── templates
└── uiautomator.jar
该目录下主要文件android.jar为该版本framework的主要文件,包括class,图片等;
data目录下为系统的资源文件,包括字符串资源,fonts字体库文件,activity broadcast的action记录,intent的category,
widget的列表等内容;skins目录为Android模拟器的皮肤资源;templates目录下为创建Android工程默认模板,包括
AndroidManifest.xml,java文件,launch图标等;
5) platform-tools 此目录主要放置的是平台工具,如adb, fastboot, sqlite3等
6) tootls 这个目录中有比较重要的调试工具,如ddms(包括一些截图),Android模拟器的主程序emulator,traceview性能优化工具,
UI控件扫描工具uiautomatorviewer,UI层级显示工具hierarchyviewer,代码混淆工具proguard,ant编译脚本,代码缺陷
扫描工具lint等,这个目录下也有个templates目录,简单看了下不太明白是干什么用的,有兴趣的可以了解一下。
2.PDK 平台开发套件(合作伙伴开发套件)
PDK主要针对系统和平台开发的人员,有的博客上说PDK对于解决Android碎片化有一定的作用,在PDK推出之前,未能参与Google
早期开发设备计划的OEM厂商和半导体供应商必须等到Android开源版本公布后,才能开始进行开发。而从Jelly Bean,也就是Android
4.1版本开始Google在发布新的Android版本之前会Release给与其签约过的OEM厂商和半导体供应商PDK(PDK的获取需要授权,因为
PDK中的新版Android尚未正式发布),这样OEM厂商不会再落后于Google挑选的独家早期开发伙伴。原来的时候,只有Google的自有品
牌Nexus设备才能成为市场领先者,但以后的情况可能不一定会如此,因为会有许多积极的OEM 厂商也能借助PDK快速推出新版产品。
这个就是PDK的作用,加快OEM厂商的update速度,不然Android的新版本的使用率会跟不上更新的速度。
这个PDK中会有一些平台的少量Code,以及一些binary文件,能够是系统工程师尽快的进行本平台的一些驱动的开发,调试,以及一些
平台的新功能开发,至于PDK的详细文件目录以及文件内容我暂时不太清楚。
3.NDK 原生开发套件(这个我翻译得比较蹩脚)
Android的SDK是中的API都是java的,众所周知,安卓应用跑在dalvik/ART上,所以第三方应用基本上只能通过java来进行开发,如果
想要通过C来开发,需要通过JNI来实现,个人理解由于C/C++上有很多成熟的库可以用,所以Google开辟的NDK,可以使得C/C++的
应用也能直接在Android上跑起来,但是这里面也存在技术障碍,比如程序更加复杂,兼容性难以保障,无法访问Framework API,Debug
难度更大等,开发者需要自行斟酌使用。NDK官方说明
我没有进行过NDK的开发,查阅到NDK的讲述有一篇特别详细的博客,有兴趣或这需求的可以根据该blog学习一下。
如果有更多关于NDK的问题可以到NDK论坛找找看。
参考文章:
1.http://www.cnblogs.com/Soprano/articles/2559332.html
2.http://www.eet-china.com/ART_8800676827_617693_NT_2debd506.HTM
3.http://www.oschina.net/p/android+ndk