本文摘自人民邮电出版社异步社区《爱上Android》

京东地址:item.jd.com/12144527.ht…
试读地址:www.epubit.com.cn/book/detail…

第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 下载地址

官方下载地址:

官网:developer.android.com/sdk/index.h…

中文官网:developer.android.google.cn/studio/inde…

官网打开样式如图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目录里的...\sdk\platform-tools这个路径加入到PATH环境变量中,如图2-19所示,方便在命令提示符中使用ADB指令。

▲图2-19 配置环境变量,图中为Windows 10系统

2.3 项目的创建

安装好了开发环境,终于可以创建Android项目了。这可是你成为高手的第一步。接下来介绍创建项目的步骤和出现错误时的解决方法。

前期部分章节赠送教学视频。视频主要为了新手更方便熟悉基本操作。

 

2.3节、2.4节、2.5节、2.6节对应的视频地址为:v.youku.com/v_show/id_X… 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文件的内容结构。

 

本节对应的视频地址为:v.youku.com/v_show/id_X…

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", "\"test.baidu.com\""  buildConfigField "boolean", "LOG_CALLS", "true"  resValue "string", "str_name", "Example DEBUG"}release {  buildConfigField "String", "API_URL", "\"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目录介绍

 

本节对应的视频地址为:v.youku.com/v_show/id_X…

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模拟器

链接:pan.baidu.com/s/1i4fXwCt,…

备注:Win10操作系统中,Oracle VM VirtualBox和Genymotion需要用Win8/Win7兼容性,以管理员身份运行。

2.10 程序启动分析

了解了如何调式程序,接下来分析项目是如何运行起来的。首先来看app/src/main/AndroidManifest.xml
这个文件:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="schemas.android.com/apk/res/and…"  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="schemas.android.com/apk/res/and…"  xmlns:tools="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开发之前首先需要掌握这两点。下面来介绍注释的使用和日志的输出。

本节对应的视频地址为:v.youku.com/v_show/id_X…

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开发的前期准备工作都做完了,包括环境搭建、熟悉环境、创建项目的步骤、项目结构、调试程序、日志输出等。这一章相对麻烦,很多内容大部分人都不会想做第二遍了,当然也没有必要做第二遍,比如环境搭建(我写这一节的时候也很痛苦)。不过还是有一些重点需要掌握的,比如日志的输出。

本章代码下载地址:github.com/yll2wcf/boo…

如果代码导入困难,读者可参考我的博客中的文章www.jianshu.com/p/0e73ad2ea…

欢迎关注微信公众账号——于连林,搜索关键字:likeDev。

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。

爱上Android之选择您的开发工具相关推荐

  1. 重走Android路 之 Android系统架构图以及开发工具了解

    LZ-Says:热腾腾的一天那,貌似今天帝都达到了高温,热腾腾,我滴天...各位老铁注意防暑,多喝水~~~ 前言 昨天更新了一篇启程文,地址如下: 重走Android路 之 今日正式启程:https: ...

  2. 学习Android从0开始之开发工具篇-Android studio详解

    版权声明:本文为博主原创文章,未经博主允许不得转载. Android studio详解 我们古人又云:工欲善其事,必先利其器. 1.android studio的背景 Android Studio 是 ...

  3. 【Node.js】2.开发Node.js选择哪个IDE 开发工具呢

    安装完Node.js之后,就要为它选择一个有利的IDE用于开发. 相比较了多个IDE之后,定位在webstrom和sublime上. 有一个简单的比较: webstorm功能很丰富,前端开发工具的集大 ...

  4. android开发和手游开发工具,developer盘点Android开发者必备十大开发工具

    Android SDK提供了一系列可帮助开发者设计.创建.测试和发布Android应用程序的强大工具,以下是来自游戏邦编译developer推荐的10款最常用的开发工具. 1.Eclipse w/AD ...

  5. Android学习论坛网站、开发工具、镜像

    安卓开发 | 软件开发 |  https://an.rustfisher.com/ 一个可以搜索Android相关源码的网址https://cs.android.com/ Android Code S ...

  6. 解决打开Android sdk manger D:\BaiduNetdiskDownload\开发工具\android' 不是内部或外部命令,也不是可运行的程序问题

    在初次使用eclipse-ADT时,打开Android sdk manger 可能会报如下错误: 解决方法: 1.找到\sdk\tools下的Android.bat文件,用编辑文档打开 2.往下滑找到 ...

  7. android移动端调试—前端开发工具Eruda

    Eruda 通过CDN使用: <script src="//cdn.bootcss.com/eruda/1.4.2/eruda.min.js"></script& ...

  8. 选择游戏开发工具的原则

    本文首发于微信公众号: 小蚂蚁教你做游戏.欢迎关注领取更多学习做游戏的原创教程资料,每天学点儿游戏开发知识. 嗨!大家好,我是小蚂蚁. 昨天为了给我的精致1010游戏方便的增加更多关卡,我用 Unit ...

  9. 新时代程序员主流开发工具一览

    分享一些优秀的写代码工具和使用感受 大家好,我是鱼皮. 俗话说的好:工欲善其事,必先利其器.一款好的开发工具对程序员来说是至关重要的,可以降低开发成本.提高开发的效率和代码质量. 所以今天分享一些主流 ...

最新文章

  1. ImageButton的坑 ImageButton 有问题
  2. MapReduce基础开发之六Map多输入
  3. SVN中Revert changes from this revision 跟Revert to this revision
  4. 马云:首批助力欧洲防疫的物资今天到达比利时
  5. 每天一道机器学习算法面试题目
  6. 计算机毕业设计java+ssm的在线投票管理系统(源码+系统+mysql数据库+Lw文档)
  7. Win10应用商店打不开?微软官方提供修复方法
  8. 宝洁通过新的创意合作伙伴关系重新想象创意并重塑广告
  9. 电影下载的TS TC版
  10. 2015年8月25号申请入驻一点资讯自媒体平台
  11. 从虚拟机到容器,详谈各种服务虚拟化技术及其应用场景
  12. Android——下载apk文件,并在通知栏显示下载进度
  13. ssm报错:No qualifying bean of type ‘com.hr.service.LoginService‘ available
  14. 题目:以下选项中关于DOM和SAX的说法错误的是()
  15. 扑克牌自动图像识别在博彩行业的应用
  16. 利用光线追迹分析高数值孔径透镜系统
  17. 汇编语言-中括号-mov指令-cmp指令-lea指令
  18. mongodb cond 模糊查询_NoSQL注入之MongoDB
  19. Java 多线程编程 实验题
  20. 单片机按键启停c语言,ZigBee-CC2530单片机 - 按键控制跑马灯的启停

热门文章

  1. Python之路【第一篇】:Python简介和入门
  2. AFNetworking和ASIHTTPRequest的比较
  3. iframe和父窗体之间的互相监听方法
  4. C#后台导入css和设置前台关键字和描述
  5. .net中用css控制GridView样式
  6. JBoss4.2.3部署SSH2
  7. UVA11389巴士司机问题
  8. 【Android 逆向】Android 权限 ( 查看内存信息 | 查看 CPU 信息 | 查看电池信息 | 查看账户信息 | 查看 Activity 信息 | 查看 Package 信息 )
  9. 【SeeMusic】创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | 导入音频 | 导入视频 )
  10. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库头文件到 Android 工程中 | 配置 CMakeLists.txt 构建脚本 )