第一篇 入门必备 (Android学习笔记)

第一篇 入门必备

第1章 初识Android

第2章 搭建你的开发环境

第3章 创建第一个程序--HelloWorld

第4章 使用Android工具

 

Android之父

Android安迪·罗宾(Andy Rubin)开发

2005年被Google收购,并于200711月正式向外界展示了这款系统。

 

2008年9月发布Android1个版本Android1.1

几乎每隔半年就有一个新的版本发布。

Android1.5版本开始,Android用甜点作为系统版本的代号。

2009年430日,Android1.5 Cupcake(纸杯蛋糕)正式发布。

2009年95日,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虚拟机

DalvikGoogle公司自己设计用于Android平台的虚拟机,它可以简单的完成进程隔离线程管理,并且可以提高内存的使用效率。

JVM和DVM的区别:

※ 虚拟机在实现的架构选择上,有两种实现方式,基于栈结构和基于寄存器结构,而这两种方式直接关系到虚拟指令系统的设计方式,栈结构对应于精简指令系统,而基于寄存器方式则对应复杂指令系统。由于栈式结构可以很容易实现CPU中通用寄存器的软件功能,从而使得虚拟机上的应用能更好的可移植性。

 

●Android介绍和开发环境的搭建

安卓开发的两大常用工具

① 基于EclipseADT(Android Development Tools)—使用时间较长, 国内用得较多

② 基于Intellij IDIAAndroid 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

XAMPPApache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包。这个软件包原来的名字是 LAMPP,但是为了避免误解,最新的几个版本就改名为 XAMPP 了。

 

JDKJRE

JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDKSoftware Development Kit 一般指软件开发包,可以包括函数库、编译程序等。

JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。

JRE的地位就象一台PC机一样,我们写好的Win32应用程序需要操作系统帮我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。

 

JDK,JRE JVM等概念的包含关系:

 

JDK 三种类型的区别

1. Java SE(Java PlatformStandard Edition)。Java SE 以前称为 J2SE它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,为Java EE的运行提供基础。

2. Java EE(Java PlatformEnterprise Edition)。这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的。常见的有动态网站、移动应用的服务端等。

3. Java ME(Java PlatformMicro Edition)。这个版本以前称为 J2MEJava ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上的应用程序提供底层的运行环境,与PCOS类似。

 

JDK1.55.0一样吗?

1.5就是5.0,然后就是6.0

因为1.4及其之前版本的JDKJ2SE

2004年930日,J2SE1.5发布,是Java语言的发展史上的又一里程碑事件。为了表示这个版本的重要性,J2SE1.5更名为J2SE5.0.

 

 

  • 总之, 搭建Android开发环境需配备"四大法宝":

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的应用开发语言是 JavaApp的运行时是Delvik Runtime,属于JVM的改良版本,官方说Delvik VM更适用于移动设备。一般而言,由于GoogleSDK提供了强大又完善的API开发一般需求的应用,SDK足矣。然而前面已经说过,Java的运行效率引发了不少问题,因而才有了JNI技术的存在,那SDKNDK的关系是怎样的呢?见下图解说,可以说NDKSDK的一个补充

 

NDK,(Native Development kit),原生开发工具包

NDK是GoogleAndroid进行本地开发而放出的一个本地开发工具, 包括AndroidNative API、公共库以及编译工具, 注意,NDK需要Android 1.5版本以上的支持哦。

按照上图的解说,NDK处在开发流程的编译环节,对,简单来说,NDKJNI开发的一个扩展工具包!针对Android平台,其支持的设备型号繁多,单 单就设备的核心CPU而言,都有三大类:ARMx86MIPS,况且ARM又分为ARMv5ARMv7等等,为何Android又能适配如此之多的 设备?接着JNI开发流程的话,利用NDK,我们可以针对不同的手机设备,编译出对应可运行的本地共享库了,至于如何使用NDK进行编译、开 发,我们留作下次再进行探讨。

NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将.so.java应用一起打包成apk

 

JNI: Java Native Interface (本地编程接口)Java平台的一部分,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(CC++ 和汇编语言)编写的应用程序和库进行交互操作

总之,JNI是一门技术标准,是Java CodeC/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.


Jni.h文件的作用是完成C/C++代码和Java代码之间的映射。

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+RCMD)中输入:java –version, 没有显示正确结果:

因此可能还是要设置环境变量:

  1. 新建JAVA_HOME变量

C:Program FilesJavajdk1.7.0_07

 

② 修改Path变量

;%JAVA_HOME%in;%JAVA_HOME%jrein;

 

 

  1. 新建CLASSPATH变量

.;%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.jartools.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, 如上图中的

application name就是应用名称,比如贴吧叫贴吧;project name就是显示在eclipse中的项目名称,比如贴吧叫TieBapackage name就是包名,比如贴吧叫做com.baidu.tieba,这个是你的应用区别于其他应用的标识,如果这个和其他应用重名了,就无法安装,或者导致其他应用被这个应用代替。

minimum required sdk就是最低的sdk版本要求,如果手机系统的版本低于这个版本将无法安装该软件。

target sdk就是应用运行的最高系统版本,一般选择最新的系统版本,不过高于这个版本的系统好像也能运行,但是你选择这个就告诉用户你的应用目前在最低版本和最高版本下运行是最稳定的。

compile with,就是你是用哪个版本的API来开发的。

theme,这个是主题,就是说你的应用是什么风格的,比如是亮的,还是暗的,还是结合的。不过出于兼容性的考虑,一般都选择None,然后配合第三方API创建出4.0+的主题。

其实你根本就不用到知道上来问这个,这个选项旁边都有帮助按钮,你可以把鼠标移到上面,就会显示帮助信息。

 

 

下面所有的步骤都点击"下一步(next)"

 

下面是自动生成的代码:

@Override是伪代码,表示重写/覆盖 (当然不写也可以)

建议写上,有如下好处:

1、可以当注释用,方便阅读;

2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错,比如你如果没写@Override而你下面的方法名又写错了,这时你的编译器是可以通过的(它以为这个方法是你的子类中自己增加的方法)

 

Android项目结构

 

 

接着(可能要较长一段时间), 模拟器会显示结果:

 

Eclipse的工作台(workbench)图示

※ 在我下载的ADT Bundle里面的Eclipse, 下图中"任务列表视图"没有, 但可以通过菜单栏的WindowShow ViewTasks来调用

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…",如下图所示。

 

 


进入左图所示页面,单击"Next>"按钮,进入如右图所示窗口。

 

 

其中,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应用

 

打开运行成功:

 

原文地址:https://www.cnblogs.com/ArrozZhu/p/8383660.html