本文摘自人民邮电出版社异步社区《爱上Android》
京东地址:https://item.jd.com/12144527.html
试读地址:http://www.epubit.com.cn/book/details/4885
第2章 选择您的开发工具
工欲善其事,必先利其器。选择一个好的IDE可以大幅提高开发效率,节省下的时间可以去多学习新知识,多陪陪家人。接下来就手把手领着大家把开发环境搭建起来。
2.1 准备软件,认识Android Studio
之前开发Android一般用Eclipse+ADT插件,但是Google已经停止维护ADT了,本书郑重地建议大家,不要用Eclipse开发了,改用Android Studio开发。
当然Android程序大部分是使用Java语言开发的,所以安装Java环境是必须的,需要大家下载JDK,目前最新版本是JDK 8。需要注意的是,大家必须准备JDK 7以上的版本(如果使用的是Android Studio 2.1以上的版本,必须准备JDK 8以上),否则达不到Android Studio的安装要求,建议准备JDK 8(可以使用lambda语法)。如果是64位操作系统,建议安装64位的JDK;如果是32位操作系统,只能安装32位的JDK。
在Windows操作系统中右键单击我的电脑→属性就可以查看当前系统的位数。
JDK下载方式非常简单,直接用百度搜索JDK的下载网站,下载下来直接打开,一直点击下一步按钮就可以安装成功。
上面都不是重点,大家如果有Java基础,这些应该都会了;如果没有Java基础,最好先了解一下Java,接下来就进入重点,了解一下Android Studio。
2.1.1 什么是Android Studio
Android Studio是一个基于IntelliJIDEA的新的Android开发环境。与Eclipse ADT插件相似,Android Studio提供了集成的Android开发工具,用于开发和调试。
Android Studio于2013年5月16日在谷歌I/O大会正式对外发布,Google希望Android Studio能让应用开发更简单、高效。
Windows、Mac OS X、Linux三大平台全部支持。
2015年年底,Google开发者大会期间推出了Android Studio 2.0,让Android Studio编译和运行速度提高了50倍。
Android Studio 2.2完美兼容了NDK开发,可以完全摆脱ADT。
2.1.2 为什么使用Android Studio
原因一:Android Studio是谷歌开发的,专门为Android开发量身定做的编辑器。
原因二:Android Studio最核心的功能就是智能代码编辑器,它能帮助我们非常高效地完成代码补全、重构和代码分析。做过开发的读者都知道,没有代码提示,估计 90%以上的人就不会写代码了。
原因三:Android Studio的速度更快、更加智能,集成了版本控制系统、代码分析工具、UI编辑器、Gradle构建工具、Android Monitor、模拟器、各种模板和示例等,还有各种强大的插件支持。
原因四:谷歌宣布将在2015年年底前停止对Eclipse Android开发工具的一切支持,包括ADT插件、Ant构建系统、DDMS、Traceview与其他性能和监控工具。
有了上面这四大原因,你还有什么理由不用Android Studio?
2.2 安装Android Studio
2.2.1 安装配置要求
现在的电脑配置越来越高,图 2-1 所列的配置要求基本上很容易就能达到了。如果你的电脑配置不满足这些要求,就需换台电脑了。
▲图2-1 需要满足的基本系统要求
2.2.2 下载地址
官方下载地址:
官网:http://developer.android.com/sdk/index.html。
中文官网:https://developer.android.google.cn/studio/index.html。
官网打开样式如图2-2所示,这里提供了三大平台的安装包,选择对应的平台进行下载。
▲图2-2 Android Studio
采用官方链接,可以直接下载全部安装包,里面主要包含Android Studio安装包和Android开发SDK(开发工具包)。当然也可以分开下载。
2.2.3 安装JDK
首先需要下载JDK,安装完成JDK,配置JDK环境变量。下面以Windows平台为例进行演示。
右键单击我的电脑→属性→环境变量,配置JAVA_HOME环境变量。
参考如图2-3和图2-4所示的内容。
▲图2-3 配置环境变量
2.2.4 安装Android Studio
安装过程中的简单操作在这就不进行截图讲解了,因为只需要点击Next按钮。
本文使用“包含SDK”的安装文件进行讲解,其中包含了“不包含SDK(软件开发工具包)的安装文件”的安装步骤。如果使用“不包含SDK的安装文件”进行安装,安装步骤只会比这些步骤少。
如果使用压缩包安装,直接解压缩就可以用了。本节内容可直接跳过。
步骤1
如图2-5所示,第一个选项:Android Studio程序,必选。第二个选项:Android SDK(安卓开发工具包),如果电脑中已经存在Android SDK,可以不勾选。第三个选项和第四个选项都和虚拟机有关系,如果不使用虚拟机或者SDK中的虚拟机,可以不勾选。
▲图2-4 配置环境变量
▲图2-5 步骤1
步骤 2
如图2-6所示,选择Android Studio和Android SDK的安装目录。
▲图2-6 步骤2
步骤 3
如果在步骤1中勾选了HAXM(也就是第四个选项,HAXM为虚拟机提供加速服务),就会出现这一步。
需要根据自己机器的内容大小来设置这个值,一般建议默认即可,如图2-7所示。
▲图2-7 步骤3
步骤 4
如图2-8所示,Android Studio的运行需要VC++环境,Android Studio在安装的过程中会自动安装。这也是为什么建议使用安装包的原因。
如果电脑中使用杀毒类的软件,就会禁止安装VC++环境,请注意。
▲图2-8 步骤4
步骤 5
一般不出意外,就会看到如图2-9所示的界面。说明Android Studio已经安装成功了。
▲图2-9 步骤5
接下来是运行Android Studio。
前提准备工作:安装JDK并配置JDK环境变量。
请使用传统的JAVA_HOME环境变量名称。很多人会被提醒JVM或者JDK查找失败,几乎都是因为JDK版本或者没有使用JAVA_HOME这个环境变量名称的原因。
步骤 6
每一次安装都会显示如图2-10所示的界面,用以选择导入Android Studio的配置文件。
- 第一个选项:使用以前版本的配置文件夹。
- 第二个选项:导入某一个目录下的配置文件夹。
- 第三个选项:不导入配置文件夹。
▲图2-10 步骤6
如果以前使用过Android Studio,可以选择到以前的版本。如果是第一次使用,可以选择第三项。
步骤 7
这是在检查Android SDK。安装时有时会在这里等上很长时间,很大的原因就是:网络连接有问题。可以通过配置hosts的方式来解决。如果检查需要更新,则会允许安装,如图2-11所示。
▲图2-11 步骤7
如果想跳过这一步,可以进行如下操作。
在 Android Studio 安装目录下的 bin 目录下,找到 idea.properties 文件,在文件最后追加disable.android.first.run=true。
步骤 8
如果看到如图2-12所示的界面,就说明需要更新Android SDK。建议进行更新。
步骤 9
如图2-13所示,选择安装更新Android SDK。第一个选项表示全选,第二个表示自定义。
▲图2-12 步骤8
▲图2-13 步骤9
步骤 10
如果步骤9中选择第一个选项,就会显示如图2-14所示的界面。选择Accept,点击Finish进行安装即可。
▲图2-14 步骤10
步骤 11
如果步骤9中选择第二个选项,就会显示如图2-15所示的界面。需要选择一个安装目录,需要注意的是:这个目录中不能包含空格以及汉字。不建议使用默认的%APPDATA%目录。点击Next后可以看到类似步骤10的页面,选择Accept,点击Finish进行安装。
▲图2-15 步骤11
步骤 12
当更新完Android SDK,就会看到如图2-16所示的界面。直到这个界面才说明,可以使用Android Studio了。
▲图2-16 步骤12
- 选项1:创建一个Android Studio项目。
- 选项2:打开一个Android Studio项目。
- 选项3:导入官方样例,会从网络上下载代码。此功能在以前的测试版本中是没有的,建议多看一看官方给的范例。
- 选项4:从版本控制系统中导入代码。支持CVS、SVN、Git、Mercurial,甚至GitHub。
- 选项5:导入非Android Studio项目。比如Eclipse Android项目、IDEA Android项目。如果Eclipse项目使用官方建议导出(即使用Generate Gradle build files的方式导出),建议使用选项2导入。
- 选项6:设置。
- 选项7:帮助文档。
如果一些选项不能点击,说明JDK或者Android SDK目录指向有问题,请看下面的设置JDK或者Android SDK目录。
2.2.5 设置JDK和Android SDK目录
有时运行Android Studio会提醒JDK或者Android SDK不存在,需要重新设置。此时就需要到全局的Project Structure页面下进行设置。进入全局的Project Structure页面方法如下。
方法 1
如图2-16所示,选择Configure→ProjectDefaults→Project Structure。
方法 2
如图 2-17 所示,进入 Android Studio 开发界面,选择 File→OtherSettings→Default Project Structure。
▲图2-17 Android Studio开发界面
方法1和方法2都会进入Project Structure界面,如图2-18所示,在此页面下设置JDK或者Android SDK目录即可。NDK暂时不需要。
▲图2-18 设置SDK和JDK
建议大家把SDK目录里的...sdkplatform-tools这个路径加入到PATH环境变量中,如图2-19所示,方便在命令提示符中使用ADB指令。
▲图2-19 配置环境变量,图中为Windows 10系统
2.3 项目的创建
安装好了开发环境,终于可以创建Android项目了。这可是你成为高手的第一步。接下来介绍创建项目的步骤和出现错误时的解决方法。
前期部分章节赠送教学视频。视频主要为了新手更方便熟悉基本操作。
2.3节、2.4节、2.5节、2.6节对应的视频地址为:http://v.youku.com/v_show/id_XMTM2NTcz MzA0MA==.html(建议改成超清模式观看)。
2.3.1 创建项目的步骤
步骤 1 开始创建工程
如图2-20所示,点击Start a new Android Studio project就可以创建第一个项目了。
▲图2-20 步骤一,创建Android项目
步骤 2 设置基本信息
如图 2-21 所示,这一步主要设置项目中最基本的信息,包括项目的名字、项目的唯一标示包名和项目存放的地址。需要注意的是,存放工程的目录不要有中文或者空格。添加C++支持暂时忽略。
▲图2-21 创建工程
点击Next进入选择设备界面。
步骤 3 选择设备
如图2-22所示,Android系统覆盖面太广了,既可以开发和手机平板电脑,也可以开发手表、电视,甚至汽车眼镜,以后种类还会越来越多。学习阶段都是以手机为主,我们选择手机就可以了。
▲图2-22 选择设备
关于最低兼容的版本,我们选择不同版本的SDK,设备覆盖率会有相应的变化,SDK版本越低,设备覆盖率就越高。如果想支持更多的设备,就不得不选择低版本的SDK。
点击Next进入选择Activity模板界面。
步骤 4 选择 Activity 模板
Activity直接翻译过来是活动的意思。在Android开发中,Activity是用来显示界面的,是传说中Android四大组件之一(四大组件还包括广播接受者、内容提供者、服务)。
Android Studio为我们提供了常用的Activity模板,可以选择更加快捷的创建。其实这些不同的模板大同小异,里面自动生成了不同的模板代码。在学习阶段,建议大家选择 Empty Activity,这是一个空的界面,我们可以通过自己的双手创建出来不同的界面,如图2-23所示。
▲图2-23 选择Activity模板
点击Next进入设置Activity信息的界面
步骤 5 设置 Activity 信息
如图2-24所示,这一步设置Activity和布局的名字。一般Activity的名字都是以Activity为
▲图2-24 定制Activity
后缀结束,表示这个类是Activity的子类,也就是姓Activity(老外习惯姓在后面)。布局文件并不是Java中的类,它是XML文件,其作用就是为了辅助我们开发界面。
主流的Android开发就是采用Java+XML进行的。
Backwords Compatibility(AppCompat) 选项一般勾选,勾选创建的 Activity 默认继承AppCompatActivity,为了是兼容Android 5.0以下的低版本Android系统。可以让低版本使用新版本的一些特性。
点击Finish就完成创建项目了。当然还需要等待一会,如图2-25所示。
▲图2-25 项目生成中
2.3.2 解决错误(没有错误最好)
第一次创建项目的时候可能会发生些错误。错误的原因最多的就是SDK版本太高或者太低。
列举几个作者碰到的错误。
错误 1
如图2-26所示,这个错误原因是Gradle插件(Android是通过Gradle打包编译的)太旧了。解决办法有两种。
▲图2-26 错误1
(1)旧的不去,新的不来。升级Gradle插件,旧的就不要了。这个需要下载新的,然后进行配置。
(2)直接用旧的,但需要修改build.gradle文件。这个比较简单,适合比较专一的人。具体修改方法如下。
如图2-27所示,先找到工程下的build.gradle文件,找到里面的配置,把里面的配置改低点,改成1.2.3或者1.5.0,虽然有些新特性可能用不了,但是足够我们用的了。
▲图2-27 修改1
备注:最新版本已经不是2.0.0-alpha1了,解决方式是通用的。
错误 2
如图2-28所示,这个错误指的是工程无法解析对应的函数库。碰到这种情况不要害怕,Android Studio提供了解决方案。点击Install Repository and sync project,然后安装对应的函数库即可。
▲图2-28 错误2
备注:图片只是为了演示错误,新创建工程默认不会加载recycleview-v7这个库,目前新创建工程会加载。
图中'com.android.support:appcompat-v7:XXXX'(这个位置看不懂没关系,后面会讲到)。
读者在创建工程时碰到的问题可以反馈给我。我尽量帮你解决,同时我也会把问题的解决方式同步到电子书里。
2.4 Android Studio界面预览
创建完了工程,接下来预览开发环境的界面,如图2-29所示。
▲图2-29 界面预览
Gradle同步按钮为,当我们修改工程中后缀名为Gradle的文件时,需要点击此按钮才能生效。
Gradle同步按钮右侧的是工程配置按钮,对工程进行配置需要点击它。
图中视图切换按钮的作用是可以根据个人喜好切换到不同的视图。常用的视图为Project和Android,如图2-30所示。
▲图2-30 视图切换按钮
2.5 常用设置
点击菜单File→Setting进入设置界面,可以根据自己的偏好进行一些设置。如果喜欢系统默认的设置,此节可以跳过。
备注:Mac版本的Android Studio看不到此按钮,可通过点击顶部菜单Android Studio→Preferences调出来,下面大家自行转换。
2.5.1 设置主题
默认的Android Studio为灰白色界面,可以选择使用炫酷的黑色界面,如图2-31所示。
▲图2-31 设置主题
选择Settings→Appearance→Theme进入界面,勾选Darcula主题即可。
2.5.2 设置字体和格式
1.设置系统字体
如图2-32所示,如果Android Studio界面中的中文显示有问题,或者选择中文目录显示有问题,或者想修改菜单栏的字体,就可以这么设置:
Settings→Appearance,勾选Override default fonts by (not recommended),选择一款支持中文的字体即可。本书使用的是微软雅黑,效果不错。
▲图2-32 设置字体
2.设置编程字体
如图2-33所示,此部分会修改编辑器的字体,包含所有的文件显示的字体。
▲图2-33 设置编程字体
选择Settings→Editor→Colors & Fonts→Font。默认系统显示的Scheme为Defualt,此处是不能编辑的,需要点击右侧的Save As...,保存一份自己的设置,并在当中设置。之后,在Editor Font中即可设置字体。
Show only monospaced fonts表示只显示等宽字体。一般来说,等宽字体在编程中使用较多,且效果较好。
3.设置字体颜色
在Settings→Editor→Colors & Fonts中还可以设置字体的颜色,根据要设置的对象选择设置,也可以从网络上下载字体颜色设置包,导入到系统中。
4.设置代码格式
如果想设置代码格式化时显示的样式,就可以这么设置:
Settings→Code Style。同样的,Scheme中默认的配置无法修改,需要创建一份自己的配置。
2.5.3 设置文件编码
无论是个人开发,还是项目组团队开发,都需要统一文件编码。出于字符兼容的问题,建议使用UTF-8。大部分Windows系统默认的字符编码为GBK。
选择Settings→File Encodings。建议将IDE Encoding、Project Encoding、Properties Fiels都设置成统一的编码,如图2-34所示。
▲图2-34 设置文件编码格式
2.5.4 设置快捷键
Android Studio的快捷键和Eclipse(学习过Java的应该都接触过)的不相同,但是通过设置就可以在Android Studio中使用Eclipse的快捷键。
选择Settings→Keymap。可以从Keymap中选择对应IDE的快捷键,如图2-35所示。
▲图2-35 快捷键
无论是否选择Keymap映射,都需要修改一个快捷键,就是代码提示的快捷键。Android Studio中代码提示的快捷键是Ctrl+Space,这个按键和切换输入法冲突。
选择Main menu→Code→Completion→Basic,更改为想替换的快捷键组合,推荐为Alt+/,如图2-36所示。
▲图2-36 修改快捷键
2.5.5 其他设置
如图2-37所示,为了方便大家开发,推荐大家设置编辑区域和显示行号。
▲图2-37 其他设置
1.设置Android Studio编辑区域
代码在编辑区域中部会有一条竖线。这条线是用以提醒程序员,一行的代码长度最好不要超过这条线。如果不想显示这条线,可以这么设置:
Settings→Editor→General→Appearance,取消勾选Show right margin (configured in Code Style options)。
2.显示行号
选择Settings→Editor→General→Appearance,勾选Show line numbers。
2.6 常用快捷键
下面以Windows/Linux电脑为例讲解常用快捷键。Mac电脑的快捷键大部分类似,只需要把Ctrl替换成Cmd,Alt替换成Option。
默认快捷键如下。
Ctrl + D:复制光标所在行代码到下一行。
Ctrl + Y:删除光标所在位置那行代码(Mac电脑为Cmd+Delelte)。
Alt+Enter:导入包,快速修复。
Ctrl+/:当行注释,反注释再按一次即可。
Ctrl+Shift+/:模块注释,反注释再按一次即可。
Alt+Insert:可以生成构造器/Getter/Setter等。
Ctrl+Alt+V:生成方法返回值。
Ctrl+E:查看最近打开过的文件。
Eclipse映射后区别不大。
Ctrl+Shift+↓:复制光标所在行代码到下一行。
Ctrl+D:删除光标所在位置那行代码。
Alt+Enter:导入包,快速修复。
Ctrl+/:当行注释,反注释再按一次即可。
Ctrl+Shift+/:模块注释,反注释再按一次即可。
Alt+Insert:可以生成构造器/Getter/Setter等。
Ctrl+Alt+V:生成方法返回值。
Ctrl+E:查看最近打开过的文件。
2.7 Android工程目录
熟悉了Android Studio开发环境,接下来介绍大家比较关心的问题。进行Android开发时,当然需要熟悉Android工程目录结构,主要需要了解Android目录结构和Gradle文件的内容结构。
本节对应的视频地址为:http://v.youku.com/v_show/id_XMTM2NTczOTQwMA==.html(建议改成超清模式观看)。
2.7.1 工程目录介绍
如图2-38所示,首先需要切换成Project视图,然后整个项目结构就在我们眼前了。
我们重点介绍使用的Android项目结构如图2-39所示。
▲图2-38 项目结构
▲图2-39 项目结构,框中的经常使用
注意,res目录下的所有文件不允许出现大写字母,也不允许使用Java关键字命名。
2.7.2 Gradle使用详解
Android Studio通过Gradle脚本进行打包运行程序。
Gradle 所有文件结构
Android工程目录下有一个build.gradle,运行的module里也有一个build.gradle。
settings.gradle
settings.gradle表示当前运行的程序是app,如果还需要在工程中添加其他运行的程序,就需要在settings.gradle中进行配置。
build.gradle
build.gradle中设置了Gradle的版本、依赖的仓库。
2.7.3 app/build.gradle
app/build.gradle文件在开发过程中可能修改的次数比较多。下面我们重点介绍。
apply plugin: 'com.android.application'//应用Android应用插件
android {
compileSdkVersion 25 //编译SDK(Software Development Kit)的版本
buildToolsVersion "25.0.2" //构建工具的版本
defaultConfig {
applicationId "com.baidu.myapplication" //应用的唯一标示
minSdkVersion 15 //最低兼容的版本
targetSdkVersion 25 //目标版本兼容的版本
versionCode 1 //版本号,数字版本号
versionName "1.0" //字符串版本号
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes { //构建类型
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies { // 指明项目中依赖的第三方函数库
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:25.1.0'
}
下面分别进行解释。
1.Android脚本
这个不能删。它的作用就是让其余的脚本代码都有用。
apply plugin: 'com.android.application'//应用Android应用插件
2.Android配置
表明编译的版本和编译工具的版本。必须保证SDK(开发工具包,马上就会介绍到)有这个版本。
compileSdkVersion 25 //编译SDK(Software Development Kit)的版本
buildToolsVersion "25.0.2" //构建工具的版本
3.运行程序的配置
其包括applicationId(程序的包名,也就是程序的唯一标示)、兼容的最低版本(minSdkVersion)和目标版本(targetSdkVersion)。这些都在创建项目的时候指定了,可以在这个位置修改。还有当前程序的版本号(versionCode)和版本名字(versionName),其中版本号是整数,随着项目的升级递增,版本名字是字符串,并没有太严格的限制。
defaultConfig {
applicationId "com.baidu.myapplication" //应用的唯一标示
minSdkVersion 15 //最低兼容的版本
targetSdkVersion 25 //目标版本兼容的版本
versionCode 1 //版本号,数字版本号
versionName "1.0" //字符串版本号
}
4.buildTypes
程序在发布的时候可以混淆代码,可以保护代码,不会被其他人轻易破解。
buildTypes { //构建类型
release {
minifyEnabled false //是否混淆代码 false不混淆
// 混淆代码配置文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
其实,buildType主要的目的是可以根据不同的版本设置不同的参数。进行不同的配置。开发过程分为调试阶段和正式发布阶段,可以通过buildType在不同的阶段设置不同的参数,如下面的代码:
debug {
buildConfigField "String", "API_URL", ""http://test.baidu.com""
buildConfigField "boolean", "LOG_CALLS", "true"
resValue "string", "str_name", "Example DEBUG"
}
release {
buildConfigField "String", "API_URL", ""http://www.baidu.com""
buildConfigField "boolean", "LOG_HTTP_CALLS", "false"
resValue "string", "str_name", "Example"
...
}
调试阶段就是debug,正式发布就是release,里面分别设置了不同的3个参数。这3个参数可以通过代码调用:
String url=BuildConfig.API_URL;
boolean log_calls=BuildConfig.LOG_CALLS;
int stringid=R.string.str_name;
5.dependencies
这个用来指明项目中依赖的函数库,目前项目创建默认需要依赖appcompat-v7(版本不一定和书中一致),里面提供了很多API,既可以使用高版本的特效,也能兼容低版本,何乐而不为呢?
dependencies { // 指明项目中依赖的第三方函数库
// 依赖程序中jar包
compile fileTree(dir: 'libs', include: ['*.jar'])
// 单元测试相关的
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:25.1.0'
}
2.8 SDK目录介绍
本节对应的视频地址为:http://v.youku.com/v_show/id_XMTM2NTU3MzcwNA==.html(建议改成超清模式观看)。
1.什么是 SDK
首先需要明白一个概念,SDK全称是Software Development Kit,翻译过来就是软件开发工具包。它是开发程序必不可少的。在安装Android Studio后必须要安装SDK,否则不能创建项目。如果用官方默认的安装包,默认是安装SDK的。
2 . SDK 目录(见图 2 - 40 )
注:Mac系统默认在~/Libary/Android目录下。
▲图2-40 SDK目录
(1)add-ons中保存着附加库,比如GoogleMaps。
(2)build-tools编译。
(3)docs中是Android SDKAPI参考文档,所有的API都可以在这里查到。
(4)extras:额外的jar包之类的。
(5)platforms是每个平台的SDK真正的文件,里面会根据APILevel划分SDK版本。
(6)platform-tools保存着一些通用工具,比如adb、aapt、aidl、dx等文件。这里和platforms目录中的tools文件夹有些重复,主要是从Android 2.3开始这些工具被划分为通用了。
(7)samples是Android SDK自带的默认示例工程,强烈推荐初学者学习里面的apidemos。
(8)source是Android系统源码。
(9)tools作为SDK根目录下的tools文件夹,包含了重要的工具,比如ddms用于启动Android调试工具,还有logcat、屏幕截图和文件管理器;draw9patch是绘制Android平台的可缩放png图片的工具;sqlite3可以在PC上操作SQLite数据库;monkeyrunner是一个不错的压力测试应用,模拟用户随机按键;mksdcard是模拟器SD映像的创建工具;emulator是Android SDK模拟器主程序,不过从Android 1.5开始,需要输入合适的参数才能启动模拟器;traceview作为Android平台上重要的调试工具。
(10)system-images:镜像。
(11)AVD Manager:模拟器管理者。
(12)SDK Manager:SDK管理者,可以用它下载升级SDK。
2.9 调试程序
了解了这么多,其实大家最关心的是如何把程序部署到手机中。这样大家就可以拿自己写的手机程序跟朋友炫耀了。
怎么部署到手机呢
点击就可以把程序部署到手机中。
前提是,需要有个Android手机,当然没有手机也没有关系,Google工程师提供了模拟器,可以模拟Android手机环境。
2.9.1 创建模拟器
参照图2-41和图2-42,首先点击模拟器按钮,然后点击创建模拟器,选择对应的设备。
▲图2-41 步骤1创建模拟器
▲图2-42 步骤2创建模拟器
使用默认的设备,点击Next,选择一个系统映像,如图2-43所示。
▲图2-43 步骤3选择镜像
点击Next,进入核对配置界面,如图2-44所示。
▲图2-44 步骤4确认配置
最后点击Finish就创建成功了,如图2-45所示。
▲图2-45 创建成功
点击启动按钮就可以启动模拟器。
目前新版Android模拟器速度非常快,但是比较耗费内存。
2.9.2 连接真实手机
当然,也可以连接自己的真实手机。
如图2-46所示,进入手机设置中,进入开发者选项,勾选USB调试。然后用数据线连接上电脑,就可以调试了。当然,第一次部署需要用手机授权允许该电脑调试。
▲图2-46 打开USB调试
备注:Android 4.4以上的手机系统默认是不显示开发者选项这个按钮的,默认需要连续点关于手机页中的版本号。
2.9.3 Genymotion模拟器
如果大家不想用真实的手机,也不想用Android原生的模拟器,推荐大家用Genymotion模拟器(见图2-47),这个模拟器的速度很惊人。不过,Genymotion安装起来稍微麻烦,需要先安装Oracle VM VirtualBox,然后安装Genymotion,最后注册Genymotion账号,再下载模拟器。注册和下载都需要访问境外服务器,非常不稳定。本书提前给大家整理好了Windows版的Oracle VM VirtualBox和Genymotion的安装包,也给大家提供了部分虚拟机,大家可以直接双击虚拟机导入Oracle VM VirtualBox中。
▲图2-47 Genymotion模拟器
链接:http://pan.baidu.com/s/1i4fXwCt,密码:j3gt。
备注:Win10操作系统中,Oracle VM VirtualBox和Genymotion需要用Win8/Win7兼容性,以管理员身份运行。
2.10 程序启动分析
了解了如何调式程序,接下来分析项目是如何运行起来的。首先来看app/src/main/AndroidManifest.xml
这个文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.baidu.myapplication" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
AndroidManifest.xml文件俗称清单文件,可以简单理解为是当前应用的配置文件。该文件可以配置应用权限和四大组件(包括Activity、广播接受者、服务、内容提供者),Activity必须在清单文件中注册,否则不能直接显示。
其中,intent-filter里的两行代码非常重要,<action android:name="android.intent.action.MAIN" />和<category android:name="android.intent.category.LAUNCHER" />表示MainActivity是这个项目的主Activity,在手机上点击应用图标,首先启动的就是MainActivity。
接下来再看MainActivity:
package com.baidu.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
// 首先启动onCreate方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置界面显示的布局
setContentView(R.layout.activity_main);
}
}
首先可以看到,MainActivity继承自AppCompatActivity,这是一个特殊的Activity,也具备Activity的特性。
当程序运行的时候,首先会根据上面清单文件的配置运行MainActivity,然后就会调用MainActivity的onCreate方法,这个方法率先调用。而MainActivity在这个方法中加载了布局setContentView(R.layout.activity_main);
这时候可能有人会问:R.layou.activity_main是什么?R又是在哪来的?
其中,R代表res目录,layout就是res目录下的布局目录。R是自动生成的类,用来连接res目录下的资源和Java代码,这个位置相当于引入了activity_main这个布局文件。如果res目录下有错误,R就不会生成了,代码中就会有错误。
之前给大家介绍过,凡是在应用中看得到的东西,都是放在Activity中,而这个布局就是当前界面程序显示的样子:
再来看布局文件src/main/res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.baidu.myapplication.MainActivity">
<!--TextView用来显示文本的控件-->
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
/>
</RelativeLayout>
如图2-48所示,点击Design按钮可以查看预览界面,或者直接运行到手机也可以看到一样的界面。其中,TextView 就是最简单的一个控件,用来显示文本,上面代码中的 android:text 属性就是控制显示的内容。
▲图2-48 预览界面
简单总结下:项目启动首先需要读取清单文件AndroidManifest.xml,然后找到主Activity,调用主Activity的onCreate方法,加载布局显示到手机中,大功告成。
2.11 日志和注释
开发任何程序时,有两点是万万不能少的:一是注释,二是日志的输出。学习Android开发之前首先需要掌握这两点。下面来介绍注释的使用和日志的输出。
本节对应的视频地址为:http://v.youku.com/v_show/id_XMTM2NTczOTk5Mg==.html(建议改成超清模式观看)
2.11.1 注释
大部分Android程序都采用Java代码,代码中的注释和Java代码是一样的。XML文件注释采用<!---->进行注释,如下:
<!--XML文件注释-->
// java 行注释
/*
注释
*/
/**
文档注释
*/
好的注释会让你维护程序事半功倍。大家在学习的阶段一定养成先写注释再写代码的习惯。
2.11.2 日志
注释写法相对比较简单,重点看一下在Android中如何输日志。首先需要明白日志是给程序员自己看的,使用软件的人一般是看不到的。
如图2-49所示,可以借助Android Monitor工具查看日志,默认快捷键:Alt+6。
▲图2-49 日志
从上面的图片可以看到,日志具有不同的日志级别,包括:Verbose、Debug、Info、Warn、Error、Assert。以上级别依次升高。每条日志都有进程信息,默认一个应用程序占一个进程。每条日志都有标签。
磨刀不误砍柴工,学习开发前首先需要了解如何输出日志。
Android中的日志工具类是Log(android.util.Log),这个类中提供了如下方法来供我们打印日志。
(1)Log.v()对应级别Verbose。
(2)Log.d()对应级别Debug。
(3)Log.i()对应级别Info。
(4)Log.w()对应级别Warn。
(5)Log.e()对应级别Error。
(6)Log.wtf()对应级别Assert。
当然System.out.println方法也可以输出日志,这个方法在Java中使用的比较多,在Android中并无明显优势,因为它不能控制日志的标签,查询起来比较麻烦。
直接在onCreate方法中演示这几个方法,Log.XXX()中第一个参数就是日志的标签,推荐大家指定当前的类名,方便查找:
Log.v("MainActivity","v");
Log.d("MainActivity","d");
Log.i("MainActivity","info");
Log.w("MainActivity","w");
Log.e("MainActivity","e");
Log.wtf("MainActivity","wtf");
System.out.print("out");
写完代码,运行查看结果,如图2-50所示。
▲图2-50 输出结果
大家发现Syste.out.println的标签是System.out,级别是INFO级别。
注意,Android Studio每个级别默认的不是这个颜色,默认的颜色太难看,不方便区别级别,我们需要自己改一下。
2.11.3 设置Android Studio日志显示颜色
如图2-51和图2-52所示,选择File→Settings或按Ctrl + Alt +S组合键进入设置界面,找到Editor→Colors &Fonts→Android Logcat或在上面的搜索框中输入Logcat点中Verbose、Info、Debug等选项,然后在后面将Use Inberited attributes去掉勾选,再将Foreground前的复选框选上,就可以双击后面的框去选择颜色了,选择Apply→OK。
▲图2-51 修改日志颜色
对应的颜色值:
- VERBOSE BBBBBB
- DEBUG 0070BB
- INFO 48BB31
- WARN BBBB23
- ERROR FF0006
- ASSERT 8F0005
在实际开发的过程中,我们会经常看到程序输出的日志,其中很多并不是我们主动输出的。这些日志就像我们去医院化验的结果单子一样。如果发现警告或者以上级别的日志,就需要留意了,你的程序有潜在风险或者严重问题,需要根据日志内容进行修复。
▲图2-52 修改日志颜色
2.11.4 实际开发中控制日志
输出日志很简单,怎么控制日志的输出就值得研究下了,日志是用来调试程序的,当程序发布后日志就变得一无是处了。所以输出日志的原则就是:
程序开发阶段允许输出日志,发布后不允许打印日志。
如何去控制呢?如果在上线前手动删除所有日志,这个工作量就很大了。
方法 1 :创建 LogUtils
可以创建一个LogUtils工具类:
public class LogUtils {
public static final boolean DEBUG=true;
public static void i(String tag,String msg){
if(DEBUG) {
Log.i(tag, msg);
}
}
}
在程序中都是用Logutils的方法输出日志:
LogUtils.i("MainActivity","LogUtils");
这样就可以通过LogUtils中DEBUG变量去控制日志的输出,当程序调试时,把这个值改为true;程序发布了,就把这个值改成false。这样就可以实现我们一开始的需求。
然而,这样的话,我们还需要在发布前夕手动地去改代码,能不能在发布前不改代码呢?这时候就要借助Gradle了,Android Studio集成了Gradle,这一点非常棒。可以参考之前介绍的内容,打开app/build.gradle这个文件,做一个配置:
buildTypes {
debug{ // 开发阶段
buildConfigField "boolean", "LOG_CALLS", "true" // 定义了boolean变量 true
}
release { // 发布了
buildConfigField "boolean", "LOG_CALLS", "false"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
可以在buildType中配置一些全局变量,可以是String类型,也可以是boolean,这里用到的就是LOG_CALLS这一个boolean类型变量,注意,debug{ ...}指的是程序开发阶段,release{ }指的是程序发布阶段。我们在开发和发布阶段分别定义了对应不同值的LOG_CALLS,接下来就可以在LogUtils中使用这个全局变量了:
public class LogUtils {
public static final boolean DEBUG=BuildConfig.LOG_CALLS;
public static void i(String tag,String msg){
if(DEBUG) {
Log.i(tag, msg);
}
}
}
其中,BuildConfig.LOG_CALLS就是我们在上面定义的变量,这个变量在开发阶段是true,发布阶段自动就变成了false。我们这样就干了一个一劳永逸的事了。
方法 2 :混淆日志类
上面的方法还是比较麻烦,其实还有更简单的方法。我们可以借助代码混淆。简单地说,代码混淆就是把代码进行混淆加密,让盗取代码的人难以读懂。
首先开启代码混淆:
release {
minifyEnabled true //是否混淆代码 false不混淆
// 混淆代码配置文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
混淆的脚本默认是在工程目录下的proguard-rules.pro文件中添加的,添加如下代码:
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
}
assumenosideeffects的官方解释就是,混淆器将删除这些方法(如果在程序中使用这些方法的返回值,则不会删除。一般日志不关心返回值)。这样,程序在发布阶段将会混淆代码,混淆的过程中就把日志输出的方法给去掉了,程序就永远不会输出日志了。
2.11.5 Logger的使用
可以使用Logger这个开源框架输出日志,如图2-53所示。首先看看这个日志控制器输出的界面,其排版工整,调理清晰。
▲图2-53 使用Logger输出日志
具体怎么使用呢?大家可以通过上面的Logger连接进入github主页。当然这也是本书第一次介绍开源框架的使用。下面给新手简单介绍下。
直接访问app/build.gradle文件,额外添加logger的依赖:
dependencies { // 指明项目中依赖的第三方函数库
...
compile '<strong>com.orhanobut:logger:1.15</strong>'
}
然后单击界面上的同步按钮,如图2-54所示,Android Studio就会自动下载logger1.15这个第三方的库,非常方便。
▲图2-54 同步按钮
使用方法:
Logger输出的日志方式要多一些,可以输出JSON和XML格式。后面介绍讲网络传输的时候会对这种格式进行具体介绍。
// 默认标签
Logger.d("hello");
Logger.e("hello");
Logger.w("hello");
Logger.v("hello");
Logger.wtf("hello");
//指定标签
Logger.t("mytag").d("hello");
总结
这一章,我们把学习Andorid开发的前期准备工作都做完了,包括环境搭建、熟悉环境、创建项目的步骤、项目结构、调试程序、日志输出等。这一章相对麻烦,很多内容大部分人都不会想做第二遍了,当然也没有必要做第二遍,比如环境搭建(我写这一节的时候也很痛苦)。不过还是有一些重点需要掌握的,比如日志的输出。
本章代码下载地址:https://github.com/yll2wcf/book,项目名称:Chapter2。
如果代码导入困难,读者可参考我的博客中的文章http://www.jianshu.com/p/0e73ad2ea8b5。
欢迎关注微信公众账号——于连林,搜索关键字:likeDev。
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。