Android学习一(入门)
一、Android 系统简介
1.1、1G-4G
1G:模拟制式手机,1995年问世的第一代模拟制式手机,只能进行语音通话,
2G:手机使用GSM,CDMA(9K/s),增加了接收数据的功能
2.5G:EDGE (172k/s)
3G:第三代数字通讯技术(3rd, Generation),
电国电信:CDMA2000,(日,韩和北美)
中国联通:WCDMA(世界上大部分3G网络都采用)
中国移动:TD-SCDMA(中国)
4G:LTE,长期演进.该技术包括 TD-LTE 和 FDD-LTE 两种制式。4G 是集 3G 与 WLAN 于一体,并能够传输高质
量视频图像
GSM->GPRS->EDGE->WCDMA->HSDPA-FDD-LTE长期演进
9k 42k 172k 364k 7.2M 300M
1.2、Adnroid由来
Android 系统最初由安迪·鲁宾等人开发制作,最初开发这个系统的目的是创建一个数码相机的先进操作系统;后来发现市场需求不够大,加上智能手机市场快速成长,于是 Android 被改造为一款面向智能手机的操作系统,
2005 年由 Google 收购注资,并组建开放手机联盟。2007 年 11 月 12 日,Android Beta
操作系统 SDK 正式发布。
1.3、进化史
1.4、Android 系统架构
android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。
1.Applications:提供了一些系统级的应用程序如:浏览器,电话本,email,拔号器等
2.Application Framwork:应用程序框架
- 丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器。
- 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据
- 资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件( layout files )。
- 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。
- 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。
3.库系统运行库
- libc:系统 C 库,基于 embedded linux 的设备定制的
- Surface Manager - 对显示子系统的管理,并且为多个应用程序提 供了2D和3D图层的无缝融合。界面管理
- Media Framework:媒体框架库
- SQLite:个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎
- OpenGL|ES:3D效果渲染,可以使用硬件 3D加速(如果可用)或者使用高度优化的3D软加速
- FreeType -位图(bitmap)和矢量(vector)字体显示
- WebKit- 一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图
- SSL:关于安全的部分
- SGL - 底层的2D图形引擎
Android 运行库
Core Library:Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能
Dalvik虚拟机:依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。
每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 "dx" 工具转化成.dex格式由虚拟机执行。
4.Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。
1.4、JVM与Dalvik虚拟机的区别
- Dalvik 基于寄存器,而 JVM 基于栈。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短
- VM字节码由.class文件组成,每个文件一个class。JVM在运行的时候为每一个类装载字节码。相反的,Dalvik程序只包含一个.dex文件,这个文件包含了程序中所有的类。Java编译器创建了JVM字节码之后,Dalvik的dx编译器删除.class文件,重新把它们编译成Dalvik字节码,然后把它们写进一个.dex文件中
二、SDK的下载与安装
2.1、开发环境
目前主流的开发工具有两个,一个是 Eclipse 另外一个是 Android Studio。 Eclipse 需要和 ADT(Android
Develop Tool)插件整合后才能使用,不过 Google 官方已经直接提供了 Eclipse 和 ADT 集成好的开发工具,
叫 ADT-Bundle。
Android Studio 是 Google 基于 IntelliJ IDEA 开发的 Android 集成开发工具,目前国内使用该开发工具
的企业也越来越多。Android 基础阶段我们依然使用 Eclipse 作为开发工具,在后面的课程中才会使用到
Android Studio。
2.2、ADT-Bundle 的下载和安装
第一步:JDK 的安装:
官方下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.htmle
下载好以后安装,并配置系统环境变量,这里就不再赘述。
第二步:下载 ADT-Bundle for Windows
官方下载地址:http://developer.android.com/sdk/index.html
由于该网址在国内已经被屏蔽掉了,因此本人提供了一个百度网盘的下载地址。
网盘下载地址:http://pan.baidu.com/s/1gdwIAER
第三步:安装 ADT-Bundle
直接把下载下来的 adt-bundle-windows-xxx-xxx.zip 解压到需要安装的位置
2.3、SDK 目录结构
将下载好的 ADT-Bundle 解压后根目录结构如图 1-2 所示,总共包括 3 个部分,eclipse、sdk、SDK
Manager.exe。
1、add-ons 这里面保存着附加库,比如 GoogleMaps,当然你如果安装了 OphoneSDK,这里也会有一
些类库在里面;
2、build-tools 这里保存着与编译相关的重要工具,比如 aapt、aidl、逆向调试工具 dexdump 和编译脚
本 dx,
3、docs 这里面是 Android SDKAPI 参考文档,所有的 API 都可以在这里查到;
4、extras 拓展开发包,这里面包括下向下兼容开发包以及 Intel 硬件加速程序等;
5、 platforms是每个平台的 SDK 真正的文件, 里面会根据 API Level 划分 SDK 版本, 这里就以 Android2.3
来说,进入后有 一个 android-10 的文件夹,android-10 进入后是 Android2.3 SDK 的主要文件,其中 data
保存着一些系统资源,images 是模拟器映像文件,skins 则是 Android 模拟器的皮肤,templates 是工程创建
的默认模板,android.jar 则是该版本的主要 framework 文件;
6、platform-tools 保存着一些通用工具,比如 adb.exe;
7、sources Android 系统源码目录,文件夹里可以包含多份源码,根据 API Level 划分为不同的文件夹;
8、system-images Android 系统镜像文件;
9、 tools 这里包含了重要的工具,比如 ddms 用于启动 Android 调试工具,draw9patch 则是绘制 android
平台的可缩放 png 图片的工具,sqlite3 可以在 PC 上操作 SQLite 数据库,emulator 是 Android SDK 模拟器
主程序,traceview 作为 android 平台上重要的调试工具;
2.4、SDK Manager
SDK Manager.exe 是 ADT 根目录下的一个 SDK 管理程序,该程序负责下载、更新、删除与 sdk 相关
的文件
该管理器主要分为以下几部分:
1、Tools 又分为 Android SDK Tools、Android SDK Platform-tools、Android SDK Build-tools。分别对
应 sdk 目录中的 tools、platform-tools、build-tools 三个目录。其中的 Rev. 代表版本号,Status 代表状态。
2、 Android x.x.x(API xx) 一般会有多个,一个 API 就有一个条目。该条目下分为 SDK Platform、 System
Image、Sources for Android SDK。分别对应 sdk 目录中的 platforms、system-images、sources 目录。
3、Extras 主要分为 Android Support Library 和 HAXM(Inter x86 模拟器加速器),对应 sdk 目录中的tools 文件。
由于 SDK Manager 需要通过连接国外互联网才可以对 sdk 进行升级管理,但是国内是被屏蔽了的,因
此大家可以直击从网站上下载现成的 sdk 文件,然后放到相应的目录下,这样就不需要 SDK Manager 进行
额外的管理工作。
2.5、AVD的创建与使用
上面的各个选项介绍如下:
1、AVD name 自定义的模拟器名称,建议见名知意的命名原则;
2、Device 选择设备屏幕分辨率;
3、Target 选择 Android 操作系统版本;
4、CPU/ABI 选择 CPU 架构。只有 x86 的才支持硬件加速。
5、Keyboard 勾选上后可以使用自己电脑键盘作为模拟器的键盘,不勾选的话默认使用模拟器键盘;
6、Skin 勾选上后显示模拟器实体按键,不勾选没有实体按键,建议勾选上;
7、Front Camera 选择前置摄像头设备,不用选;
8、Back Camera 选择后置摄像头设备,不用选;
9、Memory Options RAM 代表模拟器运行内存,VM Heap Dalvik 虚拟机堆内存大小,不建议改动;
10、Internal Storage 模拟器内置存储大小;
11、SD Card Size 设置 SDCard 的大小;
12、Emulation Options 模拟器选项,Snapshot 如果被勾选了,模拟器被关闭时相当于是使用了休眠的形式;
下次开启时会重新恢复到关机前状态,不建议勾选。User Host GPU,勾选上代表使用电脑提供图形处理;
一般如果我们的应用不涉及 3D 图像处理不需要勾选,甚至在有些电脑上勾选后反而导致模拟器无法运行。
当我们创建好模拟器之后,如果需要修改那么可以在图 1-7 中选中要修改的虚拟机,然后点击 Edit...,
如果需要删除,点击 Delete...,如果需要启动点击 Start...
在上图界面中有两个比较重要的选项。Scale display to real size 和 Wipe user data。后者很好理解,如果
勾选上了,那么启动时相当于恢复出厂设置。前者用的比较多,是用来缩放我们的模拟器界面的,如果不
勾选的话屏幕会显示模拟器的真实大小,肯能会占据我们的整个屏幕,因此可以选择勾选,然后将 Screen
Size 改为 6
点击 Launch,就开始启动模拟器,如果没有硬件加速可能需要 3 到 5 分钟的时间。
2.6、DDMS 简介
DDMS 是 Dalvik Debug Monitor Service 的简称。DDMS 为 IDE 和 emulator 以及 Android 真机架起来
了一座桥梁。开发人员可以通过 DDMS 看到目标机器上运行的进程/线程状态,可以看进程的 heap 信息,
可以查看 logcat 信息,可以查看进程分配内存情况,可以向目标机发送短信以及打电话,可以向 Android
发送地理位置信息。下面以 Eclipse 的 DDMS perspective 为例简单介绍 DDMS 的功能
左上部分为 Devices 窗口,列出了所有已经跟 adb 成功连接的模拟器(包括真机)以及各个模拟器中
所有运行的进程。如图 1-12 所示,最上面一排从左到右一共有 9 个可用按钮,分别为: 调试某个进程,
更新进程堆栈信息, 下载进程堆栈数据到本地, 调用垃圾回收器, 更新线程, 开启方法性
能分析数据收集, 停止某个进程, 抓取 Android 目前的屏幕, 查看当前界面视图树结构。
三、Android 程序入门
3.1、创建Helloworld
点击 ADT 左上角的 File 按钮,然后选择 New,然后点击 Android Application Project开
始 Android 工程的创建。(或者鼠标右击,在弹出的快捷菜单中创建也可以)。
该界面展示了是否创建图标,是否创建 activity,是否将该工程作为库工程,是否将
该工程添加到当前工作空间,是否将该工程添加到指定工作集等信息,通常情况下不需要我们修改默认的
配置,直接 Next 就行。
该界面提供了配置图标选项, 我们通过点击 Browser 按钮可以选择我们个性化的图标。
在学习阶段不需要使用,然后点击 Next...。
该向导界面可以让我们选择创建一个什么样式的 Activity,一般使用系统默认的 Blank
Activity 即可,然后点击 Next...。
这是最后一个向导界面了。 Activity Name 和 Layout Name 分别是让我们设置主 Activity
和其布局的名字,通常情况下使用默认名字即可。Navigation Type 是主界面 Activity 切换类型,使用 None
即可。然后点击 Finish 完成 Android 工程的创建。
四、Android 工程目录结构
4.1、结构
4.2、目录简述
1、src java 源代码存放目录。
2、gen 自动生成的目录
gen 目录中存放所有由 Android 开发工具自动生成的文件。目录中最重要的就是 R.java 文件。 这
个文件由 Android 开发工具自动产生的。Android 开发工具会自动根据你放入 res 目录的资源,同步更
新修改 R.java 文件。正因为 R.java 文件是由开发工具自动生成的,所以我们应避免手工修改 R.java。
另外编绎器也会检查 R.java 列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这
样可以减少应用在手机占用的空间。
3、bin 用于存放 ADT 编译时产生的临时文件, Android 工程最终会被打包成一个 xxx.apk
4、res 资源(Resource)目录
在这个目录中我们可以存放各种各样的资源,如 xml 界面文件,图片或数据,该目录下包含多个
子目录。
4.1、res/drawable
存放 png、jpg 等图标文件。在代码中使用 getResources().getDrawable(resourceId)获取该目录下的
资源。
4.2、res/layout
存放 xml 界面文件,xml 界面文件和 HTML 文件一样,主要用于显示用户操作界面。
4.3、res/values
存放应用使用到的各种类型数据。不同类型的数据存放在不同的文件中。比如:
4.3.1 strings.xml 定义字符串和数值
4.3.2 colors.xml 定义颜色和颜色字串数值
4.3.3 dimens.xml 定义尺寸数据
4.3.4 styles.xml 定义样式
4.4、res/anim/
存放自定义动画的 XML 文件。
4.5 res/xml/
在 Activity 中使用 getResources().getXML()读取该目录下的 XML 资源文件。
4.6 res/raw/
该目录用于存放应用使用到的原始文件,如音效文件等。编译软件时,这些数据不会被编译,它
们被直接加入到程序安装包里。
5、libs 支持库目录
程序开发时需要的一些三方的 jar 包可以放在这个目录,通常系统会自动把里面的 jar 包,添加到环境
变量,如果自动添加不了那么就需要手动添加。
6、assets 资源目录
Android 除了提供 res 资源文件外,在 assets 目录中可以存放资源文件,而且 assets 目录下的资源文件
不会在 R.java 中自动生成 id。
7、AndroidManifest.xml 项目清单文件
该文件用于配置四大组件、声明权限、配置应用版本等参数。
8、project.properties 项目环境信息,一般是不需要修改此文件。
9、proguard-project.txt 用于配置代码混淆参数。
4.3、运行
4.4、打包过程
ADT 将 Android 工程编译成 APK 中间经历了一系列过程,
Android 打包过程
ADT 将 Java 源文件编译成.class,然后调用 dx 工具将所有的.class 抽取到一个叫 classes.dex 的文件中。
然后调用 aapt 工具将 Android 中所有的资源,包括 res 和 assets 资源以及清单文件一起打包成 apk 文件,
然后在部署的时候给 apk 进行签名操作,最后通过 ADB 工具将签名后的 APK 部署到模拟器上。
上面的过程完全是 ADT 自动帮我们完成的。签名是用于区分同一包名的时候应用身份的,也就是如
果应用的包名相同签名不一样是不可以安装到同一个手机上的,如果包名相同签名也相同则可以覆盖安
装。
五、ADB 简介
5.1、ADB 介绍
adb 是 Android Debug Bridge 的简称,通过 adb 可以在 Eclipse 中通过 DDMS 来调试 Android 程序, adb
启动时会占用 5554 端口,因此要避免其他应用跟该端口冲突。默认情况下所以当我们运行 Eclipse 时 adb
进程就会自动运行。
adb 还可以通过命令行使用,前提是将 adb.exe 所在路径已经配置到了系统环境变量。adb.exe 位于sdk/platform-tools 目录下。环境变量的配置跟 JDK 相似,
5.2、ADB 常用命令
1、adb devices 列出当前连接上所有设备
2、adb install xxx.apk 将 xxx.apk 安装到模拟器上
多个设备连接时,选择设备安装
3、adb uninstall 包名 卸载应用
多个设备连接卸载
4、adb push <本地路径><远程路径> 将本地文件上传到模拟器上
5、adb pull <远程路径><本地路径> 将模拟器上文件下载到本地
6、adb kill-server 杀死 adb 进程
7、adb start-server 启动 adb 进程
8、adb shell 进入 Linux shell 命令行