第一篇 入门必备
第1章 初识Android
第2章 搭建你的开发环境
第3章 创建第一个程序--HelloWorld
第4章 使用Android工具
●Android之父
Android安迪·罗宾(Andy Rubin)开发 2005年被Google收购,并于2007年11月正式向外界展示了这款系统。
2008年9月发布Android第1个版本Android1.1。 几乎每隔半年就有一个新的版本发布。 从Android1.5版本开始,Android用甜点作为系统版本的代号。 2009年4月30日,Android1.5 Cupcake(纸杯蛋糕)正式发布。 2009年9月5日,Android1.6 Donut(甜甜圈)版本发布。 ………………. |
●通信技术的发展
第一代移动通信技术( 1st - Generation),只能进行语音通话。 第二代移动通信技术( 2nd -Generation),可以收发短信、可以上网,但速度只有几十Kbps, 而且不能 在通话时使用。 第三代移动通信技术( 3rd -Generation),速率一般在几百Kbps,并且可以通话时保持在线,移动互联 网时代到来。 第四代移动通信技术( 4th -Generation),速度可达到100Mbps以上,可以在线观看高清视频,上传下 载大批量数据。 第五代移动通信技术( 5th -Generation),速度可达到1Gbps以上,几乎满足人们的所有需求。 |
●SDK Manager的作用
SDK Manager是SDK更新管理器 但中国大陆地区因为上Google受限,故我们往往需要离线下载相关包(packages)。 |
●查看Android SDK文档(Android SDK Document)
一般在sdk文件里,但adt-bundle里面的sdk文件夹里面没有,我在网上下载了一个: |
●Android的SDK版本及其对应的API等级
Android 1.0:API等级1 Android 1.1 Petit Four 花式小蛋糕:API等级2 Android 1.5 Cupcake 纸杯蛋糕:API等级3 Android 1.6 Donut 甜甜圈:API等级4 Android 2.0 Éclair 松饼:API等级5 Android 2.0.1 Éclair 松饼:API等级6 Android 2.1 Éclair 松饼:API等级7 Android 2.2 - 2.2.3 Froyo 冻酸奶:API等级8 Android 2.3 - 2.3.2 Gingerbread 姜饼:API等级9 Android 2.3.3-2.3.7 Gingerbread 姜饼:API等级10 Android 3.0 Honeycomb 蜂巢:API等级11 Android 3.1 Honeycomb 蜂巢:API等级12 Android 3.2 Honeycomb 蜂巢:API等级13 Android 4.0 - 4.0.2 Ice Cream Sandwich 冰激凌三明治:API等级14 Android 4.0.3 - 4.0.4 Ice Cream Sandwich 冰激凌三明治:API等级15 Android 4.1 Jelly Bean 糖豆:API等级16 Android 4.2 Jelly Bean 糖豆:API等级17 Android 4.3 Jelly Bean 糖豆:API等级18 Android 4.4 KitKat 奇巧巧克力棒:API等级19 |
●Dalvik虚拟机
Dalvik是Google公司自己设计用于Android平台的虚拟机,它可以简单的完成进程隔离和线程管理,并且可以提高内存的使用效率。 |
JVM和DVM的区别:
※ 虚拟机在实现的架构选择上,有两种实现方式,基于栈结构和基于寄存器结构,而这两种方式直接关系到虚拟指令系统的设计方式,栈结构对应于精简指令系统,而基于寄存器方式则对应复杂指令系统。由于栈式结构可以很容易实现CPU中通用寄存器的软件功能,从而使得虚拟机上的应用能更好的可移植性。 |
●Android介绍和开发环境的搭建
安卓开发的两大常用工具 ① 基于Eclipse的ADT(Android Development Tools)—使用时间较长, 国内用得较多 ② 基于Intellij IDIA的Android Studio—Google公司发布于2013年, Intellij IDEA简称IDEA ,和Eclipse一样, 也是一种Java语言开发的集成环境(IDE) |
●概览
●开发环境的搭建方法
一、无论采用下面两种方法, 都必须先安装JDK.
二、方法①直接下载一个ADT综合包文件(adt-bundle-windows-x86-20130219.zip),这个包文件内有必要的Android SDK的组件和一个内置了ADT(Android Development Tools )插件的新版本Eclipse 。下载完成后,解压缩到一个目录下,打开其中的Eclipse目录,找到eclipse.exe这个文件发送到桌面后,就可以直接开发程序了(可以省略下面的Eclipse安装、Google Android SDK下载和配置以及ADT安装三个步骤)。
方法② Eclipse安装 Google Android SDK下载和配置 ADT安装三个步骤 |
三、安装XAMPP
XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包。这个软件包原来的名字是 LAMPP,但是为了避免误解,最新的几个版本就改名为 XAMPP 了。 |
●JDK和JRE
JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。 JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。 JRE的地位就象一台PC机一样,我们写好的Win32应用程序需要操作系统帮我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。
※ JDK,,JRE ,JVM等概念的包含关系:
※ JDK 三种类型的区别 1. Java SE(Java Platform,Standard Edition)。Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,为Java EE的运行提供基础。 2. Java EE(Java Platform,Enterprise Edition)。这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的。常见的有动态网站、移动应用的服务端等。 3. Java ME(Java Platform,Micro Edition)。这个版本以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上的应用程序提供底层的运行环境,与PC的OS类似。
※ JDK1.5和5.0一样吗? 1.5就是5.0,然后就是6.0 因为1.4及其之前版本的JDK叫J2SE的 2004年9月30日,J2SE1.5发布,是Java语言的发展史上的又一里程碑事件。为了表示这个版本的重要性,J2SE1.5更名为J2SE5.0.
① JDK(Java Development Kit); ②Android SDK(Android Standard Development Kit); ③ADT(Android Development Tools)( Eclipse ADT 是 Eclipse 平台下用来开发 Android 应用程序的插件); ④Eclipse
※ 安装细节 我使用的JDK版本是jdk-6u25-windows-i586.exe, |
●有关NDK
※ NDK和SDK关系图
Android SDK(Android Standard Development Kit),安卓标准开发包 SDK是Google提供的Android标准开发工具包,里面包含了完整的 API文档,各Android版本的开发库,Android的虚拟机以及Android的打包工具等。众所周知,Android的应用开发语言是 Java,App的运行时是Delvik Runtime,属于JVM的改良版本,官方说Delvik VM更适用于移动设备。一般而言,由于Google的SDK提供了强大又完善的API,开发一般需求的应用,SDK足矣。然而前面已经说过,Java的运行效率引发了不少问题,因而才有了JNI技术的存在,那SDK和NDK的关系是怎样的呢?见下图解说,可以说,NDK是SDK的一个补充。
NDK,(Native Development kit),原生开发工具包 NDK是Google为Android进行本地开发而放出的一个本地开发工具, 包括Android的Native API、公共库以及编译工具, 注意,NDK需要Android 1.5版本以上的支持哦。 按照上图的解说,NDK处在开发流程的编译环节,对,简单来说,NDK是JNI开发的一个扩展工具包!针对Android平台,其支持的设备型号繁多,单 单就设备的核心CPU而言,都有三大类:ARM、x86和MIPS,况且ARM又分为ARMv5和ARMv7等等,为何Android又能适配如此之多的 设备?接着JNI开发流程的话,利用NDK,我们可以针对不同的手机设备,编译出对应可运行的本地共享库了,至于如何使用NDK进行编译、开 发,我们留作下次再进行探讨。 NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将.so和.java应用一起打包成apk。
JNI: Java Native Interface (本地编程接口)是Java平台的一部分,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作 总之,JNI是一门技术标准,是Java Code和C/C++ Code联系的桥梁! |
1. Create Java source program, say, HelloWorld.java with native methods. Require dynamic library to be loaded.
2. Compile Java source code and obtain the class file. javac HelloWorld.java
3. Generate C/C++ headers for the native methods javah -jni HelloWorld
HelloWorld.h include include/jni.h in the Java system install directory. jni.h contains C/C++ function prototypes and includes system dependent file jni_md.h.
4. Write the C/C++ source code, say, HelloWorld.c for the native method using the function prototype from the generated include file and the typedefs from jni.h
5. Compile the C/C++ with the right header files generating *.o file. gcc -I/software/java/jdk1.2.2/include -I/software/java/jdk1.2.2/include/solaris -c HelloWorld.c -o HelloWorld.o
6. Use the linker to create a dynamic library file ld -G HelloWorld.o -o libHelloWorld.so
7. Execute a Java program that loads the dynamic library java -Djava.library.path=. HelloWorld Hello World!
(Could do setenv LD_LIBRARY_PATH . on Unix instead.) The current directory "." appears to be on the default path used by Java to load libraries. |
|
※ Android系统自带的.so文件例子: libEGL.so------frameworks/native/opengl/libs/EGL/ libandroid.so——frameworks/base/native/Android libandroid_runtime.so——frameworks/base/core/jni libandroidfw.so——frameworks/base/libs/androidfw libaudioutils.so——system/media/audio_utils |
●环境变量的设置
① JDK SE的环境变量设置: 有的资料说现在安装JDK后不用设置环境变量! 但我装完后, dos命令行窗口(WIN+R→CMD)中输入:java –version, 没有显示正确结果:
因此可能还是要设置环境变量:
C:Program FilesJavajdk1.7.0_07
② 修改Path变量 ;%JAVA_HOME%in;%JAVA_HOME%jrein;
.;%JAVA_HOME%lib ools.jar;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib 注意: 前面的"."不可少,它代表了我们为自己的java类建立的工作路径,其它的是JDK自带的标准类库路径。
现在就可以了: |
●为什么要设置Java环境变量
环境变量: 就是一个目录; 当运行某些软件的时候, 相关的程序将会按照该目录寻找相关文件. 例如: 我们不用拷贝某些.dll文件到系统目录(C:Windows)中, 而path这一环境变量就是系统运行某些软件的时候, 它搜索.dll文件的一系列路径.
1. JAVA_HOME环境变量: 作用是指定jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。 2. PATH环境变量: 作用是指定 命令 的搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把 jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好 PATH变量后,就可以在任何目录下执行javac/java等工具了。 3. CLASSPATH环境变量: 作用是指定 类 的搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的。我们 需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录"."也必须加入到该变量中。 |
●ADT bundle解压后的环境变量设置
我下载的ADT bundle的版本是adt-bundle-windows-x86_64-20140321, 解压后, 添加新的环境变量
变量名:Path里面加上 D:Androidadt-bundle-windows-x86_64-20140321sdk ools;D:Androidadt-bundle-windows-x86_64-20140321sdkplatform-tools |
●建立一个Android虚拟设备(Android Virtual Device)
|
●真机调试
首先, 设置android手机为USB调试模式, 步骤:设置 —> 应用程序 —> 开发,选择USB调试; USB连接电脑,安装手机驱动,如果没有相关的驱动的话,可以安装豌豆荚进行驱动安装. (根据不同的机型, 可能会有不同的设置方法)
检测手机设备是否已经被识别
|
●新建helloworld项目
注意: Android SDK 版本8对应的是Android版本2.2, 如上图中的
下面所有的步骤都点击"下一步(next)"
下面是自动生成的代码:
@Override是伪代码,表示重写/覆盖 (当然不写也可以) 建议写上,有如下好处: 1、可以当注释用,方便阅读; 2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错,比如你如果没写@Override而你下面的方法名又写错了,这时你的编译器是可以通过的(它以为这个方法是你的子类中自己增加的方法)。
※ Android项目结构
接着(可能要较长一段时间), 模拟器会显示结果: |
●Eclipse的工作台(workbench)图示
※ 在我下载的ADT Bundle里面的Eclipse中, 下图中"任务列表视图"没有, 但可以通过菜单栏的Window→Show View→Tasks来调用
Title bar 标题栏 Menu bar 菜单栏 Toolbar 工具栏 |
●Android系统结构(中文)
|
●应掌握的XML格式
<!--两种必须掌握的xml书写形式-->
<?xml version="1.0" encoding="utf-8"?> <住址信息> <地址> <街道>苹果大街1号</街道> <城市 邮编="41000" 区号="0731">长沙</城市> <省份>湖南</省份> </地址> <地址> <街道>梨子大街1号</街道> <城市 邮编="414000" 区号="0730">岳阳</城市> <省份>湖南</省份> <地址> </住址信息>
<!--还可以写其它信息-->
<?xml version="1.0" encoding="utf-8"?> <班级 名称="225班" 人数="3人"> <班主任 姓名="陶李"/> <班长 姓名="李华"/> <学生列表> <学生 学号="一号" 姓名="张三"/> <学生 学号="二号" 姓名="李四"/> </学生列表> </班级> |
<?XML ?> indicates that the file should be parsed as XML. 元素 是开始标签(或称为"标记")、结束标签以及位于这二者之间的所有内容
XML中的元素标签都是成对出现的, 既有 开始标签 也有 结束标签 构成标签的方式有两种: 第一种方式为<标签>数据</标签> 这类标签表示该标签内还可以再嵌套其它标签 如<LinearLayout>...</LinearLayout>元素, 在此标签中还嵌套了<TextView.../>
第二种方式为<标签.../>, 此类标签表示该标签不可以再嵌套其它标签
属性是一个元素的开始标记中的 属性名="值" 一个元素可以有一个或多个属性--> -例如: <标签名 属性1="值1" 属性2="值2"> |
●XML的结点
<?xml version="1.0"?> <books> <book> <author>Carson</author> <price format="dollar">31.95</price> <pubdate>05/01/2001</pubdate> </book> <pubinfo> <publisher>MSPress</publisher> <state>WA</state> </pubinfo> </books> |
上图中每个圈圈都是XmlNode(Xml节点),Xml节点有多种类型:属性节点、注释节点、文本节点、元素节点等,也就是说XmlNode是这些类型节点的总称. |
●在Android开发中, 如何把项目打包成apk
做完一个Android项目之后,如何才能把项目发布到Internet上供别人使用呢?我们需要将自己的程序打包成Android安装包文件--APK(Android Package),其后缀名为".apk"。将APK文件直接上传到Android模拟器或Android手机中执行即可进行安装。Android系统要求具有其开发者签名的私人密钥的应用程序才能够被安装。生成数字签名以及打包项目成APK都可以采用命令行的方式,但是通过Eclipse中的向导我们会更加方便地完成整个流程,打包发布的过程非常简单。下面以前面开发的"Hello World"为例,演示如何生成APK。 右键单击项目名称,选择"Android Tools",再选择"Export Signed Application Package…",如下图所示。
其中,Location为密匙库将要存放的位置,Password是密匙库的密码。 打包程序时,系统要求使用数字证书。如果没有数字证书,我们选择"Create new keystore"新创建一个密匙库, ※ The JDK stores trusted (digital) certificates in a file called a keystore. The default keystore file is called cacerts (certified authority certificates) and it lives in the jrelibsecurity sub-directory of your Java installation. 单击"Browse…"按钮选择证书库将要保存的位置并填入信息,如左图所示。单击"Next>"按钮,如右图所示。
其中,Alias是该证书的名字;password是该证书的密码;Validity是指定证书有效年份。 如果已经拥有一个证书,那么可以选择"Use existing keystore",之后直接定位到证书库的位置并填入密码,如左图所示,接下来填入密码,单击"Next>"按钮,如右图所示。
单击"Browse…"按钮,选择文件保存的位置,如下图所示。
"Destination APK file "指定APK存储的位置。单击"Finish"按钮,打包完成。 进入"D:My Document",会看到生成的HelloWorld.apk以及sharpandroid证书库。 我们可以把HelloWorld.apk文件发布到Internet上,也可以将该文件发布到Google的Android Market中,别人就可以下载它,并安装到手机上去。 ※ 使用run as也能生成一个apk安装包(位于工作目录的bin文件夹下),但是使用run as生成的是测试的安装包,只供开发者自己测试使用。
※ 假如单人开发应用一般无所谓,但是团队开发的时候,最好使用同一个debug.keystore,这样手机间切换,可以无缝安装,而且也可是使用同样的API KEY,免得每台机子编译时都需要去申请各自不同的API Key。但是必须使用默认的别名和密码(give alias name = androiddebugkey and password = android),否则添加自定义的证书会报失败。只有别名不对时,在上述对话框的黑体Build位置会提示如下报错 |
●在DOS中用adb命令安装.apk应用
打开运行成功:
|