一、Android系统构架
Android系统从底向上一共分了4层,每一层都把底层实现封装,并暴露调用接口给上一层。
英文不好,那下面是简单翻译的版本:
Linux内核(LinuxKernel)
Android运行在linuxkernel 2.6之上,但是把linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的。
Linux内核是硬件和软件层之间的抽象层。
图中我们可以看出驱动就是以C或汇编代码来控制硬件并向上提供接口操作
中间件
中间件包括两部分:核心库和运行时(libraries& Android runtime)
核心库包括,Android的核心库主要是基于C\C++实现的一些原生组件,包括C库Bionic、浏览器引擎Webkit、多媒体引擎OpenCORE、SQL数据库SQLite、3D渲染引擎OpenGLES、位图和字体矢量渲染引擎FreeType、2D图像渲染引擎SGL(SkiaGraphics Library)、互联网安全协议SSL和TSL等。
1,SurfaceManager
当系统同时执行多个应用程序时,Surface Manager会负责管理显示与存取操作间的互动,另外也负责将2D绘图与3D绘图进行显示上的合成。
2.多媒体框架(MediaFramework)
在Android中,在Android2.3以前,多媒体框架采用的是PacketVideo的OpenCORE平台,OpenCORE支持多种视频、音频和图像格式,并支持硬件、软件编解码器插件。在Android2.3中,正式引入了Stagefright框架。
3.SQLite
在数据库方面,Android采用的是业界著名的SQLite数据库,SQLite是一个轻量级的交互性数据库,大小在500KB左右,目前主流的数据存储后台都是基于SQLite的。
4.OpenGLES
在Android中,3D图形的渲染支持业界主流的OpenGLES 2.0规范。OpenGLES 2.0可以有效的利用硬件来进行加速。在实际的操作中,软件加速采用的是OpenGLES 1.1规范,硬件加速采用地是OpenGLES 2.0规范。
5.FreeType
FreeType是一个开源、免费、高质量的,且可移植的位图和字体矢量渲染引擎。它提供了统一的接口来供上层访问各种字体文件,包括TrueType、OpenType、Type1、CID、CFF、WindowsFON/FNT、X11PCF等。另外FreeType还支持单色位图、反走样位图的渲染。需要说明的是FreeType虽然是基于ANSIC来进行开发的,但采用的却是基于面向对象的设计思想,因此在可裁剪性上显得比较灵活。
6.Webkit
在Android中,内置的浏览器是基于著名的开源浏览器引擎Webkit的,支持CSS、JavaScript、DOM、AJAX等特性,完全遵守WWW规范,支持单栏和自适应视图渲染等。Webkit是浏览器领域著名的引擎之一,GoogleChrome、AppleSafari、AppleIPhone、SymbianS60等浏览器均采用了该引擎。在浏览器的网页渲染的速度和效果,以及对WWW国际标准上,浏览器引擎起着极其重要的作用。在目前的主流浏览器中,IE采用的是Trident引擎,firefox采用的是Gecko引擎,Opera采用的是Presto引擎,konqueror采用的是KHTML引擎。
7.SGL
SGL为一个基于Skia的2D图像渲染引擎,Google通过收购Skia公司获得了该技术,并将SGL应用在Chome浏览器和Android上。
8.SSL
Android对常用的互联网安全协议提供了支持,支持的标准为SecureSockets Layer 3.0和TransportLayer Security1.2。SSL被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。TLS利用密钥算法在互联网上提供端点身份认证与通信保密。)
9.Libc
在Android中,C库并没有采用桌面Linux所采用的GNULibc,而是采用了Google开发的基于BSD许可的Bionic库。这是因为传统的GNU内核在体积和运行效率上都不适合移动设备,其核心组件都是以动态库的形式驻留在每个进程中,运行效率和内存占用都是十分重要的考虑。另外Google也希望C库能够运行在用户空间。
Bionic库仅为200KB大小,是GNULibc体积的一半,具有更高的效率、低内存占用、非常快和小的线程实现、内置了对Android特有服务的支持等特点,配合经过优化的Dalvik,Bionic保证了Android的高性能。但需要注意的是Bionic不支持一些特性如Unicode、异常处理等。另外Bionic也和GNULibc不兼容,这会导致不少移植方面的问题。
-
Dalvik虚拟机:区别于Java虚拟机的是,每一个Android应用程序都在它自己的进程中运行,都有一个属于自己的Dalvik虚拟机,这一点可以让系统在运行时可以达到优化,程序间的影响大大降低。Dalvik虚拟机并非运行Java字节码,而是运行自己的字节码。
应用程序框架(ApplicationFramework)
丰富而又可扩展性的视图(Views),可以用来构建应用程序,它包括列表(lists),网格(grids),文本框(textboxes),按钮(buttons),可嵌入的web浏览器。
内容提供者(ContentProviders)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。
资源管理器(ResourceManager)提供非代码资源的访问,如本地字符串,图形,和布局文件(layoutfiles)。
通知管理器(NotificationManager)使得应用程序可以在状态栏中显示自定义的提示信息。
活动管理器(ActivityManager)用来管理应用程序生命周期并提供常用的导航回退功能。
应用程序(Applications)
Android系统会内置一些应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。
二、Android应用程序结构分析
接下来解析一个Android程序的各个组成部分,这次我们拿一个Hello,World做例子,虽然只是一个Hello,World,但也是麻雀虽小五脏俱全,通过分析Hello,World的目录结构,让我们对Android程序有一个整体全面的认识。
(HelloWorld显示效果)
(HelloWorld目录结构)
接下来我们逐个部分加以讲解:
1、Activity类MainHelloWorld文件浅析
Activity是Android中的视图部分,负责界面显示。
packagecom.example.test;
importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.view.Menu;
publicclassMainActivity extendsActivity {
@Override
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
publicbooleanonCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main,menu);
returntrue;
}
}
可以看到MainActivity是Activity的子类,子类要重写onCreate与onCreateOptionsMenu方法。setContentView(R.layout.main)方法是给Activity设置可以显示的视图(View),视图由R类负责寻找。而getMenuInflater().inflate(R.menu.activity_main,menu);方法是给Activity设置menu按钮弹出的快捷目录的
2、R文件浅析
我们看到Gen目录下有个R.Java文件,R文件由ADT自动生成,程序员不需要也不要去修改它,R文件负责调用应用程序中的非代码资源。
packagecom.example.test;
publicfinalclassR {
publicstaticfinalclassattr {
}
publicstaticfinalclassdrawable {
publicstaticfinalintic_action_search=0x7f020000;
publicstaticfinalintic_launcher=0x7f020001;
}
publicstaticfinalclassid {
publicstaticfinalintmenu_settings=0x7f070000;
}
publicstaticfinalclasslayout {
publicstaticfinalintactivity_main=0x7f030000;
}
publicstaticfinalclassmenu {
publicstaticfinalintactivity_main=0x7f060000;
}
publicstaticfinalclassstring {
publicstaticfinalintapp_name=0x7f040000;
publicstaticfinalinthello_world=0x7f040001;
publicstaticfinalintmenu_settings=0x7f040002;
publicstaticfinalinttitle_activity_main=0x7f040003;
}
publicstaticfinalclassstyle {
publicstaticfinalintAppTheme=0x7f050000;
}
}
从R文件中可以看到每一个资源都会有一个整数和它相对应。
3、res/layout/activity_main.xml文件浅析– 布局layout
我们看到有个res目录,也就是resource目录,这个目录下存放资源文件,资源文件的统一管理,也是Android系统的一大特色。现在要注意看的是layout目录下的activity_main.xml。这个文件的内容是有关用户界面布局和设计的。在桌面程序设计领域采用XML也许比较新颖,但是在网页设计领域,这个就很平常了。可以用html来类比xml在布局中的用途。
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world"
android:textColor="#FFFFFF"
tools:context=".MainActivity"/>
</RelativeLayout>
从以上代码可以看到整个程序界面由一个线性布局控件(RelativeLayout)和1个文本框控件(TextView)组成。res的其他目录里的其他文件也都是相关的资源描述。
4、AndroidManifest.xml文件浅析
在每个应用程序的根目录都会有一个AndroidManifest.xml文件,该文件向Android操作系统描述了,本程序所包括的组件,所实现的功能,能处理的数据,要请求的资源等等。学过JavaWeb开发的可以用Web应用程序里的web.xml来类比这个AndroidManifest.xml文件。
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="15"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
我们看到Manifest是根节点,节点属性里有versionCode和versionName来表示应用程序的版本;里面可以包含0个或1个application元素,application可以包含多个activity组件等等,具体的内容我们在接下来慢慢详细讲解。
5、Android.jar文件浅析
作为一个Java项目,通常情况下都会引入要用到的工具类,也就是Jar包,在Android开发中,绝大部分开发用的工具包都被封装到一个叫Android.jar的文件里了。如果我们在Eclipse中展开来看,可以看到j2se中的包,apache项目中的包,还有Android自身的包文件。
android | 包含在平台和包括定义系统功能的应用程序的权限的应用程序使用的资源类。 |
android.accessibilityservice | 这个包中的类用于辅助服务的发展提供替代或增强反馈给用户。 |
android.accounts | |
android.animation | 这些类提供了属性动画系统,它允许你任何类型的对象属性的动画功能。 欲了解更多信息,请参阅 动画指 南。 |
android.app | 包含高层次的类,封装整体的Android应用程序模型。 提供基本的运行环境 |
android.app.admin | 提供系统级的设备管理功能,允许您创建安全感知应用程序是有用的,在企业设置,其中IT专业人员超过雇员装置需要丰富的控制。 欲了解更多信息,请参阅 设备管理 指南。 |
android.app.backup | 包含备份和恢复功能的应用程序可用。如果用户清除设备上的数据或升级到一个新的Android供电设备,已启用的所有应用程序的备份可以恢复以前的数据用户的应用程序时重新安装。 欲了解更多信息,请参阅数据备份指南。 |
android.appwidget | 包含必要的组件,以创建“应用程序部件”,用户可以嵌入在其他应用程序(如主屏幕)快速访问应用程序的数据和服务,而无需启动一个新的活动。 欲了解更多信息,请参阅 应用部件的指南。 |
android.bluetooth | 提供管理类蓝牙功能,如扫描设备,连接的设备,管理设备之间的数据传输。 有关更多信息,请参阅的 蓝牙指南。 |
android.content | 包含类设备上的数据访问和发布。 |
android.content.pm | 包含用于访问有关的应用程序包的信息,包括有关的活动,权限,服务,签名,和供应商的信息类。 |
android.content.res | 访问应用程序资源,如资产原始文件,颜色,可绘制,媒体或其他包中的其他文件,再加上重要的设备配置细节(方向,输入类型等)的影响如何应用程序的行为可能含有类。 欲了解更多信息,请参阅应用程序资源指南。 |
android.database | 包含的类,以探索通过内容提供商返回的数据。 |
android.database.sqlite | 包含SQLite数据库管理类,应用程序将使用它来管理自己的私人数据库。 |
android.drm | 提供类管理DRM内容和确定的DRM插件(代理人)的能力。 |
android.gesture | 提供类创造,识别,加载和保存的手势。 |
android.graphics | 提供低水平如画布,颜色过滤器,点,让你处理直接绘制到屏幕的矩形绘图工具。 |
android.graphics.drawable | 提供类来管理各种各样的视觉元素,仅用于显示的,如位图和梯度,。 |
android.graphics.drawable.shapes | 包含绘制几何形状的类。 |
android.hardware | 硬件功能,如摄像机和其他传感器,提供支持。 |
android.hardware.input | |
android.hardware.usb | Android的供电设备连接到USB硬件外设通信提供支持。 有关详细信息,请参阅 USB指南。 |
android.inputmethodservice | 写输入法(如软件键盘)的基类。 |
android.location | 包含类定义Android的基于位置和相关服务。 欲了解更多信息,请参阅 位置和地图指南。 |
android.media | 提供管理各种媒体音频和视频接口的类。 |
android.media.audiofx | 提供管理类媒体框架中实现的音频效果。 |
android.media.effect | 提供类,让您适用于各种图像和视频的视觉效果。 |
android.mtp | 提供API,让你直接交互连接相机和其他设备,使用PTP(图片传输协议)的MTP(媒体传输协议)规范的子集。 |
android.net | 帮助网络访问超出了正常的java.net类。* API的。 |
android.net.http | |
android.net.nsd | |
android.net.rtp | 提供用于RTP(实时传输协议)的API,允许应用程序管理的需求或交互式数据流。 |
android.net.sip | 提供访问,例如拨打和接听VoIP电话使用SIP会话发起协议(SIP)功能。 欲了解更多信息,请参见 会话初始协议 开发指南“。 |
android.net.wifi | 提供类来管理Wi-Fi功能的设备。 |
android.net.wifi.p2p | 提供类来创建同行对等(P2P)连接与Wi-Fi直。 |
android.net.wifi.p2p.nsd | |
android.nfc | 提供近场通信(NFC)功能,允许应用程序读取NFC标签NDEF的消息。“标签”,实际上可能是作为一个标记出现的另一个设备。 欲了解更多信息,请参阅 近场通信指南。 |
android.nfc.tech | 这些类提供了一个标记技术的特点,不同类型的标签,扫描的访问。 |
android.opengl | 提供OpenGL ES的静态接口和公用事业。 |
android.os | 提供基本的操作系统服务,消息传递,设备上的进程间通信。 |
android.os.storage | 包含系统存储服务,资产管理二进制文件系统被称为不透明的二进制水滴(OBBs的)的类。 |
android.preference | 提供管理类应用的喜好和实施的喜好的UI。 |
android.provider | 提供方便的类访问由Android提供的内容提供商。 |
android.renderscript | Renderscript渲染和计算的API提供低级别的进行数学计算和3D图形渲染,高性能的手段。 有关详细信息,请参阅的 Renderscript开发指南。 |
android.sax | 一个框架,可以很容易地编写高效和稳健的SAX处理程序。 |
android.security | |
android.service.textservice | 提供类,允许你创建类似的输入法(IME的)框架的方式拼写检查。 |
android.service.wallpaper | |
android.speech | |
android.speech.tts | |
android.support.v13.app | 支持类来访问一些API 13级后在向后兼容的方式引进的android.app包功能。 |
android.support.v13.dreams | 支持类,以纾缓在向后兼容的方式实现梦想。 |
android.support.v4.accessibilityservice | 支持android.accessibilityservice班,以协助Android API的第4级或更高的应用程序的开发。 |
android.support.v4.app | 支持android.app班,以协助Android API的第4级或更高的应用程序的开发。 |
android.support.v4.content | 支持android.content班,以协助Android API的第4级或更高的应用程序的开发。 |
android.support.v4.content.pm | 支持android.content.pm班,以协助Android API的第4级或更高的应用程序的开发。 |
android.support.v4.database | 支持android.database班,以协助Android API的第4级或更高的应用程序的开发。 |
android.support.v4.net | |
android.support.v4.os | |
android.support.v4.util | 支持android.util班,以协助Android API的第4级或更高的应用程序的开发。 |
android.support.v4.view | 支持android.util班,以协助Android API的第4级或更高的应用程序的开发。 |
android.support.v4.view.accessibility | 访问一些API级别4在一个向后兼容的方式推出后的android.view.accessibility包功能的支持类。 |
android.support.v4.widget | 支持android.widget类Android API的第4级或更高的应用程序,以协助发展。 |
android.telephony | 为监测网络类型和连接状态,再加上电话号码字符串操纵的工具,如手机基本信息的API。 |
android.telephony.cdma | 为利用特定的CDMA电话功能的API。 |
android.telephony.gsm | 为利用特定的GSM电话功能,如文字/数据/ PDU的SMS消息的API。 |
android.test | 编写Android的测试案例和套房的框架。 欲了解更多信息,请参阅 测试开发指南。 |
android.test.mock | 实用工具类,提供各种Android框架积木存根或嘲笑。 有关详细信息,请参阅 测试指南。 |
android.test.suitebuilder | 支持测试亚军类的实用工具类。 |
android.text | 提供用于渲染或跟踪屏幕上的文字和文字跨度类。 |
android.text.format | 这个软件包包含一些文本格式定义类的替代类 |
android.text.method | 提供监视或修改键盘输入的类。 |
android.text.style | 提供用于查看或更改视图中的对象跨度文本的样式类。 |
android.text.util | 工具,用于识别的文本字符串转换成可点击的链接和创造RFC 822型消息(SMTP)令牌。 |
android.util | 提供操纵日期/时间的base64编码器和解码器,字符串和数字转换的方法,和XML的实用工具,例如常见的实用方法。 |
android.view | 提供公开处理屏幕布局和与用户的交互的基本用户界面类的类。 |
android.view.accessibility | 这个包中的类,用来表示查询系统的全局可访问状态屏幕上的内容和它的变化,以及作为原料药。 |
android.view.animation | 提供类处理补间动画。 |
android.view.inputmethod | 意见和输入法(如软键盘)之间的相互作用的框架类。 |
android.view.textservice | |
android.webkit | 提供用于浏览网页的工具。 |
android.widget | Widget包包含使用您的应用程序屏幕上的UI元素(主要是视觉)。 |
dalvik.bytecode | 提供有关Dalvik字节码的类。 |
dalvik.system | 提供实用工具和系统信息类特定的Dalvik虚拟机。 |
java.awt.font | |
java.beans的 | |
java.io | |
java.lang中 | |
java.lang.annotation的 | |
java.lang.ref | 提供系统 |
java.lang.reflect | |
java.math | |
java.net | |
java.nio的 | |
java.nio.channels | |
java.nio.channels.spi | |
java.nio.charset | |
java.nio.charset.spi | |
java.security中 | 这个包是仅遗留代码的兼容性,不应使用或预期做任何有用的。 |
java.security.acl | 这个包提供的类和接口需要建立访问控制列表。 |
java.security.cert | 这个软件包提供的所有类,并生成所需的所有接口,管理和验证的X.509证书。 |
java.security.interfaces | 这个包提供了生成所需的接口:(1)密钥使用RSA非对称加密算法的PKCS#1标准;(2)(3)密钥数字签名算法(DSA)的FIPS-186中指定的键;为一般的椭圆曲线非对称加密算法。 |
java.security.spec | 这个包提供的类和接口,需要指定用于加密和签名算法的密钥和参数。 |
的java.sql | 访问基于SQL的数据库,提供了一个兼容接口。 |
java.text | |
java.util中 | |
java.util.concurrent中 | 在并发编程中很常用的实用工具类。 |
java.util.concurrent.atomic | 支持无锁在单个变量的线程安全编程一类的小工具包。 |
java.util.concurrent.locks | 提供一个框架,锁定和等待条件是从不同的内置同步和监视器的接口和类。 |
java.util.jar中 | |
java.util.logging的 | |
java.util.prefs | |
java.util.regex | |
java.util.zip | |
javax.crypto | 此包提供了实施加密,解密或密钥协议算法的加密应用程序的类和接口。 |
javax.crypto.interfaces | 这个包提供的接口需要实现的Diffie-Hellman(卫生署)PKCS#3指定的金钥协议的算法。 |
javax.crypto.spec | 这个包提供的类和接口,需要指定用于加密的密钥和参数。 |
javax.microedition.khronos.egl | |
javax.microedition.khronos.opengles | 提供了一个标准的OpenGL接口。 |
javax.net | 此包提供创建套接字和服务器套接字工厂类。 |
javax.net.ssl | 这个包提供的类和接口,需要使用安全套接字层(SSL)协议的继任者传输层安全(TLS)协议。 |
javax.security.auth | |
javax.security.auth.callback | 此包提供与应用程序交互,以执行身份验证和授权过程所需的类和接口。 |
javax.security.auth.login | 这个软件包提供了一个可插拔和可堆叠的认证系统基于Unix-PAM模块的思想和概念。 |
javax.security.auth.x500 | 这个包提供了所需的存储X.500的校长和他们的凭据类。 |
javax.security.cert | 这个软件包只提供兼容性的原因。 |
javax.sql | |
javax.xml | 提供有用的XML常量的一个实用工具类。 |
javax.xml.datatype | XML / Java类型映射。 |
javax.xml.namespace | XML命名空间处理。 |
javax.xml.parsers | 提供允许处理XML文档的类。 |
javax.xml.transform | 此包定义了用于处理转换指令,以及执行从源到成果转化的一般API。 |
javax.xml.transform.dom | 此包实现特定于DOM的转换API。 |
javax.xml.transform.sax | 此包实现特定于SAX2的转换API。 |
javax.xml.transform.stream | 这个包实现数据流和特定URI的转换API。 |
javax.xml.validation | 这个包提供了用于XML文档验证的API。 |
javax.xml.xpath | 这个包提供了一个对象模型中立的API XPath表达式的计算和访问计算环境的评价。 |
junit.framework | JUnit测试框架。 |
junit.runner | 实用工具类,支持JUnit测试框架。 |
org.apache.http | HTTP组件的核心接口和类。 |
org.apache.http.auth | 客户端对服务器的HTTP认证的API,通常被称为为HttpAuth。 |
org.apache.http.auth.params | 参数配置HttpAuth。 |
org.apache.http.client | 为客户端的HTTP通信和切入点的HttpClient API的模块。 |
org.apache.http.client.entity | |
org.apache.http.client.methods | 要求实现像各种HTTP方法GET和POST。 |
org.apache.http.client.params | 参数配置的HttpClient。 |
org.apache.http.client.protocol | 额外的请求和响应拦截。 |
org.apache.http.client.utils | 佣工和公用事业类的HttpClient。 |
org.apache.http.conn | 客户端连接管理和处理API在什么样的核心是简称为HttpConn“ 。 |
org.apache.http.conn.params | 参数配置HttpConn。 |
org.apache.http.conn.routing | 客户端的路由代表性和跟踪API,部分HttpConn。 |
org.apache.http.conn.scheme | |
org.apache.http.conn.ssl | 的TLS / SSL的具体零部件HttpConn的API。 |
org.apache.http.conn.util | |
org.apache.http.cookie | 通过cookie客户端状态管理的API,俗称为HttpCookie。 |
org.apache.http.cookie.params | 参数配置HttpCookie。 |
org.apache.http.entity | HTTP消息实体的表示。 |
org.apache.http.impl | 在接口的默认实现 |
org.apache.http.impl.auth | |
org.apache.http.impl.client | |
org.apache.http.impl.conn | |
org.apache.http.impl.conn.tsccm | 执行一个线程安全的客户端连接管理器。 |
org.apache.http.impl.cookie | |
org.apache.http.impl.entity | 在接口中默认实现 |
org.apache.http.impl.io | 在接口的默认实现 |
org.apache.http.io | 传输层抽象的HTTP组件。 |
org.apache.http.message | 选择一个HTTP |
org.apache.http.params | HTTP组件的参数化框架。 |
org.apache.http.protocol | HTTP协议的执行框架。 |
org.apache.http.util | 大多出于各种目的的静态辅助方法的实用工具类。 |
org.json | |
org.w3c.dom中 | 提供文档对象模型级别2核心的官方W3C Java绑定。 |
org.w3c.dom.ls | |
org.xml.sax | 这个包提供了核心SAX API的。 |
org.xml.sax.ext | 此包包含适合的SAX驱动程序不一定支持的SAX2设施的接口。 |
org.xml.sax.helpers | 此包包含“助手”类,其中包括对引导基于SAX的应用程序的支持。 |
org.xmlpull.v1 | |
org.xmlpull.v1.sax2 |