下面正如我在Java的分裂写到的Android使用了很多java.*和javax.*的包。到底用了多少呢,如果你有兴趣可以下载Android的源代码。
?
在晓峰的blog上看到他2007年发表的文章,写了他发现的Android使用的一些Harmony中的模块,这里写出所有模块:annotation、archive、auth、crypto、instrument、kernel、logging、luni、math、misc、nio、niochar、prefs、security、sound、sql、text、xnet
?
所有的Java和javax.*包
- java.awt.font? 字体相关的类,你也可以添加自定义字体
- java.bean?????? bean处理相关的类
- io、nio、net、security、text、utils、sql、math。还有下面的子包,如反射、注解、zip压缩、log等,基本上就是Java Lite
- javax.crypto? 加解密的
- javax.net和javax.net.ssl等网络处理相关
javax.microedition.khronos.opengles和egl? --这两个包是肯定是关于OpenGL的,microedition是JavaME的包,这个应当是当时的权宜之计,出现于Level1中
- javax.security? 安全相关
- javax.sql和javax.xml? 这两个自然不用说了JDBC和XML处理??
为什么有这些包呢,我们如何使用这些包呢
???? 为什么有这些包,我们得从android的角度出发。现实是这个世界上有太多太多使用Java语言和核心类库开发的一些组件了,从阅读识别条形码、pdf、word文件解析到很多机构自定义的格式,各个行业和各个方面的应用,尤其是第三方类库,基本上你想到的都有了实现。这些都是Java的资产,如何能平滑的过渡到Android,很显然只要类库兼容就可以了。比如pdfbox是Java实现的解析pdf的工具,如果你想在Android上实现一个pdf阅读器,你可以直接使用pdfbox的一些实现。同样的如果在iphone上,你可能需要重新实现一遍。
?
?? 那么现在我们有如下几种API的使用策略
- Android自身的 (android.*)?? ---需要学习成本,优先采用
- Java Lite ( java.*和javax.*)??? ---对于Java程序员更加熟悉,次之使用
- 第三方包( 如pdfbox)??????????? ---因为可能存在兼容性等问题,更次之
选择API的两个例子
下面我举一个例子,比如对于日志有如下选择:android.util.Log,commons logging,log4j等选择。Log属于自身API,所以如果开发一个Android上的优先考虑Log。如果你正在开发一个如pdfbox的跨Android和Java的组件,可以考虑使用commons logging。
?
另一个例子。如果你正在考虑动画和游戏,Java Lite的线程(或定时器) 还是 android.view.animation你应当选择animation。因为内置的更好,虽然有学习成本,但是效率更好。如果你正在开发一个游戏框架或者JavaME的模拟器,选择concurrent方式可能更好。
经过两天我对Android的API的地图算是了解清楚了。下一步我将针对每个api包单独学习,同时将使用引导读文档的方式指导我Blog的读者学习。
?
