`

Android学习01-----走进Android世界

阅读更多

 

在描述Android 之前,我想先简单描述一下3GWAP 技术。

3G

3G(3rd Generation) ,中文含义就是指第三代数字通信。

所谓3G ,是指将无线通信与国际互联网 等多媒体通信结合的新一代移动通信系统。 3G 只是一种通信技术标准,符合这个标准的技术有WCDMACDMA2000TD-SCDMA 三种制式。其中中国联通使用的是WCDMA (世界上大部分3G 网络都采用的是该标准);中国电信使用的是CDMA2000 (日、韩和北美使用);中国移动使用的是具有自主知识产权的TD-SCDMA (只有中国才使用)。相对第一代模拟制式手机(1G) 和第二代GSMCDMA 等数字手机(2G)3G 网络能处理图像、音乐、视频等多种媒体形式,提供包括网页浏览、电话会议、电子商务等多种信息服务。第三代与前两代的主要区别是在传输声音和数据的速度上有很大的提升 .

因为3G 商用需要相当浩大的工程,要从2G 迈向3G 不可能一次性就衔接得上,因此出现了中间产物“2.5G ”,符合这一标准的有CDMA2000 1XGPRS ,中国联通使用的是CDMA2000 1X 标准,中国移动使用的是GPRS 标准。在2.5G 网络下出现了大家熟悉的WAP 、蓝牙(Bluetoot) 等技术。

 

智能手机软件平台:

智能手机软件平台主要有:Symbian, Windows Mobile, RIM BlackBerry( 黑莓) , Android , iPhone, Palm, Brew, Java/J2ME 。绿色的是可以使用Java 语言进行开发的;

 

WAP 技术:

WAP 技术,它的推出主要是用来解决数据量小的这些网页。而这些网页又不适合HTML 语言来开发。WAP 类似于Web ,也是B/S 架构,但也存在一些区别:

Web 中的B/S 中的BWeb 浏览器(它解释的标签语言是HTML ,解释的脚本是JavaScript ),而WAPB/S 中的BWAP 浏览器(它解释的标签语言是WML 标签,可以把WML 标签看作是HTML 标签的简化版,解释的脚本语言是WMLScript );

对于服务器端(S )就没有什么区别了。其主要差别就是假设服务器端使用Java 语言开发,那么在WebJava 执行后返回给浏览器的代码是HTML 代码,而WAP 中服务器端使用的Java 语言开发执行后返回给浏览器的代码是WML 代码;

 

Android 历史:

好上面主要描述了3GWAP 技术,下面我主要再描述一下Android 的相关历史。

Android 本义是指“机器人”,是Google2007115 日宣布的基于Linux 平台的开源手机操作系统,它包括一个操作系统中间件 和一些重要的应用程序 (Android is a software stack for mobile devices that includes an operating system, middleware and key applications.) 。它采用软件堆层(Software Stack ,又名软件叠层)的架构,主要分为三部分。底层以Linux 内核工作为基础,由C 语言开发,只提供基本功能;中间层包括函数库LibraryDalvik 虚拟机,由C++ 开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java 作为编写程序的一部分。不存在任何以往阻碍移动产业创新的专有权障碍,号称是首个为移动终端打造的真正开放和完整的移动软件。简单来说就是一个开源的手机操作系统。通过下面的这张图可以更好的理解Android 的软件堆层架构:

 

对于智能手机软件平台而言,Android 中最大的竞争对手就是AppleIOS 操作系统,如果纯粹来讲,Apple 本身具备了软件和硬件的开发能力,但是反过来讲,GoogleApple 之间的差距只在硬件生产上,所以后来在2011 年的时候Google 收购了MOTO ,这样一来从硬件和软件上就具备了与Apple 进行竞争的实力。下面我来对IOSAndroid 进行一下简单的比较:

No.

比较

IOS(Iphone 手机)

Android

1

开发平台

Apple Mac OS

不局限于操作系统

2

开发工具

Xcode

Eclipse

3

开发语言

Objective-C( 这也许就是其在编程语言排行榜中上升这么快的原因)

Java

4

兼容性

封闭操作系统,有Apple 制定,兼容性高

Google 规定出硬件标准,由不同的厂商进行手机的研发,由于厂商众多,所以兼容性低

5

UI 交互界面

主要依靠触屏完成

触屏和按键同时操作

6

显示风格

统一的视觉规范和分辨率

视觉规范由厂商决定,屏幕分辨率繁多

 

Android 最新的版本是4.0 版本,下面我简单对这些版本进行描述一下:

·       Android 2.x 或以下都是为Android 手机准备的;

·       Android 3.x 是为平板电脑准备的;

·       Android 4.0 为手机和平板电脑同时准备;

 

Android 开发环境搭建:

       从事软件开发的都知道“工欲善其事必先利其器”的道理,下面我来简单描述一下如果搭建Android 开发环境。首先我们需要了解两个概念。

APK Android Package 的缩写,即Android 安装包(anapk)APK 是类似Symbian SisSisx 的文件格式。通过将APK 文件直接传到Android 模拟器或Android 手机中执行即可安装。

SDK Software Development Kit 的缩写,中文即“软件开发工具包”。是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合,一般而言SDK 即开发 Windows 平台下的应用程序所使用的SDK 。它可以简单的为某个程序设计语言提供应用程序接口 API 的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。一般的工具包括用于调试和其他用途的实用工具。SDK 还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档。

官方推荐使用JDK+ECLIPSE+ADT+Android SDK(window 环境)

1 、首先需要download 用于在Eclipse 开发android 应用的ADT 插件(http://dl-ssl.google.com/android/eclipse/),我们知道在企业开发中,很多程序员使用Eclipse IDE 作为应用的开发环境。为了使得Android 应用的创建,运行和调试更加方便快捷。Android 的开发团队专门针对Eclipse IDE 定制了一个插件:Android Development ToolsADT http://dl.google.com/android/ADT-0.9.7.zip ,然后安装Eclipse 插件(ADT) ,最新版本ADT下载地址:http://developer.android.com/sdk/installing/installing-adt.html

启动 Eclipse ,选择 Help > Install New Software ,在出现的对话框里,点击Add 按钮,在对话框的name 一栏输入“ADT ”, 然后点击Archive... ,浏览和选择已经下载的ADT 插件压缩文件(我们知道Eclipse 可以安装很多插件,其实基本上所有的插件都可以通过这种方式进行安装,注意个人建议还是先download 插件再在Eclipse 中进行安装,而不要使用Eclipse 进行在线安装,那样会很慢)。

点击 OK. 。返回可用软件的视图,你会看到这个插件,然后选择Developer Tools ( 会选中下面的“Android Developer Tools ”和 “Android Editors) ,点击 Next ,最后重启 Eclipse

2 download Android SDK ,下载完SDK 后,把.zip 文件解压到你电脑上合适位置。启动 Eclipse ,选择window->preferences ,在打开的视图左边点击android ,在右边的SDK Location 中选择Android SDK 所在位置。下载地址:

http://developer.android.com/sdk/index.html   这样就OK 了。

 

HelloWorld:

下面我们再开始我们第一个Android 程序,永远的HelloWorld( 如果你能用几百种方法打印HelloWorld 你一样非常牛X):

步骤:

       File--->New--->Android Project---> 输入Project Name---> 选择Android 的版本,这里我们选择2.2---> 输入Application Name( 软件名称)Package Name( 生成的java 文件所在的包)Minimum SDK( 指定最低兼容的Android 版本) ,还有是否创建测试。Finish 后就可以看到Android Project 的结构目录

 

 

 

 

Android 应用程序架构:

src/   java 原代码存放目录

gen/ 自动生成目录

res/ 资源(Resource) 目录

assets 资源目录,主要存放一些大文件,如图片、音乐、字体等;

AndroidManifest.xml 项目清单文件

default.properties 项目环境信息 ,一般是不需要修改此文件

 

gen 目录说明:

       gen 目录中存放所有由Android 开发工具自动生成的文件。目录中最重要的就是R.java 文件。 这个文件由Android 开发工具自动产生的。Android 开发工具会自动根据你放入res 目录的xml 界面文件、图标与常量,同步更新修改R.java 文件。正因为R.java 文件是由开发工具自动生成的,所以我们应避免手工修改R.javaR.java 在应用中起到了字典的作用 ,它包含了界面、图标、常量等各种资源的id ,通过R.java ,应用可以很方便地找到对应资源。另外编绎器也会检查R.java 列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。

Res 目录说明:

在这个目录中我们可以存放应用使用到的各种资源,如xml 界面文件,图片或数据。

res/drawable 专门存放pngjpg 等图标文件。在代码中使用getResources().getDrawable(resourceId) 获取该目录下的资源。

       -hdpi:高分辨率

       -ldpi:低分辨率

       -mdpi:中等分辨率

res/layout 专门存放xml 界面文件,xml 界面文件和HTML 文件一样,主要用于显示用户操作界面。

res/values 专门存放应用使用到的各种类型数据。不同类型的数据存放在不同的文件中,如下:

·strings.xml 定义字符串和数值, 这个比较相对比较多点,在Activity 中使用getResources().getString(resourceId) getResources().getText(resourceId) 取得资源。它的作用和struts 中的国际化资源文件一样。

<? xml version = "1.0" encoding = "utf-8" ?>

< resources >

    < string name = "hello" > Hello World, HelloActivity! </ string >

    < string name = "app_name" > 第一个应用 </ string >

    < string name = "wxd" > 王旭东 </ string >

</ resources >

 

 

· arrays.xml 定义数组。

<? xml version = "1.0" encoding = "utf-8" ?>

< resources >

    < string-array name = "colors" >

       < item > red </ item >

       < item > yellow </ item >     

       < item > green </ item >     

       < item > blue </ item >   

    </ string-array >

</ resources >

 

·colors.xml 定义颜色和颜色字串数值,你可以在Activity 中使用getResources().getDrawable(resourceId) 以及getResources().getColor(resourceId) 取得这些资源。例子如下:

<? xml version = "1.0" encoding = "UTF-8" ?>

< resources >

  < color name = "contents_text" > #ff0000 </ color >

</ resources >

 

·dimens.xml 定义尺寸数据,在Activity 中使用getResources().getDimension(resourceId) 取得这些资源

   <? xml version = "1.0" encoding = "UTF-8" ?>

< resources >

  < dimen name = "key_height" > 50dip </ dimen >

</ resources >

 

· styles.xml 定义样式。

<? xml version = "1.0" encoding = "utf-8" ?>

< resources >

    < style name = "itcastText" parent = "@style/Text" >

       < item name = "android:textSize" > 18sp </ item >

       < item name = "android:textColor" > #0066FF </ item >

    </ style >

</ resources >

 

res/anim/ 存放定义动画的XML 文件。

res/xml/ Activity 中使用getResources().getXML() 读取该目录下的XML 资源文件。

res/raw/ 该目录用于存放应用使用到的原始文件,如音效文件等。编译软件时,这些数据不会被编译,它们被直接加入到程序安装包里。 为了在程序中使用这些资源,你可以调用getResources().openRawResource(ID) , 参数ID 形式:R.raw.somefilename

assets 目录说明:

Android 除了提供/res 目录存放资源文件外,/assets 目录也可以存放资源文件,而且/assets 目录下的资源文件不会在R.java 自动生成ID ,所以读取/assets 目录下的文件必须指定文件的路径,如:file:///android_asset/xxx.3gp

AndroidManifest.xml 文件说明:

  这个文件列出了应用程序所提供的功能,以后你开发好的各种组件需要在该文件中进行配置,如果应用使用到了系统内置的应用( 如电话服务、互联网服务、短信服务、GPS 服务等等) ,你还需在该文件中声明使用权限。

 

Android 手机模拟器创建:

点击 打开虚拟设备管理器,并新建手机模拟器:

 

屏幕分辨率说明:

HVGA:320 ×480

QVGA :240x320

WQVGA400:240X400

WQVAG432:240X432

WVGA800: 480X800

WVGA854: 480X854

 

当模拟器创建完成之后,Android虚拟机会自动的保存在一个目录之中“C:\Users\xdwang\.android\avd”;


Android 项目运行过程分析:

       AndroidManifest.xml:

<? xml version = "1.0" encoding = "utf-8" ?>

< manifest xmlns:android = "http://schemas.android.com/apk/res/android"

    package = "com.iflytek.hello"

    android:versionCode = "1"

    android:versionName = "1.0" >

    < uses-sdk android:minSdkVersion = "8" />

    < application

        android:icon = "@drawable/ic_launcher"

        android:label = "@string/app_name" >

        < activity

            android:label = "@string/app_name"

            android:name = ".HelloWorldActivity" >

            < intent-filter >

                < action android:name = "android.intent.action.MAIN" />

             < category android:name = "android.intent.category.LAUNCHER" />

            </ intent-filter >

        </ activity >

    </ application >

</ manifest >

 

1 manifest 里:

package = "c com.iflytek.hello " , 表示应用的包 以后四大组件必须在该包或其子包下创建

android:versionCode = "1" android:versionName = "1.0" 表示应用的版本和版本的名称

2 application 里:

android:icon = " @drawable/ic_launcher " 表示应用的图片;

       @ 代表的是 R 文件

       drawable 代表 R 文件中的内部类名称

       ic_launcher 访问的是前面内部类里的常量

android:label = " @string/app_name " 表示应用的标题 当下面的 activity 中没有指定 Androidl.label 时就会使用上面这个标题

3 activity Android 中的一种组件 ):

       activity android:name = " .HelloWorldActivity " activity 类的的类名 所有的 activity 类都要继承 Activity

              . 表示当前应用所在的包 所指的包就是上面 Package 所指定的包 HelloActivity 就是在 Package 所指定的包下 . 当这个类在前这个包下时 点是可以省略的 但是如果这个类在当前这个包的子包下面 则不能省略而需要写成 .sub.HelloActivity

这个标题就是由 Activity 里的 android:label = " @string/app_name " 控制的。

< intent-filter > : 是指意图过滤器 后面再详解

< action android:name = "android.intent.action.MAIN" /> 就是定义这个 Activity 作为这个应用的入口类 每一个应用只有一个入口类

< category android:name = "android.intent.category.LAUNCHER" /> 表示类别 这个类别一旦指定了之后 那么这个入口类他就会出现在     启动器 手机里点主界面菜单看到的按钮 这个列表里面去 所以说这两个是在安装的时候读取。将其放入表中,在使用的时候再进行匹配。

4、 < uses-sdk android:minSdkVersion = "7" /> ,最低兼容的版本号;

 

Android应用运行过程分析:

       当点击Android里的一个应用时,操作系统可以把这个点击行为封装成一个意图(intent),意图里面他包含了两个内容一个是动作名称一个是类别,当他封装好这个意图之后呢,它就会传给操作系统里的一个消息处理器(意图处理器),意图处理器就会在注册表里的这个应用里面去寻找与这个应用匹配的组件。找到组件之后就会对组件所对应的这个类实例化(实例化通过反射技术实现),实例化完成之后就会执行里面的onCreate方法(它是在这个类被创建完成之后就会被系统调用的),所以说这个方法里一般完成初始化的工作,包括界面的初始化功能,这个方法在它的生命周期内只会执行一次。

public class HelloActivity extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super .onCreate (savedInstanceState);

        setContentView(R.layout. main );

    }

}

 

setContentView(R.layout. main ); 其作用就是显示一个界面出来

调用的 main.xml

<? xml version = "1.0" encoding = "utf-8" ?>

< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"

    android:orientation = "vertical"

    android:layout_width = "fill_parent"

    android:layout_height = "fill_parent"

    >

< TextView  

    android:layout_width = "150dip"

    android:layout_height = "wrap_content"

    android:text = "@string/hello"

    />

< TextView  

    android:layout_width = "fill_parent"

    android:layout_height = "wrap_content"

    android:text = " 王旭东 "

    />

</ LinearLayout >

 

1 LinearLayout 线性布局 里面的 vertical 表示 LinearLayout 里的 TextView 控件 或者多个 TextView 控件是以一列显示的 同理如何是 horizontal 则是表示一行显示 需要注意的是不管顶级元素是什么 xmlns:android = "http://schemas.android.com/apk/res/android" 声明是不能够省略的。

android:layout_width android:layout_height 分别表示布局的宽度和高度 对于顶级元素 它的父元素就是整个屏幕 所以说 fill_parent 就表示占满整个屏幕

2 TextView 等价于 <Lable> 专门用来显示文字 在这里的 android:layout_width = "fill_parent"   就表示线性布局的宽度

android:layout_height = "wrap_content" 就表示你的内容有多高 TextView 就有多高

说明

这里的宽度和高度也可以直接写具体的值如 100px

1、px (pixels)像素:一般HVGA代表320x480像素,这个用的比较多。

       2、 dip或dp (device independent pixels)设备独立像素,这个和设备硬件有关,一般为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。

       3 sp (scaled pixels — best for text size) 比例像素 主要处理字体的大小,可以根据系统的字体自适应。

除了上面三个显示单位,下面还有几个不太常用:

  in (inches) 英寸

  mm (millimeters) 毫米  

  pt (points) 1/72 英寸

为了适应不同分辨率 不同的像素密度 推荐使用 dip 文字使用 sp

android:text = "@string/hello" 指定显示的文字 这里也可以直接写想要写的文字

       如果直接写的话有以下几个问题:

              1、无法实现国际化;

              2、消耗内存(因为如果这个文字直接填写进来,那么如果这里需要有1w个地方都需要占内存,而如果放在引用里则只需要一个地方占内存);

              3、维护起来也方便

最后运行结果:

 

 

上面的界面也可以通过代码动态生成

 

public class Hello extends Activity{
   	@Override
	public void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);//生命周期方法
               TextView text = new TextView(this);//要根据上下文(Content)创建组件
               text.setText("测试");
               super.setContentView(text);//设置要使用的布局管理器
                              
        }
}

 

 

最后简单说明一下如何向虚拟器中加入东西,例如向虚拟器中放入歌曲:window--->show view--->other--->

 

找到里面的

 

                                                                         

 

 


 

  • 大小: 330.8 KB
  • 大小: 44.7 KB
  • 大小: 45.9 KB
  • 大小: 44.8 KB
  • 大小: 14.6 KB
  • 大小: 11 KB
  • 大小: 72.6 KB
  • 大小: 3.6 KB
  • 大小: 4.7 KB
  • 大小: 33.4 KB
  • 大小: 4.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics