在描述Android 之前,我想先简单描述一下3G 和WAP 技术。
3G :
3G(3rd Generation) ,中文含义就是指第三代数字通信。
所谓3G ,是指将无线通信与国际互联网 等多媒体通信结合的新一代移动通信系统。 3G 只是一种通信技术标准,符合这个标准的技术有WCDMA 、CDMA2000 、TD-SCDMA 三种制式。其中中国联通使用的是WCDMA (世界上大部分3G 网络都采用的是该标准);中国电信使用的是CDMA2000 (日、韩和北美使用);中国移动使用的是具有自主知识产权的TD-SCDMA (只有中国才使用)。相对第一代模拟制式手机(1G) 和第二代GSM 、CDMA 等数字手机(2G) ,3G 网络能处理图像、音乐、视频等多种媒体形式,提供包括网页浏览、电话会议、电子商务等多种信息服务。第三代与前两代的主要区别是在传输声音和数据的速度上有很大的提升 .
因为3G 商用需要相当浩大的工程,要从2G 迈向3G 不可能一次性就衔接得上,因此出现了中间产物“2.5G ”,符合这一标准的有CDMA2000 1X 和GPRS ,中国联通使用的是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 中的B 为Web 浏览器(它解释的标签语言是HTML ,解释的脚本是JavaScript ),而WAP 的B/S 中的B 为WAP 浏览器(它解释的标签语言是WML 标签,可以把WML 标签看作是HTML 标签的简化版,解释的脚本语言是WMLScript );
对于服务器端(S )就没有什么区别了。其主要差别就是假设服务器端使用Java 语言开发,那么在Web 中Java 执行后返回给浏览器的代码是HTML 代码,而WAP 中服务器端使用的Java 语言开发执行后返回给浏览器的代码是WML 代码;
Android 历史:
好上面主要描述了3G 和WAP 技术,下面我主要再描述一下Android 的相关历史。
Android 本义是指“机器人”,是Google 于2007 年11 月5 日宣布的基于Linux 平台的开源手机操作系统,它包括一个操作系统 ,中间件 和一些重要的应用程序 (Android is a software stack for mobile devices that includes an operating system, middleware and key applications.) 。它采用软件堆层(Software Stack ,又名软件叠层)的架构,主要分为三部分。底层以Linux 内核工作为基础,由C 语言开发,只提供基本功能;中间层包括函数库Library 和Dalvik 虚拟机,由C++ 开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java 作为编写程序的一部分。不存在任何以往阻碍移动产业创新的专有权障碍,号称是首个为移动终端打造的真正开放和完整的移动软件。简单来说就是一个开源的手机操作系统。通过下面的这张图可以更好的理解Android 的软件堆层架构:
对于智能手机软件平台而言,Android 中最大的竞争对手就是Apple 的IOS 操作系统,如果纯粹来讲,Apple 本身具备了软件和硬件的开发能力,但是反过来讲,Google 和Apple 之间的差距只在硬件生产上,所以后来在2011 年的时候Google 收购了MOTO ,这样一来从硬件和软件上就具备了与Apple 进行竞争的实力。下面我来对IOS 与Android 进行一下简单的比较:
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 Sis 或Sisx 的文件格式。通过将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 Tools (ADT ) 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.java 。R.java 在应用中起到了字典的作用 ,它包含了界面、图标、常量等各种资源的id ,通过R.java ,应用可以很方便地找到对应资源。另外编绎器也会检查R.java 列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。
Res 目录说明:
在这个目录中我们可以存放应用使用到的各种资源,如xml 界面文件,图片或数据。
res/drawable 专门存放png 、jpg 等图标文件。在代码中使用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 :
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--->
找到里面的
相关推荐
本篇文章将围绕一款名为"Jewels宝石消消乐"的Android游戏源码进行深度剖析,带你走进Android游戏开发的世界。 首先,"Jewels宝石消消乐"是一款基于Java编程语言开发的休闲消除类游戏。Java是Android系统的主要编程...
总之,《Kotlin for Android Developers》中文教程是Android开发者学习Kotlin的宝贵资料,它将引导你走进Kotlin的世界,体验这一强大语言带来的开发便利。结合实际项目练习,你将能够充分利用Kotlin的优势,打造高...
这里我们将深入探讨"01-android 4.0 入门配置以及HelloWorld程序讲解"的相关知识点,带你走进Android开发的世界。 首先,让我们从Android 4.0(也称为Ice Cream Sandwich,简称ICS)开始。这是Android操作系统的一...
"android-art-res"项目会引导你走进Android资源系统的世界,学习如何通过Resource ID查找资源,以及如何处理动态资源和主题切换。 此外,"android-art-res"可能还包含了关于多线程、并发控制、安全性和性能调优等...
这篇内容将深入探讨这份源代码,带你走进Android开发的深层世界。 首先,我们要理解Android应用的基本结构。一个标准的Android应用通常包含多个组件,如Activity(活动)、Service(服务)、BroadcastReceiver...
本文将深入探讨cocos2d-android及其核心组件——Box2D物理引擎,带你走进激动人心的2D游戏世界。 首先,cocos2d-android是基于C++的cocos2d-x的一个分支,它充分利用了Android的原生API,使得游戏运行更高效、性能...
这篇“Android菜鸟日记25-android反编译”将带你走进Android反编译的世界,揭示APK背后的秘密。 首先,让我们了解什么是Android反编译。Android应用主要由Java语言编写,经过编译后生成Dalvik字节码(.dex文件),...
1. **0100_第一部分:走进Android的世界**:这部分通常会介绍Android系统的基本架构和开发环境的搭建,包括安装Android Studio、理解Android SDK、AVD(Android虚拟设备)管理器的使用,以及构建第一个"Hello, World...
这份文档将带领新手逐步走进Android世界,了解其历史、架构,并提供基础的开发知识,是Android开发者入门的宝贵资料。通过不断学习和实践,开发者可以掌握创建功能丰富、用户体验优秀的Android应用的技能。
总的来说,《Android-OPhone开发完全讲义》是一本全面而深入的教程,适合初学者和有经验的开发者阅读,它将带你走进Android OPhone的世界,让你在开发过程中游刃有余。通过系统学习和实践,你将能够充分利用这个平台...
本PPT将带你走进Android基础应用的世界,了解其核心概念、开发环境搭建以及基本组件的使用。 1. **Android系统架构** - Android系统的层次结构包括Linux内核、硬件抽象层(HAL)、运行时库、应用程序框架和应用...
Android是谷歌公司推出的一款开源移动操作系统,主要...这份“Android学习笔记”将带你逐步走进Android开发的世界,从基础概念到高级特性,全方位提升你的技能。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。
本章“初识Android程序”将引导你走进Android开发的世界,帮助你建立坚实的基础。 ### 1. Android简介 Android是由Google领导的开放手机联盟开发的开源操作系统,它基于Linux内核,主要应用于智能手机、平板电脑...
本篇文章将深入探讨Android环境下使用NDK进行JNI开发,并通过"hello-jni"项目作为实例,带领读者一步步走进Android NDK的世界。 一、Android NDK概述 Android Native Development Kit(NDK)是一组工具,它允许...
总之,“013集-创建第一个Android 5.0应用程序”教程旨在引导初学者逐步走进Android开发的世界,通过实际操作理解基本的开发流程,熟悉Android Studio的使用,掌握Java编程和XML布局设计,并了解Android 5.0的主要...
本教程将带你走进Android画图的世界,让你从新手快速成长为能绘制出丰富多彩图形的开发者。在2016年的这个系列教程中,我们将重点探讨如何在Android中利用Canvas和Drawable进行图形绘制。 首先,你需要了解`Canvas`...
本文将详细解析这个项目,带你走进Android开发的世界。 一、项目背景与目标 Sunflower,顾名思义,是以植物养护为主题的Android应用。该项目由Google官方提供,是Android Jetpack的示范应用,涵盖了多个核心组件和...
总的来说,"Android_课件及源码"的压缩包是一个全面学习Android开发的好材料,它将带你走进Android的世界,理解其核心概念,掌握开发技巧,并通过实际代码加深理解。无论是对于想要踏入Android开发领域的新人,还是...