Android技术讲座(2):系统概述和学习之路

来源:互联网 发布:中国软件行业协会招聘 编辑:程序博客网 时间:2024/06/12 00:37

准备工作:

Android环境搭建(详见前一个主题)
Android API帮助文档
英文:http://android.toolib.net/reference/packages.html
中文:http://www.cnblogs.com/over140/category/277077.html
Android系统源码
Android示例程序:
ApiDemo
范例:http://demo.apkbus.com/
论坛:安卓巴士、CSDN、51cto、博客园、eoeAndroid开发者社区等

一、Android背景介绍

Android是一个开放的手机平台,为移动设备提供了一个包含操作系统、中间件及应用程序的软件叠层架构。Android SDK为开发人员使用Java语言编写Android平台下的应用程序提供了必要的工具和API。

1.    Android的诞生

Android其实是一家公司的名称,这家公司的创始人名叫Andy Rubin。Andy Rubin原来是苹果公司的一名工程师,后来创办过几家公司。在创办Android公司时,Andy Rubin准备打造一个移动终端平台并将其对开发人员开放,后来Google收购了该公司,于是就有了今天如日中天的Android。

2.    Android的特性

Android自推出以来如此受追捧不仅仅是因为网络巨头Google的大力扶持,Android自身所具有的特性才是吸引全球精英开发者的更重要原因。Android其主要特性如下:

  • 应用程序框架:可以方便地重用和替换手机组件。
  • Dalvik虚拟机:专为移动设备优化的虚拟机。
  • 内部集成浏览器:基于开源的WebKit引擎。
  • 优化的图形系统:其中自定义了2D图形库,3D图形库基于OpenGL ES 1.0,可选硬件加速。
  • SQLite:集成了轻量级数据库管理系统。
  • 多媒体支持:支持常见的音频和视频,以及各种图片格式,如MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等。
  • GSM技术、蓝牙、EDGE、3G和WiFi:需要硬件支持。
  • 摄像头、GPS、罗盘、加速度计:需要硬件支持。
  • 完备的开发环境:包括设备模拟器、调试工具、内存和性能分析工具,以及用于Eclipse开发环境的插件。

3.    Android的优点

目前市面上的手机操作系统出了Android,还有Symbian、iPhone等,与这些手机操作系统相比,Android具有以下优点。

(1)    真正开放

Android平台提供了从底层操作系统到上层的程序界面的所有软件,使用这个平台无须缴纳任何授权许可费用,同时不同的厂商还可以根据自身需求修改和扩展Android平台。

(2)    应用程序相互平等

在Android平台下,除了应用程序运行的载体虚拟机之外,其它的软件是完全平等的。例如可以自己开发收发Email的应用程序来替换系统提供的相应软件。

(3)    应用程序之间沟通无限制

在Android平台下开发应用程序,可以方便地实现应用程序之间的数据共享,只需要经过简单的声明或操作,应用程序就可以访问或调用其他应用程序的功能,或者将自己的部分数据和功能提供给其他应用程序使用。

二、Android系统结构简介

Android系统从底向上一共分了4层,每一层都把底层实现封装,并暴露调用接口给上一层。
1.jpg
2011-4-23 12:57 上传

下面是简单翻译的版本:
2.jpg



  • Linux内核(Linux Kernel)
    • Android运行在linux kernel 2.6之上,但是把linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的。
    • Linux 内核是硬件和软件层之间的抽象层。
  • 中间件
    • 中间件包括两部分:核心库和运行时(libraries & Android runtime)
    • 核心库包括,SurfaceManager 显示系统管理库,负责把2D或3D内容显示到屏幕;Media Framework 媒体库,负责支持图像,支持多种视频和音频的录制和回放;SQlite 数据库,一个功能强大的轻量级嵌入式关系数据库;WebKit 浏览器引擎等。
    • Dalvik虚拟机:区别于Java虚拟机的是,每一个Android 应用程序都在它自己的进程中运行,都有一个属于自己的Dalvik 虚拟机,这一点可以让系统在运行时可以达到优化,程序间的影响大大降低。Dalvik虚拟机并非运行Java字节码,而是运行自己的字节码。
  • 应用程序框架(Application Framework)
    • 丰富而又可扩展性的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids), 文本框(text boxes),按钮( buttons), 可嵌入的web 浏览器。
    • 内容提供者(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。
    • 资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件( layoutfiles )。
    • 通知管理器(Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。
    • 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。
  • 应用程序 (Applications):Android 系统会内置一些应用程序包包括email 客户端,SMS 短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA 语言编写的。


    三、AVD虚拟设备

    创建和启动虚拟设备
    名字(Name):这个虚拟设备的名称,由用户自定义;
    目标Target):选择不同的SDK版本(依赖一目前SDKplatform目中包含了哪些版本的SDK
    SD卡:模拟SD卡,可以选择大小或者一个SD卡映像文件,SD卡映像文件是用mksdcard工具建立的。
    皮肤Skin):这里皮肤的含义其实是仿真器运行尺寸的大小,默认的尺寸HVGA-P320x480),HVGA-L480x320)等,也可以通过直接指定尺寸的方式制定屏幕的大小。
    属性:可以由用户指定仿真器运行的时候,Android系统中一些属性

    四、Android应用程序结构分析

    8.gif 
    1、src目录是源代码目录,所有允许用户修改的java文件和用户自己添加的java文件都保存在这个目录中
    2、gen目录是1.5版本新增的目录,用来保存ADT自动生成的java文件,例如R.java或AIDL文件
    注意:R.java文件(非常重要)
    a) R.java文件是ADT自动生成的文件,包含对drawable、layout和values目录内的资源的引用指针,Android程序能够直接通过R类引用目录中的资源
    b) R.java文件不能手工修改,如果向资源目录中增加或删除了资源文件,则需要在工程名称上右击,选择Refresh来更新R.java文件中的代码
    c) R类包含的几个内部类,分别与资源类型相对应,资源ID便保存在这些内部类中,例如子类drawable表示图像资源,内部的静态变量icon表示资源名称,其资源ID为0x7f020000。一般情况下,资源名称与资源文件名相同
    3、android.jar文件是Android程序所能引用的函数库文件,Android通过平台所支持API都包含在这个文件中:

    android.app :提供高层的程序模型、提供基本的运行环境
    android.content :包含各种的对设备上的数据进行访问和发布的类
    android.database :通过内容提供者浏览和操作数据库
    android.graphics :底层的图形库,包含画布,颜色过滤,点,矩形,可以将他们直接绘制到屏幕上.
    android.location :定位和相关服务的类
    android.media :提供一些类管理多种音频、视频的媒体接口
    android.net :提供帮助网络访问的类,超过通常的java.net.*接口
    android.os :提供了系统服务、消息传输、IPC 机制
    android.opengl :提供OpenGL 的工具
    android.provider :提供类访问Android 的内容提供者
    android.telephony :提供与拨打电话相关的API 交互
    android.view :提供基础的用户界面接口框架
    android.util :涉及工具性的方法,例如时间日期的操作
    android.webkit :默认浏览器操作接口
    android.widget :包含各种UI 元素(大部分是可见的)在应用程序的屏幕中使用

    4、assets目录用来存放原始格式的文件,例如音频文件、视频文件等二进制格式文件。此目录中的资源不能被R.java文件索引。,所以只能以资截流的形式读取。一般情况下为空
    5、main.xml文件,是界面布局文件,利用XML语言描述的用户界面
    1. <?xml version="1.0" encoding="utf-8"?>
    2. 02

    3. 03
    4. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    5. 04
    6.     android:orientation="vertical"
    7. 05
    8.     android:layout_width="fill_parent"
    9. 06
    10.     android:layout_height="fill_parent"
    11. 07
    12.     >
    13. 08

    14. 09
    15. <TextView 
    16. 10
    17.     android:layout_width="fill_parent"
    18. 11
    19.     android:layout_height="wrap_content"
    20. 12
    21.     android:text="@string/hello"
    22. 13
    23.     />
    24. 14

    25. 15
    26. </LinearLayout>
    复制代码
    6、Strings.xml文件是程序中的一些字符串的引用
    1. <?xml version="1.0" encoding="utf-8"?>
    2. 2
    3. <resources>
    4. 3
    5.     <string name="hello">Hello World, HelloAndroid!</string>
    6. 4
    7.     <string name="app_name">HelloAndroid</string>
    8. 5
    9. </resources>
    复制代码
    7、AndroidManifest.xml是XML格式的Android程序声明文件,包含了Android系统运行Android程序前所必须掌握的重要信息,这些信息包含应用程序名称、图标、包名称、模块组成、授权和SDK最低版本等,而且每个Android程序必须在根目录下包含一个 AndroidManifest.xml文件
    1. <?xml version="1.0" encoding="utf-8"?>
    2. 02

    3. 03
    4. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    5. 04
    6.        package="edu.hrbeu.HelloAndroid"
    7. 05
    8.        android:versionCode="1"
    9. 06
    10.        android:versionName="1.0">
    11. 07

    12. 08
    13.    <application android:icon="@drawable/icon"
    14. 09
    15.                    android:label="@string/app_name">
    16. 10
    17.        <activity android:name=".HelloAndroid"
    18. 11
    19.                    android:label="@string/app_name">
    20. 12

    21. 13
    22.            <intent-filter>
    23. 14
    24.                <action android:name="android.intent.action.MAIN" />
    25. 15
    26.                <category android:name="android.intent.category.LAUNCHER" />
    27. 16
    28.             </intent-filter>
    29. 17
    30.        </activity>
    31. 18

    32. 19
    33.    </application>
    34. 20

    35. 21
    36.    <uses-sdk android:minSdkVersion="3" />
    37. 22

    38. 23
    39. </manifest>
    复制代码
    注:AndroidMainfest.xml文件:
    1)    AndroidManifest.xml文件的根元素是manifest,包含了xmlns:android、package、android:versionCode和android:versionName共4个属性
    2)    xmlns:android定义了Android的命名空间,值为http://schemas.android.com/apk/res/android
    3)    package定义了应用程序的包名称
    4)    android:versionCode定义了应用程序的版本号,是一个整数值,数值越大说明版本越新,但仅在程序内部使用,并不提供给应用程序的使用者
    5)    android:versionName定义了应用程序的版本名称,是一个字符串,仅限于为用户提供一个版本标识
    6)    manifest元素仅能包含一个application元素,application元素中能够声明Android程序中最重要的四个组成部分,包括 Activity、Service、BroadcastReceiver和ContentProvider,所定义的属性将影响所有组成部分
    7)    第6行属性android:icon定义了Android应用程序的图标,其中@drawable/icon是一种资源引用方式,表示资源类型是图像,资源名称为icon,对应的资源文件为res/drawable目录下的icon.png
    8)   第7行属性android:label则定义了Android应用程序的标签名称
    8、default.properties文件记录Android工程的相关设置,该文件不能手动修改,需右键单击工程名称,选择“Properties”进行修改

    五、Android应用程序的运行和调试


    运行
    ¡Run As->AndroidApplication
    调试
    ¡DDMS的启动
    ¡Devices面板
    ¡Emulator Control面板
    ¡信息输出面板
    ¡日志输出
    传统方法:System.out.println()
    Log:
    Log.v(Stringtag,Stringmsg):输出冗余信息
    Log.d(Stringtag,Stringmsg):输出调试信息
    Log.i(Stringtag,Stringmsg):输出普通信息
    Log.w(Stringtag,Stringmsg):输出警告信息
    Log.e(Stringtag,Stringmsg):输出错误信息

    六、Android游戏与应用开发最佳学习路线图 


    路线图概括:
    具体需要掌握的知识点:


    具体知识点与目标:





    如何成为一个Android高手:

    —  一、初级
       1. 拥有娴熟的Java基础,理解设计模式,比如OOP语言的工厂模式要懂得。
        2. 掌握Android UI控件、Android Java层API相关使用。
        迈向中级,最好再次更新下Java技术,掌握Java concurrent库、nio库,精通xml、json解析,做过socket c/s端的程序。
      二、中级
       1. 熟练掌握NDK JNI方式的开发,对Android framework十分了解。
       2. 移植一些开源项目,比如FFmpeg、Mplayer到Android上运行。
       迈向高级,熟悉android开源代码的结构,中间件下层的库,比如webkit、opencore、opengl。
      三、高级
      1. 熟练的Linux驱动开发,精通Linux内核结构。
      2. 掌握Android移植,比如常见的TI OMAP、Qualcomm MSM的硬件移植。
      迈向顶级,发现Android系统中的0day漏洞,可以轻松的找出Root系统的10种方法,帮助Google改进Android操作系统
  • 原创粉丝点击