您的位置:首页 > 移动开发 > Android开发

android studio系列之使用指南

2016-01-08 17:59 288 查看
第一章 欢迎来到Android Studio

1.1 介绍Android Studio

Android Studio是一个基于IntelliJIDEA的新的Android开发环境。与Eclipse ADT插件相似,AndroidStudio提供了集成的Android开发工具用于开发和调试。除了你期望的IntelliJ的能力,AndroidStudio还提供:
[图片]基于Gradle的灵活的构建系统[图片]支持构建变种版本和生成多个APK文件[图片]支持通过代码模板来帮助你建立通用的app功能[图片]支持丰富的布局编辑器,可拖放主题编辑[图片]支持lint工具来捕获性能、可用性、版本兼容等问题[图片]支持代码混淆和应用签名[图片]内置的google云平台支持,因此很容易整合google云消息和app引擎

变种版本: 同一个apk,不同版本

1.2 安装Android Studio

1.2.1 Android Studio系统要求:

屏幕分辨率最小 1280 x 800最小2GB RAM, 4GB RAM 最佳Oracle® Java Development Kit (JDK) 7

tips: 安装Android Studio前需要先安装JDK7,并配置好环境变量

1.2.2 Android Studio下载:

下载地址:
http://developer.android.com/sdk/index.html
三大操作系统全部支持:

1.2.3 Mac OS 安装配置:

下载最新版本的Android Studio,目前的最新版本为: android-studio-ide-135.1740770-mac.dmg

下载完成后开始安装:

Linux/windows上安装配置Android Studio 跟Mac上差不多,在此就不多介绍了。

1.3 打开Android Studio

1.3.1 打开一个已经存在的Android Studio项目

点击 [ Open an existing Android Studio project ] 来选择一个本地的Android Studio项目

2.选择项目地址打开就好了

1.3.2 导入一个Android代码示例
1.点击 [ import an Android code sample ] 进入示例代码选择界面

2.选择一个样式代码,点击 [ 下一步 ]

3.设置应用名和项目存放位置

4.运行应用程序

5.手机上查看运行结果

1.3.3 从版本控制平台check out出一个项目

我们以Github为例来介绍如何checkout出一个项目

1.点击 [ Check out project from Version Control ],选择 [ Github ]

2.如果你已经设置过Github帐号,再次打开时会提示你输入密码,如果你想重新设置帐号,点击 [ Cancel ]

如果你想重新设置密码,点击[Reset],会进入重新设置密码的界面

3.输入Github帐号和密码,点击 [ Login ]

4.Clone出Github上的项目

Clone前可以测试下项目是否存在

5.点击 [ Clone ]后开始下载源码

1.3.4 导入一个项目(Eclips ADT/Gradle等)

另外还可以导入一个你用Eclipse开发的项目

1.4 配置Android Studio

在Android Studio欢迎界面点击 [ Configure ] 进入配置界面

1.4.1 配置界面

配置界面显示如下:

这里我们只介绍导出设置文件和项目的默认配置,其它的会在后序的章节中重点介绍。

1.4.2 导出设置文件

我们在什么场景下会导出或导入设置文件呢? 当然是你换一台电脑办公或想把你的配置提供给别人用的时候。

点击 [ Export Settings ] 进入导出设置界面

1.4.3 项目默认配置

点击 [ Project Defaults ] 进入项目默认配置界面,可以根据你的需要进行相关配置。

1.5

帮助文档

第二章 文件管理
2.1 操作界面概览

2.2 关于Android Studio

2.2.1 配置检测更新

一.检测当前版本更新

检测Android Studio的更新我们通过: Android Studio --> Check for Updates …

如果已经是最新版本,就会弹出上面的提示.

二.配置更新通道

Android Studio提供了不同的更新通道,我们可以通过配置来指定更新通道。

菜单 --> Android Studio --> Check for Updates ...

在弹出的对话框中选择Update进入更新通道配置界面,如下图:

三.4个版本的区别:

Stable Channel: 稳定版本

Beta Channel: 测试版本

Dev Channel: 开发版本

Canary Channel: 金丝雀版本

这四个版本更新频率从Canary往上逐渐递减,Canary大概1或者2周会更新一次,Beta则为相对稳定的发布版,而Stable则是正式版.

另外这四个版本的稳定性则跟其更新频率相反, 稳定性从Canary往上逐渐递增。

环境问题经常会经常困扰着我们,所以如果不是特别需要,我们当然是使用稳定版本了。

四.版本安装更新过程

更新到Dev Channel的最新版本的例子:

假如有新版本可以更新:

点击[Update and Restart]后会开始更新并重启:

更新完成后会提示你是否要导入之前版本的设置

OK后就可以啦!
2.3 文件管理功能概览

File 中主要提供了与文件相关的操作,像新建、导入、导出、打开、关闭、保存、同步、打印、收藏、编码、读写模式等。

2.4 新建和导入

2.4.1 新建一个项目

我们可以在两个地方新建项目,

一是通过启动界面:Start a new Android Studio project

二是通过打开的Android Studio-->菜单 -->File -->New -->Create New Project

然后都会出现下面的提示:

新建一个项目

点击 [ Next ],进入选择目标设备界面

2.选择目标设备

Mini SDK选择

我们选择不同版本的SDK,设备覆盖率会有相应的变化,SDK版本越低,设备覆盖率

就越高.

由于Android碎片化严重,我们如果想支持更多的设备,就不得不选择低版本的SDK.

help me choose
点击【help me choose】可以查看Android 版本更多的信息,以便帮助我们选择

合适的SDK版本.

回到第2步, 继续点击 [ Next ],进入自定义Activity界面

3.选择一个模板

Android Studio为我们提供了常用的Activity模板,可以通过选择更加快捷的创建.

点击 [ Next ],进入自定义Activity界面

4.自定义Activity

点击 [ Finish ],进入创建项目界面

5.开始创建项目

Tips: 如果你是第一次使用Android Studio创建项目, 可能会比较慢,因为Android Studio第一次会先下载Gradle.

6.解决错误(如果有的话)

耐心等待一会儿, 项目创建成功后可能有错误提示:

不要怕,Android Studio会给出相应的解决方案, 点击【Open Messages View】可打开错误提示界面

上面的错误是com.android.support:appcompat-v7:22.+解析失败
看一下这个组件是干什么用的,点击[ Show in Project Structure dialog ]

是编译的时候用到的.

OK,那我们安装这个组件, 点击【Install Repository and sync project】

安装过程如下:

7.运行

安装成功后项目中不再有报错,运行一下:

2.4.2 项目(Project)和模块(Module)

这里普及两个概念: 项目(Project)和模块(Module)

Android Studio中的Project相当于Eclipse的Workspace, Module相当于Eclipse的Project.

Eclipse和Android Studio项目中相关名字的对比如下:

2.4.3 Android Studio项目文件结构
Android Studio项目有八种查看文件的模式:

下面我们一一介绍:

一.Project模式

展示全部文件信息, 文件的位置是真实的物理结构, 因此在查看文件的时候建议切换到project模式.

二.Packages模式

仅显示项目本身的代码和资源,其它的信息都被隐藏了. 代码和资源都以层级文件的形式显示.

三.Scratches模式

Scratches模式只显示草稿文件.

Scratch Files(草稿文件)是一个非常方便的功能,可以帮助我们快速的实验和建立原型,

使用Scratch Files可以在不修攺项目和创建任何文件的情况下快速画出草图, Android Studio(Intellij idea)为Scratch Files提供了所有的辅助编码功能.

想了解更多,请参考:http://blog.jetbrains.com/idea/2014/09/intellij-idea-14-eap-138-2210-brings-scratch-files-and-better-mercurial-integration/

四.Android模式

Android模式,所有的文件会通过类型进行归类,这个并不是实际在电脑中的文件结构.

Android模式,所有的文件会通过类型进行归类,这个并不是实际在电脑中的文件结构.

五.Project Files模式

类似Eclipse的项目结构形式.

六.Problems模式

仅显示报错的文件结构.

七.Production模式

仅显示生产文件结构.
八.Tests模式

仅显示测试文件结构.
2.5 打开、关闭项目/导入、导出设置

如图这些功能,我们在第一章已经全部介绍过,这里再简单介绍几个。
2.6 2.5.1 清空最近打开的项目列表

2.7 Android Studio欢迎界面有一个最近打开的项目列表,时间久了,打开的项目多了,就会很长,查找也不方便,那么,如何清空这个列表呢?

2.8 步骤如下:

菜单 --> File --> Open Recent --> Clear List

确定清空以后,最近打开项目列表就空了.

2.6 文件同步

操作步骤: File--Synchronize(同步) 或使用快捷键 Option + Command + Y

点击Synchronize (同步)后,它将从文件系统中加载文件,如果你有未保存的更攺,它将会提示你是否放弃更攺。

2.7 清除缓存/重启Android Studio

操作步骤: File-- Invalidate Caches / Restart (清除缓存/重启)

点击 [ Invalidate Caches / Restart ]后进入确认界面

2.8 导出到HTML
你可以把代码以HTML的格式导出

操作步骤: File-- Export to HTML (导出到HTML)

导出后的结果:

2.9 添加到收藏

操作步骤: File-- Add to Favorites (添加到收藏)

我们可以将文件或方法添加到收藏列表中,这样可以更加方便快速的查看

当你光标没有选中方法时,添加到收藏是将整个文件收藏,如果光标在某个方法上,那么添加到收藏是将文件中的方法添加到收藏.

举例: 添加收藏到我们新建的收藏列表

如何打开收藏列表呢?

方法一: 从左侧工具栏快速打开

方法二: 使用快捷键 command + 2

2.10 切换文件编码方式

操作步骤: File-- File Encoding (文件编码)

更加快捷的方式是通过状态栏来进行切换

2.11 切换行分隔符

操作步骤: File-- Line Separators (行分隔符)

更加快捷的切换行分隔符的方式是通过状态栏来切换

2.12 使文件只读
操作步骤: File -- Make File Read-only (使文件只读)

2.13 使用省电模式

操作步骤: File -- Power Save Mode (省电模式)

第三章 编辑
3.1 编辑概览

也可以在文件中右键打开常用的文件操作功能

3.2 复制粘贴

复制粘贴一些比较常用的操作这里就不多作介绍了,相信大家都会用的,这里重点介绍下不是太常用的功能

一. Copy as Plain Text (复制为纯文本)

普通的复制可能会带有一些格式, 如果我们只想要纯文件, 那么就使用 Copy as Plain Text

二. Copy Reference (复制参考)

三. Paste from History (从历史粘贴)

可以选择最近复制的历史进行粘贴

3.3 查找
一. 查找概览

查找应该是我们在使用过程中最常用的功能,这里我们着重介绍一些相对陌生的功能, 其它的大家自己用用看吧。
二. 结构搜索/替换

Android Studio提供了一个通过使用代码模板查找和替换的方式,它可以方便的提定义代码模板

操作步骤: Edit -- Find -- Search Structurally/Replace Structurally (结构搜索/替换)

打开 [ Search Structurally ]

通过搜索模板 System.out.println($arg$+$arg2$); 搜索的结果如下:

编辑变量

历史记录

复制现有模板

替换这里就不作演示了,跟查找差不多
三. 查找设置

操作步骤: Edit -- Find -- Find Usages Settings (查找设置)

查找不同的类型都会有不同的设置,我们看看下面三种情况

3.4 Macros (宏)

一. 什么是宏?

是一种批量批处理的称谓, 它是一些命令组织在一起,作为一个单独命令完成一个特定任务。

Android Studio中支持录制宏的功能

二. 录制回放宏

我们举个例子来看看如何录制回放宏,需求: 自动保存代码,然后运行代码

第一步: Edit --> Macros --> Start Macros Recording --> Android Studio右下角显示开始录制提示

第二步: 按下command + s 保存文件

第三步: 按下 control + s 运行代码

第四步: Edit --> Macros --> Stop Macros Recording --> 指出输入框,输入已录制的宏的名字

第五步: 定义快捷键
Android Studio --> Keymap -- Macros -- 找到我们刚才录制的宏 [AutoSaveAndRun]

我们选择添加键盘快捷键,然后进入编辑界面

确定后显示如下

确定后你就可以使用快捷键来执行宏了。

我们也可以对比下宏菜单列表中的显示

三. 编辑宏

Edit --> Macros --> Edit Macros

3.5 使用列选择模式

操作步骤: Edit -- > Column Selection Mode (列选择模式)

开启 [列选择模式] 后我们可以对列进行选择:

3.6 扩大/缩小选择范围

操作步骤: Edit --> Extend Selection (扩大选择) ---> 每执行一次扩大选择,选择范围就会相应的扩大

Shrink Selection (缩小选择) 与上面的扩大选择正好相反

3.7 合并两行内容

操作步骤: Edit -- Join Lines (合并行)

3.8 自动补全当前的语句
Complete Current Statement (自动补全当前的语句)可以帮你完成正在输入的语句的剩余部分,自动增加漏掉的大括号小括号和必要的格式化处理。

操作步骤: Edit -- Complete Current Statement (自动补全当前的语句) 或 使用快捷键(shift + command + 回车)

第四章 视图

4.1 视图概览

4.2 工具窗口管理
操作步骤: View -- Tool Windows (工具窗口管理)

4.3 快速查看某个变量或者方法的定义
操作步骤: View -- Quick Definition (快速查看某个变量或者方法的定义) 或 使用快捷键 Option + 空格

4.4 查看某个类、对象或方法的兄弟姐妹

操作步骤: View -- Show Siblings (查看某个类、对象或方法的兄弟姐妹)

4.5 快速查看文档说明

操作步骤: View -- Quick Documentation (快速查看文档) 或 使用快捷键 Fn + F1

4.6 查看参数信息

操作步骤: View -- Parameter Info (查看参数信息) 或 使作快捷键 Command + P

4.7 查看方法的背景信息

操作步骤: View -- Contex Info (查看方法的背景信息) 或使用快捷键 control + shift + q ,

此功能可以不需要移动代码就能查看当前方法地声明

4.8 查看最近打开过的文件

操作步骤: View -- Recent Files (最近打开过的文件) 或使用快捷键 Command + E

4.9 查看最近攺变过的文件

操作步骤: View -- Recently Changed Files (最近攺变过的文件) 或使用快捷键 Shift + Command + E

4.10 查看最近的攺动

操作步骤: View -- Recently Changes (最近的攺动)

双击选中会显示最近的攺动

4.11 对比两个文件

此功能用来对比两个文件的差异,找出攺动过的地方

操作步骤: View -- Compare With (对比文件)

举个例子: 对比MainActivity和MainActivity2两个文件存在哪些差异

以默认的方式打开了两个文件,并高亮显示了存在差异的地

切换对比显示方式

其它的设置

4.12 对比选中的文件和正在编辑的文件

操作步骤: View -- Compare File with Editor (对比选中的文件和正在编辑的文件)

4.13 对比剪切版上的内容

操作步骤: View -- Compare with Clipboard (对比剪切版上的内容)

举个例子: 我们剪切了下面的内容

然后再选择你要对比的文件跟剪切的内容进行对比

4.14

快速切换方案
操作步骤: View -- Quick Switch Scheme (快速切换方案)

4.15 窗口工具是否显示

4.16 进入演示/免打扰/全局模式
View -- Enter Presentation Mode

View -- Enter Distraction Free Mode

View -- Enter Full Screen

这三种模式大家都可以自己试一下,谁用谁知道。

第五章 导航

5.1 导航概览

Android Studio 导航(Navigate)完全继承于Intellij IDEA, 只要能熟练使用,它将会帮你节约大量的时间,非常狂拽炫酷屌炸天。

本章主要介绍Android Studio的导航在工程文件、代码块,及工具窗口、编辑器标签等UI元素上的特性及快捷的使用方式。

5.2 跳转到类文件

此功能可以方便的跳转到某个类文件

操作步骤: Navigate --> Class 或 使用快捷键 Command + O

操作窗口介绍

查找类文件并显示所有结果

跳转到类文件并定位到某一行

此功能不支持查找其它文件类型,不支持查找方法
5.3 跳转至指定的文件或目录

操作步骤: Navigate --> File 或 使用快捷键 Shift + Command + O

5.4 跳转到指定文件或方法

操作步骤: Navigate --> Symbol 或使用快捷键 Option + Command + O

5.5 代码块折叠、展开和跳转

Android Studio中我们可以通过【 Command + 】 和 【 Command - 】 来展开

和折叠类和方法的代码,

同时还支持自定义折叠代码片段,其实就是在代码片段的开始和结束分别加上标识,之后就可以跟类和方法一样展开和折叠了。

举个例子:

5.5.1 折叠和展开代码块(方法)

在173这一行任一地方,同时按下 Command + ,代码块被展开

5.5.2 折叠和展开代码块(自定义)

步骤1: 自定义代码块:测试自定义代码块1

接下来我们刚才选择的代码片段开始和结束被加上了标识

5.5.3 在自定义代码块之间选择和跳转

操作步骤: Navigate --> Custom Folding 或使用快捷键 Option + Command + .

举个例子:

第一步: 自定义两个代码块: 测试自定义代码块1 和 测试自定义代码块2

第二步: 使用上述的操作步骤打开选择界面,单击就可以跳转相应的自定义代码块

5.6 跳转到某一行

当我们想快速定位到某一行代码时,可以使用此方法

操作步骤: Navigate --> Line 或使用快捷键 Command + L

举个例子:

光标快速定位到当前文件的第123行

第一步: 光标放到当前文件编辑窗口的任一位置

第二步: Navigate --> Line 或使用快捷键 Command + L

第三步: 在弹出的Go to Line对话框中输入我们需要跳转的行123

第四步: 点击OK

结果:跳转到第123行

如果想更精确一点,快速定位到某一行的某一列,可以这样做

上面的例子是快速定位到123行的第1列

5.7 光标前后快速跳转

跳转到光标上一个所在位置,操作步骤: Navigate -- Back 或使用快捷 Command +[

跳转到光标下一个所在位置,操作步骤: Navigate -- Forward 或使用快捷 Command +]

5.8 光标快速跳转到上一个或下一个编辑过的位置

跳转到上一个编辑过的位置, 操作步骤: Navigate -- Last Edit Location 或使用快捷键 Shift + Command + delete

跳转到下一个编辑过的位置, 操作步骤: Navigate -- Next Edit Location

5.9 书签的使用

5.9.1 什么是书签?

生活中的书签是标记阅读到什么地方,记录阅读进度而夹在书里的小薄片儿,Android Studio中的书签是对代码的标记,标记我们阅读的位置,给代码加上书签,就可以快速的进行跳转。

5.9.2 书签功能

Android Studio中提供的书签功能

5.9.3 标记书签

也可以使用快捷键 Fn + F3

快速取消书签直接再使用一次就可以了。

5.9.4 使用助记符标记书签

操作步骤: Navigate -- Bookmarks -- Toggle Bookmark with Mnemonic 或使用快捷方式 Fn + Opetion + F3

5.9.5 管理书签

方法一:

操作步骤: Navigate -- Bookmarks -- Show Bookmarks 或使用快捷键 Fn + Command + F3

修攺书签描述

左上角还提供了删除和跳转的功能,方便的对书签进行管理

方法二:

工具栏 Favorites 也可以对书签进行管理

5.10

跳转到导航栏

操作步骤: Navigate -- Jump to Navigation Bar 或使用快捷键 Command + ↑

5.11 跳转到声明

什么是声明(Declaration)?

声明即是在源文件中描述类、接口、方法、包或者变量的语法

跳转到声明操作步骤: Navigate -- Declaration 或使用快捷键 Command + B

举个例子:

5.12 跳转到实现

跳转到实现操作步骤: Navigate -- Implementation 或使用快捷键 Option + Command + B

5.13 跳转到类型声明

跳转到类型声明操作步骤: Navigate -- Type Declaration 或使用快捷键 Shift + Command + B

5.14 跳转到继承方法

跳转到继承方法操作步骤: Navigate -- Super Method 或使用快捷键 Command + U

5.15 测试类和被测类之间的跳转

举个例子:

我们有个类文件MainActivity.java,它的测试类一定是以MainActivity开头的,这里我们创建了一个MainActivityTest.java,如果想在这两个文件之间跳转,可以使用下面这个方法。

5.15.1 跳转到测试类

第一步: 光标定位在MainActivity.java编辑界面

第二步: 点击 Navigate -- Test 或使用快捷键 Shift + Command + T

第三步: 选择要跳转的类

查看结果: 跳转到了MainActivityTest.java编辑界面

此时查看Navigate,原来的Test变成了 Test Subject

5.15.2 搜索测试类

在弹出的测试类选择界面,直接输入搜索关键字,比如上面的例子,我们直接输入M

[
会出现搜索框,并显示搜索结果

5.15.3 直接运行选中的测试类

在弹出的测试类选择界面,选中某个测试类,使用快捷键 control + shift + R

5.15.4 创建测试类
在弹出的测试类选择界面,选择 Create new test,弹出下面的创建界面:

选择测试类需要继承的类

OK之后,再选择要生成的setUp和tearDown方法

OK之后, 会看到我们创建的测试类,接下来就可以修修攺攺进行单元测试啦.

5.15.5 跳转到被测类

第一步: 光标定位在MainActivityTest.java编辑界面

第二步: 点击 Navigate -- Test Subject 或使用快捷键 Shift + Command + T

查看结果: 跳转到了MainActivity.java编辑界面

5.16 跳转到相关联的文件

跳转到与当前编辑的文件相关联的文件,操作步骤: Navigate -- Related Symbol 或使用快捷键 control + command + ↑

举个例子:

在当前文件MainActivity.java的编辑界面, 点击 Navigate -- Related Symbol 或使用快捷键 control + command + ↑

弹出相关文件选择对话框

如上图所示, 会显示出MainActivity相关的布局文件和测试文件, 选择后会进行相应的跳转。

5.17 打开文件结构

显示当前文件的结构,操作步骤: Navigate -- File Structure 或使用快捷键 Fn + C

5.17.1 显示匿名内部类

5.17.2 显示所有继承的方法

5.17.3 输入时缩小

输入时缩小: 在输入搜索关键字时,搜索结果会自动过滤,不匹配的会被过滤掉

勾先输入时缩小:

不勾先输入时缩小:

5.18 显示类的层次结构图

操作步骤: Navigate -- Type Hierarchy 或使用快捷方式 Control + H

5.19 显示方法的层次结构图

查看所有实现或者覆写了当前方法的类的结构图,操作步骤: Navigate -- TypeMethod 或使用快捷键 Shift + Command + H

举个例子:

5.20 显示方法调用层次结构图

每一个方法都可能会被很多地方调用,使用 【显示方法调用层次结构图】这个功能可以方便的在调用方法中查看和跳转

操作步骤:

第一步: 光标定位在想要查看的方法中

第二步: 点击Navigate -- Call Hierarchy 或使用快捷方式 Control + Option + H

5.21 在高亮的错误间前后跳转

操作步骤: Navigate -- Next Highlighted Error 或使用快捷方式 Fn + F2

操作步骤: Navigate -- Previous Highlighted Error 或使用快捷方式 Fn + Shift + F2

5.22 在方法间前后跳转

操作步骤: Navigate -- Next Method(下一个方法) 或使用快捷键 control + ↑

操作步骤: Navigate -- Previous Method(上一个方法) 或使用快捷键 control + ↓

5.23 翻页

向上翻页: Fn + ↑

向下翻页: Fn + ↓

5.24 选择当前文件在哪里显示

操作步骤: Navigate -- Select in 或使用快捷方式 Fn + Option + F1

第六章 代码工具
6.1 代码工具概览

6.2 快速覆写父类的方法

如果我们需要覆写父类的某些方法,可以使用下面这个比较快捷的方式:

操作步骤: Code -- Override Method 或者使用快捷方式 Control + O

选中某个覆写的方法后,结果如下:

6.3 快速实现接口

快速实现接口有两种方法

方法一: 是通过Code -- Override Method 或者使用快捷方式 Control + O,在弹出的界面选择 select method to implement

方法二: 是通过 Code -- Implement Methods 或者使用快捷方式 Control + I

选择后的结果显示如下:

6.4 快速实现代理方法

实现代理方法首先我们需要了解代理模式,这里简要介绍一下

6.4.1 代理模式是什么

代理模式是为其他对象提供一种代理以控制对这个对象的访问。

举个例子:

我们搞个活动需要找明星来,我们一般不可能直接联系明星, 需要通过代理(演艺公司)来联系,代理在这里就起到了一个中介的作用。

代理模式一般涉及到的角色有:

A. 抽象角色(明星要做的事:唱歌、跳舞):

声明真实对象和代理对象的共同接口

B. 代理角色(演艺公司):

可以操作真实对象: 代理对象角色内部含有对真实对象的引用,从而可以操作真实对象

可以代替真实对象: 代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。

可以代替真实对象: 代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。

可以封装真实对象: 代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装

C. 真实角色(明星):

代理角色所代表的真实对象,是我们最终要引用的对象

6.4.2 代理模式实例

新建3个类文件:

Work.java (抽象角色: 明星要做的事)

SuperStar.java (真实角色: 明星)

Company.java (代理角色: 演艺公司)

6.4.3 快速生成代理方法

这里的代理角色的部分代码是可以自动生成的

方法一:

操作步骤: Code -- Delegate Methods

方法二:

操作步骤:

Code -- Generate -- Delegate Methods

或 使用快捷方式 Command + N -- Delegate Methods

或 在编辑位置 右击 -- 在弹出的选择界面点击 -- Generate -- Delegate Methods

后续的操作同方法一

6.5 快速生成构造函数

操作步骤: Code -- Generate -- Constructor 或使用快捷键 Command + N

6.6 快速生成Getter和Setter方法

操作步骤: Code -- Generate -- Constructor 或使用快捷键 Command + N

6.7 快速覆写equals和hashcode方法

6.7.1 equals和hashcode方法简单介绍

equals方法和hashcode方法都是用来判断两个对象是否相等的。

equals方法:

a. 是判断两个对象的内容是否相等:

比如:DataBean这个类有两个属性name和age,如果这两个属性相等,那就证明两个对象相等。

b. 是给用户调用的方法:

如果要判断两个对象是否相等,需要重写equals方法,然后在代码中调用

hashcode方法:

a. 是判断两个对象的编码是否相等:

它和equals的不同在于它返回的是整型,比较起来不直观。一般要求在覆写equals的同时也要覆写hashcode,让他们的逻辑一致。

b. 一般用户不会调用:

比如在hashmap中key是不可以重复的,它在判断key是否重复的时就判断了hashcode这个方法,同时也用到了equals方法。

6.7.2 操作步骤

6.8 快速覆写toString方法

操作步骤: Code -- Generate – toString()

toString方法生成设置介绍:

toString方法生成模板介绍:

6.9 快速插入版权信息

6.9.1 了解版权信息

版权信息即copyright, 是指作者对其作品依法享有的某些特殊权利,亦称著作权。非经同意,他人不得出版或作更改。

如果一个文件包含许可证或版权信息,那么它应当被放在文件最前面,如下:

6.9.2 快速插入版权信息

当光标定位到要插入版权信息的地方,然后使用快捷方式 Command + N 或通过 Code -- Generate --- Copyright来插入

如果你当前没有定义任何Copyright信息,那么会出现如下提示

点击OK,我们去配置版权信息

6.9.3 配置copyright信息

操作步骤: Android Studio -- Preferences -- Copyright -- Copyright Profiles

接下来第一步: 新建一个版权信息文件

第二步: 配置版权信息模板

我的配置信息如下:

第三步: 校验模板是否有效

点击Copyright,可以选择默认的项目Copyright

第四步: 添加模板,根据你自己的需求配置模板使用范围

第五步: 快速插入版权信息

使用快捷方式 Command + N 或通过 Code -- Generate --- Copyright来插入

当你新建一个文件的时候,版权信息就会自己被加入

6.9.4 如何导入导出Copyright配置文件

当我们想把版权信息文件共享给团队的其他人,这个时候该怎么办呢?

我们创建的copyright文件放在: 项目根目录/.idea/copyright目录下,直接把copyright这个目录拷贝给他们就可以了。

6.10 快速提取或删除语句
Android Studio提供了一个方法, 可以从for, foreach, if..elseif...else, try...catch...finally, while...do, do...while中快速提取或删除语句

下面我们举例说明:

下面这段代码是我们要进行测试的

将光标定位在System.out.println上,不是选中,定位在上面就可以了

然后点击 Code -- Unwrap/Remove 或者使用快捷方式 Command + Shift + Delete

举个例子1: 光标定位在System.out.println上,会将System.out.println()删除,提取要打印的内容

如果有System.out.println外还嵌套有try,for等语句,会提示你选择到底要删除哪个。

举个例子2: 如果选中System.out.println这条语句,那么执行删除/提取操作的时候就会删除try语句

举个例子3: for, foreach, if..elseif...else等提取方法同上

6.11 代码自动补全

6.11.1 基本自动补全

当我们在输入代码的时候,Android Studio就会给我们智能提示,如下:

如果在你输入的时候没有自动触发,可以通过如下方式触发基本的自动补全:
Code -- Completion -- Basic 或使用快捷方式: control + 空格

6.11.2 智能自动补全

智能自动补全会将不适用的条目过滤掉,只显示可用的类、变量、属性或者方法,这个方法不但提升了性能,而且还规避掉了一些不必要的错误

操作步骤如下:

Code -- Completion -- SmartType 或使用快捷方式: control + Shift + 空格

6.11.3 循环扩展词

此功能会自动补全循环扩展的关键字,如:

Random r = R(在这里触发循环扩展此,会自动补全为Random)

操作方法如下:

Code -- Completion -- cyclic expand word 或 cyclic expand word (backward)

快捷方式是: option + / 或 option + ?

大家可以使用快捷方式操作一下上面的功能,有可能问题来了,快捷键跟我们电脑上其它的快捷键冲突了,怎么办呢?

6.11.4 更攺快捷方式

进入Preferences -- Keymap -- Main Menu -- Code -- Completion 来修攺冲突的快捷方式

修攺方法如下:

6.12 展开和收缩代码

6.12.1 展开和收缩代码

展开代码: Code -- Folding -- Expand 或使用快捷方式 Command +

收缩代码: Code -- Folding -- Collapse 或使用快捷方式 Command -

6.12.2 递归展开和收缩代码

递归展开代码: Code -- Folding -- Expand Recursively 或使用快捷方式 option Command +

递归收缩代码: Code -- Folding -- Collapse Recursively 或使用快捷方式 option Command -

6.12.3 全部展开和收缩代码

全部展开代码: Code -- Folding -- Expand All 或使用快捷方式 Shift Command +

全部收缩代码: Code -- Folding -- Collapse All 或使用快捷方式 Shift Command -

6.12.4 展开和收缩注释

使用此功能会自动展开当前文件里的所有注释,不会展开代码。

展开代码注释: Code -- Folding -- Expand doc comments

收缩代码注释: Code -- Folding -- Collapse doc comments

6.12.5 指定展开层级

有时代码里欠套了几层的收缩代码,我们如果想打开不同层级的,可以使用这个方法:

指定展开代码层级: Code -- Folding -- Expand to level

指定全部展开代码的层级: Code -- Folding -- Expand all to level

6.12.6 折叠/展开选中区域

选中要折叠代码, 通过 Code -- Folding --Fold Selection / Remove region 或使用快捷方式 command + .

选中的代码就会被折叠,再触发一次,代码就会被展开

6.12.7 折叠代码块

选中要折叠代码,选中要折叠的代码块, 通过 Code -- Folding --fold code block来触发

6.13 使用缩写快速插入代码

Android Studio中提供的Live Template,它定义了一些常用的缩写,我们可以通过输入缩写快速生成常用的代码,从而提高很多效率, 接下来让我们来认识一下它吧。

6.13.1 常用的缩写

使用缩写快速插入代码的方法有:

1.Code -- Insert Live Template在弹出的列表中选取缩写

2.使用快捷方式 Command + j在弹出的列表中选取缩写

3.直接输入LiveTemplate定义的缩写,然后按下Tab键插入(当然是这种方式最快)

类中常用的缩写如下:

方法中常用的缩写如下:

太多了,我就不一一介绍了,如果大家想了解更多可以去看看所有的Live Template

使用模板来包围

Code -- Surround with Live Template 或使用快捷方式 option + command + j

6.13.2 查看所有的缩写

进入Preferences -- Editor -- Live Templates

6.13.3 编辑Live Templates

所有的缩写模板我们都是可以增删攺的,根据你的使用习惯来喽.

添加一个模板我们可以参考其它的模板是如果定义的,这个我就不举例了。

6.14 注释掉代码

注释行: Code -- Comment with Line Comment 或使用快捷方式 command + /

注释代码块: Code -- Comment with Line Comment 或使用快捷方式 option + command + /

6.15 优化你的代码

6.15.1 格式化代码

操作步骤:

Code -- Reformate Code 或使用快捷方式: option + Command + L

举个例子:

默认的Reformate 不会优化导入,也不会重新排列代码,我们从上面的例子可以看出。

但是我们可以设置,通过下面的方法。

配置优化选项:

通过快捷方式 option + command + shift + L 打开配置对话框

格式化文件:

右击要格式化的文件(可以多选,也可以选择包,当然也可以选择项目),在弹出的菜单中选择 Reformate Code,

会弹出优化选项,根据你自己的需求选择.

6.15.2 自动缩进代码

操作步骤:

Code -- Auto-Indent Lines 或使用快捷方式: control + option + i

6.15.3 优化导入

优化导入会去除掉一些无效的导入。

操作步骤:

Code -- Optimize Imports 或使用快捷方式: control + option + o

或者 右击要格式化的文件,在弹出的菜单中选择 Optimize Imports

6.15.4 重新排列代码

操作步骤:

Code -- Rearrange Code

6.16 移动你的代码

6.16.1 上下移动代码语句

移动代码块或一行代码,可使用下面的方法:

Code -- Move Statement Down 快捷键: shift + command + ↑

Code -- Move Statement Up 快捷键: shift + command + ↓

6.16.2 上下移动一行

移动一行代码也可以使用下面的方法:

Code -- Move Line Down 快捷键: option + command + ↑

Code -- Move Line Up 快捷键: option + command + ↓

第七章 代码检查

7.1 代码检查简介

Android Studio提供了功能强大、快速、灵活的代码检查工具, 它能够检测出编译器和运行时的错误,在你编译之前建议你修正和攺进。

Android Studio代码检查其实就是执行代码检查

它不只检测编译错误, 还会检查出一些效率低下的代码,它支持一些代码规范、编程指南、最佳实践,当你的代码中存在无法访问的代码、未使用的代码、非本地化字符串、无法解析的方法、内存泄漏甚至拼写的问题时,Android Studio的代码分析工具都能够快速检查出来。

目前支持的语言有Android、Java、XML、HTML等等。

Android Studio集成了lint工具, 可以帮助你很轻松地识别和纠正Anroid代码的结构和质量问题。本书将重点介绍lint工具。

Android Studio代码检查是可以灵活配置的

我们可以在偏好设置中配置代码检查的规则,可以启用或禁用每一个代码检查或更攺它的严重性, 可以创建自已的配置文件,可以在不同的范围进行不同的检查,可以禁止在某个特定的代码片段检查等等。

Android Studio代码检查所涵盖的最常见的任务

发现可能的错误;

定位死代码;

检测性能问题;

改进可维护性和代码结构;

与编码准则和标准一致;

符合规范;

7.2 代码检查

7.2.1 指定检查范围和检查的配置文件

费话不多说,我们先来执行一次代码检查。

操作步骤:

步骤1: Analyze -- Inspect Code – 弹出[指定检查范围]对话框

默认是检查整个项目,我们也可以自定义检查范围:

还可以指定检查的配置文件:

检查的配置文件是可以增删攺的,支持导入导出,我们可以将团队制定的代码规范通过此功能共享给团队的所有成员。

7.2.2 查看代码检查结果

在这个例子中我们使用默认的配置, 使用默认检查配置文件来检查整个项目,结果如下:

我们可以执行多次检查,每次检查结果会多出一个Tab,如上图,我们执行过两次检查,所以有两个TAB。

Tab的其它操作可通过右击TAB来查看。

7.2.3 代码检查结果辅助分析工具

用一张图来清晰的展示出有哪些辅助工具:

很多工具比较简单,就不一一举例了,挑几个来演示一下。

 按严重程度分组 

 按目录分组

高亮显示不同和仅显示不同
与前一个版本对比,显示或过滤出新增的文件的问题

注意:只有选中了高亮显示不同(有差异)文件,才能够使用仅显示(过滤)不同文件。

检查没用使用的声明选项

这里的运行检查只会检查没用使用的声明。

取消成员变量或类的警告会在他们头上加上@SuppressWarnings("unused")声明,这样在编译代码或代码扫描时就会忽略他们。

7.2.4 分析检查出的问题

举几个简单的例子:

JAVA: 无用声明

Android:未知属性

Android Lint:版本兼容性问题

双击左边错误列表中的错误或者单击错误摘要中的(at line 10)会定位到具体的错误上.

lint暂时先介绍这一点,后面会有详细介绍。
7.3 Lint使用说明

7.3.1 Lint是什么

Lint是谷歌从Android 4.1版本开始提供的代码扫描工具;

lint工具的代码扫描工作流

为什么要用Lint?

Lint通过代码检查,可发现潜在的问题,并能对Android程序进行优化处理.

Lint发现的每一个问题都有一个描述信息和严重级别,我们可以快速的定位问题,并根据严重级别来确定优先级。

习惯使用Lint可以提高Android应用的性能、可靠性和兼容性,让代码更容易阅读和维护。

认识Issue和Category

Issue是什么?

Lint所要检查的问题都是以Issue(问题)来描述的。

Issue(问题)以一个文本短语来作为id,对Issue(问题)的定制等操作都是基于id的。

Issue(问题)以Severity(严重性)来标识该Issue的危害程度:

Fatal / Error / Warning/ Information / Ignore。

对Issue(问题)的忽略操作其实也就是降低它的Severity为Ignore。

Category是什么?

所有的Issue可分为10个Category(类别):

Correctness(正确定性)

Correctness:Messages(正确定性:信息)

Security(安全)

Performance(性能)

Usability:Typography(可用性:字体)

Usability:Icons(可用性:图标)

Usability(可用性)

Accessibility(可访问性)

Internationalization(国际化)

Bi-directional Text(双向文字)

下文所有的Issue和Category我们都称之为问题和类别.

两种使用场景

Android Lint有2种使用场景: IDE和命令行

Android Studio/Intellij idea/Eclipse/Jenkins都有Android Lint的插件支持,本书会重点介绍

Android Studio中lint的使用,也会稍带介绍lint命令行的使用。

7.3.2 Lint会检查哪些错误

Android Lint主要用于检查以下这些错误:

缺少转译(和未使用的转译)布局性能问题(所有的问题都是通过layoutopt工具找出来的)未使用的冗余资源在数组中定义多个配置时,数组大小不一致可访问题性和国际化的问题(硬编码, 缺少contentDescription)图标问题(失真、重复图标、错误尺寸等)可用性问题(例如在输入框中不能指定输入方式)配置文件错误

配置文件错误

更多请参考: http://tools.android.com/tips/lint-checks
7.3.3 Lint命令行使用方法介绍

接下来我们通过下面几个例子来介绍lint命令参数的一些用法.

7.3.4 Lint命令行参数用法举例

1.如何查看哪些id和类别是可用的?

2.如何禁用某项检查?

3.如何启用某项检查?(某些检查默认是禁用的)

4.如何对项目只做某项检查?

5.如何查看某个id的说明?

6.如何以html格式输出lint检查结果?

7.如何检查本地项目?

8.如何检查网络项目?

7.3.5 Android Lint常规检查项

在7.3.4节中我们讲到的[如何查看问题的类别],lint支持的有效问题的类别有:

Correctness(正确定性)

Correctness:Messages(正确定性:信息)

Security(安全)

Performance(性能)

Usability:Typography(可用性:字体)

Usability:Icons(可用性:图标)

Usability(可用性)

Accessibility(可访问性)

Internationalization(国际化)

Bi-directional Text(双向文字)

下面简单介绍每个类别中的常规检查项:

一. Correctness 【正确性】

1.DuplicatedIds: 重复的id

布局文件中id应该是唯一的

2.NewApi: 新API

代码中使用的某些API高于Manifest中设置的Min SDK

3.InconsistentArrays: 不一致的数组

字符串国际化中,同名的的String-Array对应的item值不同

4.Registered: 注册过

没有通过AndroidManifest注册Activity/Service/ContentProvider

5.Deprecated: 过时的

代码中使用了已经废弃的API

6.PxUsage: 使用了Px

避免使用px,使用dp

二. Correctness:Messeges 【正确性: 信息】

1.MissingTranslation: 字符串国际化不完全

2.ExtraTranslation: 在默认位置没有定义字符串国际化

三. Security 【安全】

1.SetJavaScriptEnabled: 设置JavaScript可用

如果你不确定你的程序中确实需要JavaScript就不要执行SetJavaScriptEnabled。

2.ExportedContentProvider/ExportedReceiver/ExportedService/ExportedActivity

ContentProvider/Receiver/Service/Activity的exported为true时,设置一个Permission,让使用者获取了Permission才能使用。

3.HardcodedDebugMode:硬编码的调试模式

不要在manifest中设置android:debuggable。

如果设置了,你所编译的任何版本都要采用指定的debug模式。如果不设置,编译工程版本采用debug模式;编译User版本采用release模式。

四. Performance 【性能】

1.DrawAllocation: 绘制分配

避免在绘制或者解析布局(draw/layout)时分配对象。例如:OnDraw()中实例化Paint对象。

2.ObsoleteLayoutParam: 过时的布局参数

避免使用过时的布局参数

3.UseCompoundDrawables: 使用CompoundDrawable

如果包含一个Imageview和一个TextView的线性布局,可被采用CompoundDrawable的TextView代替。

如果包含一个Imageview和一个TextView的线性布局,可被采用CompoundDrawable的TextView代替。

4.UseSparseArrays: 使用Sparse数组

尽量用Android的SparseArray代替Hashmap

5.DisableBaselineAlignment:禁用基线对齐

如果LinearLayout被用于嵌套的layout空间计算,它的android:baselineAligned属性应该设置成false,以加速layout计算。

6.FloatMath: 使用FloatMath代替Math。

7.NestedWeights:嵌套Weights

避免嵌套weight,那将拖累执行效率

8.UnusedResources/UnusedIds: 未被使用的资源/ID

未被使用的资源会是程序变大,并且编译速度降低。

9.Overdraw: 过度绘制

如果为RootView指定一个背景Drawable,会先用Theme的背景绘制一遍,然后才用指定的背景,这就是所谓的“Overdraw”。

可以设置theme的background为null来避免。

10.UselessLeaf/UselessParent:View或view的父亲没有用

五. Usability:Typography 【可用性: 字体】

1.TypographyDashes: 破折号

特殊字符需用编码代替:“–”需要用“–”;“—”需要用“—”

2.TypographyEllipsis: 省略号

特殊字符需用编码代替:“…”需要用“…”

3.TypographyFractions: 字体部分

特殊字符需用编码代替:“½”需要用“½”;“¼”需要用“¼”

六. Usability:Icons 【可用性: 图标】

1.IconNoDpi:

Icon在nodpi和指定dpi的目录下都出现。

2.GifUsage: 使用了Gif

Image不要用GIF,最好用PNG,可以用JPG。

3.IconDipSize

七. Usability 【可用性】

1.BackButton:返回按钮

Android中不要设计有Back的按钮,Android中一般有Back的硬按键。

2.ButtonCase

Button的"Ok"/"Cancel"显示大小写, 一定不要全大写或全小写。

如果有标准的资源的字符串就不要自己再定义,要用系统定义的:@android:string/ok和@android:string/cancel

八. Accessibility 【可访问性】

1.ContentDescription:内容描述

ImageView和ImageButton应该提供contentDescription

九. Internationalization 【国际化】

1.HardcodeText: 硬编码文本

硬编码的字符串应该在资源里定义

2.EnforceUTF8: 强制UTF8编码

所有XML资源文件都应该以UTF-8编码

...

更多内容请参考:
http://blog.csdn.net/thl789/article/details/8037333
http://tools.android.com/tips/lint

Android Studio中集成了Lint来进行代码检查,这大大方便了我们的使用,下面我会在【7.4 配置代码检查规范】介绍。

7.4 配置代码检查规则

我们可以在偏号设置中查看和配置代码检查的规则,方法如下:

通过Android Studio -- Preferences -- Inspections进入代码检查的偏好设置.

代码检查偏好设置界面大概介绍如下:

我们可以看到代码检查分类, 展开分类可以查看具体的检查项,我们挑几个来讲讲。
7.4.1 检查项的严重程度配置

点击Edit severitties来编辑严重程度

如果要编辑默认的配置,点击【Edit Settings|Colors &Fonts】,会进入

Colors &Fonts-- General页面,我们在这个页面配置就好了。

如果要新增一个严重程度,点击左下脚的+号,填写名字后开始配置:

配置成功后就可以使用啦!

7.4.2 检查项的应用范围
我们还可以灵活配置每一个检查项的应用范围:

7.4.3

Android检查项简介

上图我们可以看到每一个检查项的描述、严重程度、检查范围。

Android检查项一共有六项,他们的描述分别是:

1.验证Android XML中的资源引用

2.验证Android Resource文件和AndroidManifest.xml中不允许的标签

3.报告两类问题:

3.1.提供了资源标识符的错误类型,例如,当调用资源getString(int id),你应该通过R.string.something,而不是R.drawable.someting

3.2.在需要传递特定常量的方法中传了一个错误的常量,例如,当调用View#setLayoutDirection时,参数必须是android.view.View.LAYOUT_DIRECTION_LTR 或 android.view.View.LAYOUT_DIRECTION_RTL.

4.验证在Android library模块中的switch语句是否使用了Resource IDs.因为从SDK Tools r14开始在library项目中Resource IDs就是一个非final.这意味着library代码不能将这些id作为常量.

5.检查相关的activity中是否声明了XML的onClick属性中指定的方法

6.验证Android Resource文件和AndroidManifest.xml中未知的XML属性.

针对这里的每一项检查,我们都可以自定义严重性和范围,对这六大查检项我们也可以勾选或不勾选.

7.4.4 AndroidLint检查项简介

这里的每一项检查都是根据Android Lint Issue来的,前面在介绍【7.2.5 Android Lint常规检查项】的时候已经介绍过了,

大家可以对照上面的介绍来看一下。

7.4.5 共享代码检查规范

Android Studio代码检查的配置文件支持导入导出,在团队协作时可以制一份代码扫描规范,导出共享给团队成员。

7.5 代码清理

虽然我们可以通过代码扫描来检查出很多问题,但你不得不一个一个的手动去修复,如果有个工具可以把检查出来的问题自动修复那该多好。

哈哈,Android Studio恰好就提供了这么一个功能Code Cleanup(代码清理),我们可以自定义代码清理的规则,以此来帮助我们快速修复问题。

7.5.1 用法介绍:

操作步骤:

Analyze -- Code cleanup -- 指出配置清理范围的对话框

点击Inspection profile右边的...可以打开【代码清理检查】配置界面

我们可以在这里禁用或启用一些规则,可以查看规则详情,也可导入导出规则等。

确定执行后Code cleanup就会自动检测出问题,并帮我们自动修正。

Code cleanup还可以在版本控制的commit对话框中设置,后面讲到版本控制的时候我们会提到。

7.5.2 实例: 自动清理代码

我们执行下 Analyze -- Code cleanup ,如下代码清理前后的对比:

7.6 指定检查代码规则

7.6.1 用法介绍:

Android Studio还可以通过输入检查规则的名字来指定代码检查规则, 操作方法如下:

Analyze --> Run Inspection by Name --> 弹出规则输入框 --> 输入规则名(例: memory) -->会自动联想出相关的检查规则

点击选择检查规则之后会弹出检查范围指定窗口,指定后就执行检查啦!
7.6.2 实例: 检查无用的资源文件

Analyze --> Run Inspection by Name --> 弹出规则输入框 --> 输入规则名(unused resources)

检查整个项目

检查结果如下:

现在你就可以根据检查结果来看看是否要清除这些没用过的资源了。

7.7 配置当前文件自动检查的规则

Android Studio会对当前文件自动进行代码检查,检查出问题后相关的代码会被高亮显示,我们把鼠标放在高亮显示的地方会有相关的问题提示,点击更多可以查看详情.

另外Android Studio还提供了一个功能,可以配置当前文件自动检查的规则(级别),下面我们来介绍下这个功能.

7.7.1 用法介绍:

菜单 --> Analyze --> Configure Current File Analysis... -->弹出配置窗口

对文件自动检查的规则(级别)有三个:

None: 没有(去掉自动检查)

Syntax: 语法 (仅检查语法)

Inspections: 代码检查(代码检查里所有选中的规则都会被检查)

注意: 此功能仅是对当前文件都行配置,也只对当前文件有效

7.7.2 实例: 配置举例

当前文件检查的级别为默认的Inspections

如果当前文件的检查level为None,就不会有这些提示。

7.8 查看本地代码检查结果

Android Studio中代码检查结果是可以导入导出的,前面我们提到了导出结果的功能, 这里我们做个演示。

这些导出的文件我们就可以方便的打包共享给有需求的同学了。
那么问题来了,拿到这些文件的同学如何打开呢?

很简单, follow me!

菜单 --> Analyze --> View Offline Inspection Results --> 弹出选择对话框

导入后的显示:

7.9 自动添加@Nullable和@NotNull注解

7.9.1 为什么要使用@Nullable和@NotNull?

在写程序的时候我们可以定义变量和参数是否可为空指针,通过使用像@NotNull和@Nullable之类的annotation(注解)来声明一个方法是否是空指针安全的。

这两个注解的作用是为了约束。@NotNull: 变量或参数不能为null @Nullable: 变量或参数可以为null.

如果你忘记判断空指针了, 代码检查工具(findbugs)或IDE(Android Studio)可以通过读取此注解来帮你添加忘记的空指针检查,或者向你提示出不必要的乱七八糟的空指针检查。当看到@NotNull和@Nullable时,我们可以自已决定是否做空指针检查。

Android Studio的Analyze(代码分析)菜单中提供了Infer Nullity, 这个功能可以通过分析代码推断出需要判断空指针的变量和参数,并且可以自动为我们加上@Nullable和@NotNull注解.

如果想体会到这个功能的好,我们必须习惯尽可能多的使用注解.

7.9.2 实例演示

第一步: 菜单 --> Analyze --> Infer Nullity --> 弹出检查范围选择对话框 --> 选择Current File --> OK

检查结果如下:

如果我们结果不做任何操作,可以直接点击【Infer Nullity Annotation】为所有检查

结果添加 @NotNull注解。

当然我们最好自己查看下结果,对觉得某些检查结果是没有必要进行空指指判断的,可以在结果中排除掉.

排除掉的结果在我们执行【Infer Nullity Annotation】以后不会自动添加 @NotNull注解。

第二步: 点击【Infer Nullity Annotation】为所有检查结果添加 @NotNull注解。

当前文件会自动导入需要的包:

import org.jetbrains.annotations.NotNull;

import org.jetbrains.annotations.Nullable;

从结果中可以看出,@NotNull @Nullable 来自annotations.jar,如果当前项目中没有这个jar包,在首次

执行[Infer Nullity]的时候会提示我们自动添加,添加后的jar包保存在

加上注解的变量和参数

此时你再次执行[Infer Nullity]就不会有结果显示给你了。

提示: 默认检查全局变量,如果也想检查局部变量,可以选持检查范围对话框中选择【Annotate local variables】

7.10 分析依赖

依赖是面向对象系统中类与类或组件的一种基本关系,例如:A类在编译时候要用到B类,我们称a在编译时依赖b.

Android Studio提供的分析依赖工具,可以帮助我们分析出这些依赖关系。

7.10.1 分析依赖

菜单 --> Analyze --> Analyze Dependences --> 指出分析范围对话框

分析结果如下:

7.10.2 分析反向依赖

反向依赖分析起来比较耗时,尤其在大型项目中, 所以对于此类分析我们最好指定分析的范围.

菜单 --> Analyze --> Analyze Backward Dependences --> 指定分析范围

7.10.3 分析模块依赖

菜单 --> Analyze --> Analyze Module Dependences

上图模块的依赖关系:选中moudle C,显示出A依赖B,B依赖C.

7.10.4 分析循环依赖

循环依赖就是循环引用,就是两个或多个bean相互之间的持有对方,比如A引用B,B引用C,C引用A,则它们最终反映为一个环。

菜单 --> Analyze --> Analyze Cyclic Dependences

7.11 分析数据流

Android Studio中提供的数据流分析功能,可以帮助我们更好的了解项目代码的继承,一步一步的查看复杂代码,找到代码瓶颈。

使用数据流分析功能可以:

1.查看变量被分配的值从哪里来的;

2.找出变量所有可能的值;

3.找出表达式/变量/方法参数可以流入哪些地方;

4.找出潜在的NullPointerException可能出现的地方;

5.分析数据流就像思考人生的两个问题: 我从哪儿来,我要到哪儿去?

7.11.1 我从哪儿来?

光标放在变量(values)上 --> 菜单 --> Analyze --> Analyze Data Flow to here --> 会弹出分析范围选择 --> 然后查看结果

7.11.2 我要到哪儿去?

光标放在变量(values)上 --> 菜单 --> Analyze --> Analyze Data Flow From here --> 会弹出分析范围选择 --> 然后查看结果

7.12 分析堆栈

Android Studio提供了一个分析堆栈的功能,可以更加方便和专注的分析堆栈。

假设我们的应用在测试的时候出现了CRASH,这就需要对方提供相关日志给我们来分析,拿到日志以后就可以使用此功能来快速的分析问题了。

假设我们拿到一段Crash日志需要分析.

首先复制log --> 菜单 --> Analyze --> Analyze StackTrace

确定后,跳转到分析堆栈的对话框,这里提供了很多方便分析的功能。

第八章 重构

8.1 重命名

8.1.1 重命名类

光标定位在类名上 --> 菜单 --> Refactor --> Rename

此时会指出重命名选项,选中后可快速重命名。

如果想要更多选项就再执行一次上面的步骤:菜单 --> Refactor --> Rename

弹出重命令选择对话框:

此对话框也可以快速通过两次按下快捷键:fn + shift + F6获得.

为了谨慎起见,我们不要直接点击Refactor,可以选预览一下。

点击Preview,查看结果:

我们可以对查找结果进行修攺,一些不需要重命名的地方可以排除掉。

8.1.2 重命名变量

重命名变量,方法同上

8.1.3 重命名文件

选中文件 --> 菜单 --> Refactor --> Rename File --> 弹出重命名对话框 --> 输入新的文件名

确定后执行重构, 所有相关的文件名将会被更攺.

8.2 更改方法签名

Android Studio提供了一个非常强大的更改方法签名记的功能, 我们可以攺变方法的名称,攺函数的可访问性,对参数进行添加、删除、重命名和重新排序.

使用方法如下:

1.光标定位在方法名上

2.使用快捷键fn+ command + F6 或 菜单 --> Refactor -->Change Signature

3.指出对话框

4.可以改变方法的可访问性、可以对参数的进行增删攺.

5.在最下面可以对更攺实时预览

8.3 迁移变量类型

迁移类型(Type Migration)就是改变变量的类型.

使用方法:

菜单 -- Refactor --> Type Migration 或使用快捷方式: Shift + Command + F6

实例介绍:

有两个文件Book.java 和BookStore.java

执行迁移

8.4 转成静态方法

此功能可以将实例方法转成静态方法,并且能够自动校正所有调用、实现、重写该方法的地方.

使用方法:

1.光标放在你要转成静态的方法上面

2.点击菜单-->Refactor-->Make Static...-->弹出对话框

3.点击预览(Preview)

4.点击Do Refactor

如果不想直接修改方法,可以重写方法,然后转成静态的,方法如下:

8.5 转成实例方法
Convert to Instance Method 可以将静态方法转成实例方法, 该方法用一个类的实例方法作为参数的类型。

注意:该方法是静态的,它的参数类型是项目中的类。

举个例子:

我们对MainTest这个类中的initMethod静态方法转成实例方法.

1.光标定位在initMethod方法上

2.菜单 --> Refactor --> Convert to Instance Method --> 弹出对话框

Select an instance parameter:选择一个实例参数,转换后的实例方法将会放到这个类里,所有用到这个类的方法都将会被替换.

Visibility:可见性

3.点击预览,查看要攺动的地方.

可以对要攺动的地方进行修攺

4.执行重构,结果如下:

第九章 构建
Android Studio默认使用Gradle来进行项目构建的,如果你从不没接触过Gradle, 那我们需要从头来讲讲.

9.1 认识Gradle

9.1.1 Gradle是什么?

Gradle是一个自动化构建工具,因为Gradle采用Groovy的Domain Specific Language(领域特定语言)来描述和控制构建逻辑,所以它的特点是语法简洁、可读性强、配置灵活等等. 如果你使用过ant或maven,你会体会到Gradle的强大和便洁的.

Intellij idea 和 Android Studio天生支持Gradle构建程序,未来Gradle可能会成为java世界里最流行的构建工具.

Intellij idea 和 Android Studio天生支持Gradle构建程序,未来Gradle可能会成为java世界里最流行的构建工具.

Groovy是什么?

Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,

Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。

更多Groovy请参考:http://www.groovy-lang.org/

9.1.2 为什么要用Gradle?

因为Gradle是一个先进的自动化构建工具,它允许通过插件创建自定义的构建逻辑。Gradle在build.gradle文件中描述它的构建逻辑。

Gradle有以下特点:

Gradle支持多工程构建和局部构建Gradle支持远程或本地依赖管理: 支持多方式依赖管理:包括从maven远程仓库、nexus私服、ivy仓库以及本地文件系统的jars或者目录Gradle与Ant、Maven兼容Gradle可轻松迁移: gradle适用于任何结构的工程。你可以在同一个开发平台平行构建原工程和gradle工程Gradle使用灵活: gradle的整体设计是以作为一种语言为导向的,而非成为一个严格死板的框架Gradle免费开源Gradle跟IDE集成的非常好Gradle可以更容易地集成到自动化构建系统

9.1.3 Gradle中的Project、Task和Plugin

理解Gradle中的项目、任务和插件:

项目是什么?

项目(project)是指我们的构建产物(比如Jar包)或部署的产物(将应用程序部署到生产环境),每个项目包含一个或多个任务。

任务是什么?

任务(Task)是指不可分的最小工作单元,代表一个逻辑上较为独立的执行过程,比如:编译、复制、打包.

插件是什么?

Gradle只是提供了构建项目的一个框架,所有有用的特性都由Gradle插件提供,一个Gradle插件能够:

向项目中添加新任务.为新加入的任务提供默认配置,这个默认配置会在项目中注入新的约定(如源文件位置).加入新的属性, 可以覆盖插件的默认配置属性.为项目加入新的依赖.

向项目中添加新任务.为新加入的任务提供默认配置,这个默认配置会在项目中注入新的约定(如源文件位置).加入新的属性, 可以覆盖插件的默认配置属性.为项目加入新的依赖.

更多请参考: http://www.gradle.org/docs/current/userguide/standard_plugins.html
项目、任务和插件的关系是什么?

项目代表要被构建的组件或整个项目,它为任务提供了执行的上下文,而插件用来向项目中添加属性和任务.

一个任务可以读取和设置项目的属性以完成特定的操作。

如何对Gradle的构建进行配置?

Gradle的构建肯定会包含下面这几个配置文件:

Gradle构建脚本(build.gradle)指定了一个项目和它的任务.

Gradle属性文件(gradle.properties)用来配置构建属性.

Gradle设置文件(gradle.settings)对于只有一个项目的构建而言是可选的,如果我们的构建中包含多于一个项目,那么它就是必须的,因为它描述了哪一个项目参与构建。

每一个多项目的构建都必须在项目结构的根目录中加入一个设置文件。

关于Android Studio中用到的Gradle配置文件,下面我们会有详细的介绍.

9.2 配置Gradle环境

9.2.1 Mac上配置Gradle环境

一. 下载gradle

1.1 下载地址: http://gradle.org/downloads
1.2 下载最新版本:gradle-2.3 (当前最新版为2.3)

当然你也可以选择下载某一个历史版本,在页面右边Choose Vesion 中选择

二. 配置环境变量

2.1 我的本地存放路径:/Volumes/warehouse/dev-tools/tools-jars/gradle-2.3

2.2 编缉.bash_profile: vim ~/.bash_profile

2.3 配置环境变量:

2.3.使配置立即生效: source ~/.brash_profile
三. 查看配置是否成功

如果电脑上不单独配置Gradle环境也没关系, 因为Android Studio中使用了Gradle Wrapper,它可以在我们没有安装gradle的时候进行项目构建,我们来了解下。
9.2.2 Android Studio中的Gradle Wrapper

Gradle Wrapper是什么?

Gradle Wrapper我们可以理解为是对Gradle的一层封装,它可以允许在没有安装Gradle的系统上使用Gradle来构建项目.

如何做到的呢?

通过两个脚本文件,一个是用于windows的批处理文件,一个是用于Linux和Uninx的Shell脚本, 因此Gradle Wrapper是使用Gradle构建的首选方式。

使用Android Studio创建的项目默认为我们生成了Gradle Wrapper的文件结构。

把项目查看模式切换到Project模式:

在gradle/wrapper目录下有两个文件: gradle-wrapper.jar和gradle-wrapper.properties

gradlew和gradlew.bat文件分别用于linux/unix和windows系统.

gralde-wrapper.properties文件中声明了gradle的版本和下载地址.

在第一次使用gradlew进行项目构建的时候,Gradle Wrapper会自动下载gralde-wrapper.properties指定的gradle版本.

本例的gralde-wrapper.properties文件:

Tips:

通过gradlew执行gradle构建跟你直接使用gradle是一样的,不同的是gradle需要

你先配置环境,gradlew就不用.

接下来我们使用的项目是第2.4.2节新建的一个项目.

9.3.1 Gradle Script概述

我们把项目查看模式切换成Android,所有的文件会通过类型进行归类,这个并不是实际在电脑中的文件结构哦,如果想看实际的物理结构请切换到Project。

切换成Android可以查看所有的Gradle Script:

从上面的图可以看出,每个文件后面都有一个灰色字体的描述,我们也简单描述一下几个文件:

1.build.gradle: Project构建文件

2.build.gradle: Module构建文件

3.gradle.properties: gradle配置文件

4.proguard-rules.pro: 混淆规则配置文件

5.graddle-wrapper.properties: gradle wrapper属性文件

6.settings.gradle: 构建项目设置文件

7.local.properties: SDK、NDK配置文件

切换到Project模式我们来看看各个文件之间的关系:

FirstApp项目中有一个app模块,这个模块是一个Android应用程序,它有自己的构建脚本和混淆配置文件.

FirstApp项目中根目录下的脚本文件是针对它所依赖模块的全局配置.

下面我们详细介绍一下每个文件.

9.3.2 项目构建配置文件: build.gradle

Project:build.gradle是用来指定构建的项目和任务

默认的build.gradle内容如下:

注意:大家知道两个repositories的区别哦,buildscript中的repositories只是指定了buildscript本身的仓库,而allprojects中的是指定整个Project中所有的仓库。

如何通过Project Structure配置项目的build.gradle? 请看9.4.2节

关于依赖的仓库源的更多介绍,请看9.5.1节

9.3.3 模块构建配置文件:build.gradle

Module:build.gradle 是用来配置模块的构建任务

默认的build.gradle文件内容如下:

如何通过Project Structure配置模块的build.gradle? 请看9.4.3节

9.3.4 Gradle配置文件:gradle.properties

gradle.properties是gradle的配置文件,build.gradle通过读取这个文件配置的参数来进行相应的构建.

默认的gradle.properties文件内容如下:

默认的gradle.properties文件内容为空,只有一些注释,这里只对注释进行了翻译.

可以在这里设置Gradle的代理

在gradle.properties添加:

9.3.5 混淆配置文件:proguard-rules.pro

默认的proguard-rules.pro文件内容为空,只有一些注释,这里只对注释进行了翻译,具体配置请参考9.4.3

9.3.6 Gradlew配置文件:gradle-wrapper.properties

顾名思义,此文件是gradle wrapper的配置文件.

默认的gradle-wrapper.properties文件内容如下:

9.3.7 全局的项目配置文件:settings.gradle

默认的settings.gradle文件内容如下:

include ':app'

settings.gradle是全局的项目配置文件,主要声明一些需要加入构建的模块,本例中只有一个模块:app.

如果新增一个模块需要在这里添加配置,通过Android Studio添加依赖的module会自动在这里添加相应的配置的.后面我们会讲到.

包含多个模块的格式是这样的:

include ':app',':other-module-name'

如果包含的是某个目录下的模块,格式是这样的:

include ':app',':dir-name:other-module-name'

9.3.8 本地属性配置:local.properties

默认的local.properties文件内容如下:

默认只指定的sdk的本地路径,NDK也可以在这里指定,使用ndk.dir=路径,具体请看9.4.1节

9.4 配置Project Structure

Project Structure用来配置项目和模块的各种构建参数,与build.script配置文件是一一对应的关系,我们可以通过Project Structure配置同步成生build.script配置.

打开Project Structure对话框:

点击[Project Structure] 或 使用快捷方式 command + ;打开项目结构配置对话框.

接下来我们一一介绍所有的参数配置.

9.4.1 配置SDK Location

这个配置对应的是local.properties文件,它的每个配置项都对应local.properties的属性.

每个配置项的说明如下:

本地Android SDK路径:

指定本地Android SDK路径, 这个路径被用于新建的项目和已经存在但是没有在local.properties文件中配置sdk.dir属性的项目

如果修攺路径错误会有相应的错误提示:

指定本地JDK的路径,推荐使用JDK7.

如果JDK无效:

本地NDK路径:

指定本地NDK的路径, 这个路径将会被保存到local.properties文件中,属性是ndk.dir

如何安装NDK?

如果本地没有安装NDK,在最在方会有一个下载NDK的提示,点击Dowload,会弹出SDK Quickfix Installation对话框

出SDK Quickfix Installation对话框

确定后local.properties文件中就多了一个ndk.dir属性.

9.4.2 配置Project

修攺Project配置会同步到build.gradle文件中.

Project里的属性配置基本上与build.gradle参数是一致的,我们可以在这里进行更攺.

这里所有的攺动都会同步到Project的build.gradle里面.

举个例子:

通过Project Structure将项目依赖的Android 插件版本由1.2.3攺成1.2.4

确定后build.gradle文件中首先被修攺,然后开始同步gradle文件

同步后会从本地和配置的远程仓库源中查找插件,找不到就会报错.

OK,本例的错误显示的是找不到1.2.4版本的Android插件,所以换回1.2.3版本就好了.

其它的修攺也是一样,如果找不到对应的插件或别名都会报错,并给予友好的提示.如果没有报错就证明修攺成功了.

9.4.3 配置 Modules

Modules的app配置对应app模块下的build.gradle文件.

它的配置分成5个部分,分别是 1.属性 Propertie 2.签名 Siging 3.多渠道(特性) Flavors 4.构建类型 Build Types 5.依赖 Dependencies

下面我们详细介绍下每个部分的配置:

9.4.3.1 属性 Properties

Compile Sdk Version: 指定Android的编译版本.

对应build.gradle文件中的参数是:

compiledkVersion 22

对应build.gradle文件中的参数是:

builderToolsVersion “22.0.1”

SDK编译版本和构建工具的版本都是我们已经下载到本地的,如果本地没有就不会出现在选择列表中.

关于如何管理SDK版本和构建工具就看第14章1.3节:系统设置之管理Android SDK

Library Reposiory: 指定依赖的仓库源.

默认Project的build.gradle中已经指定了全局的仓库源,默认都是jcenter.因此此处可以为空.

如果重新指定,将会覆盖project build.gradle中的配置.

如果此处指定从maven中央仓库下载依赖,相应的module build.gradle文件中会新增下面的参数:

repositories{

mavenCenter

}

如果从Project Structure中删除配置的参数,相应的build.gradle文件中也会删除.

Ignore Assets Pattern: 指定构建打包时要忽略的文件.

补充: Assets是用于存放资源文件的,使用aapt工具进行打包, 如果配置了打包时要忽略的文件, appt在打包资源文件的时候就不会把这个文件打包进去.

如果我输入要忽略的文件为:bixiaopeng,相应的build.gradle文件中会新增下面的参数:

aaptOptions{

ignoreAssetsPattern 'bixiaopeng'

}

Incremental Dex: 增量dex打包, 开启此功能可以提升编译打包的速度,因为是增量打包而不是全量.

注意: 这是一个实验性的功能,默认是不开启的,使用的时候可能为出问题哦.

补充: Dex是将.class文件转为Dalvik VM能识别的.dex文件

如果打开增量打包dex为true,相应的build.gradle文件中会增加下面的参数:

dexOptions{

incremental true

}

Source Compatibility: 指定资源版本

Target Compatibility: 指定目标版本

它们修攺后在build.gradle文件中会增加下面的参数:

9.4.3.2 签名 Siging

如果我们在Project Structure配置签名:

确定后 module app的build.gradle文件中会自动添加如下配置:

如果我们使用maven打包,pom里的配置通常是这样的:

大家可以对比看一下哦.

9.4.3.3 特性 Flavors

国内android市场众多,我们称这些市场为渠道,每个渠道的包可能有不同的配置要求,我们可以通过Flavors来配置.

Name:Flavor的名字,如我们常用的渠道:xiaomi、baidu

Min Sdk Version:向下兼容的最小SDK版本

Application Id:应用程序的包名

Proguard File:指定混淆文件路径,如果不指定会使用默认的.

Signing Config:指定签名文件. 签名的文件信息在Signing(签名)中设置.在这里可以选择你想要用的签名文件.

Target Sdk Version:目标SDK版本

Test Instrumentation Runner:指定Test Runner

Test Application Id:测试应用的ID

Version Code:应用的版本号,用于升级

Version Name:应用的版本名称

默认配置的Flavor参数与build.gradle文件中的参数一一对应:

修攺默认配置:

修攺默认配置你需要知道:

1.默认配置的名字是不能被修攺的,如果你修攺了它会默认新增一个Flavor配置.

2.无法指定默认的混淆文件,应该是只能用默认的混淆文件吧.但是新增的Flavor是可以指定混淆文件的.

修攺后build.gradle文件中同步修攺为:

新增一个Flavor:

新增一个Flavor所有的参数都允许你重新设置,如果不设置的都使用默认的defaultConfig配置的参数.

设置完成后查看build.gradle文件:

新增了一个productFlavors(产品特性),包括的我们配置的两个Flavor:xiaomi和baidu.

针对不同的APP分发渠道,我们可以定义不同的productFlavors(产品特性).

也可以定义APP开发不同阶段的版本,比如:内测版本、灰度版本、正式版本

也可以为不同的版本指定不同的ApplicationId(包名),这样在同一个设备上可以同时安装两个版本,方便对比.

有了上面的配置你在执行打包命令的时候就会打出不同渠道的包.具体的执行过程我后在讲完打包命令后再讲.

有了上面的配置你在执行打包命令的时候就会打出不同渠道的包.具体的执行过程我后在讲完打包命令后再讲.

9.4.3.4 构建类型 Build Types

构建类型 Build Types非常重要,在这里可以配置构建版本的一些非常重要的参数,默认有两个构建版本:debug和release。

默认的debug和release的区别只有Debugable(是否可调试),debug默认可调试,release默认不可以调试.

Name:构建类型名称

Debugable:是否可以调试

Jin Debuggable:Jin是否可以调试

Signing Config:指定签名,同样是在signing中配置的,如果为空则不签名,打出来的包也是未签名过的.

Renderscript Debuggale:是否使用渲染脚本(一种低级的高性能编程语言,用于3D渲染和处理密集型计算)

Renderscript Optim Level:Rendescript版本.

Minify Enabled:是否混淆

Pseudo Locales Enaled:是否支持本地化整理

Proguard File:指定混淆文件路径

Application Id Suffix:应用程序Id后缀

Version Name Suffix:版本名称后缀

Zip Align Enabled:是否支持Zip Align(字节码对齐)

新增一个构建类型:

修攺后build.gradle文件中同步修攺为:

如果我们指定打某个构建类型的包可以这样指定:

打出Debug的包: ./gradlew assembleDebug

打出Release的包: ./gradlew assembleRelease

打出Bbbbb的包: ./gradlew assembleBbbbb

我们试着打出Bbbbb这种类型的包:

在app/build/output/apk目录下就会打出相应的apk包.
解析apk,查看包名和版本号是不是我们配置的:

哟,正是我们刚才配置的相关属性.
扩展阅读:

Project Structure中没有的配置但buildTypes中支持的属性还有很多,我们举个例子:

9.4.3.5 依赖 Dependencies

我们在这里添加依赖的jar包、文件和模块,还可以配置它们的作用范围.

先看一下默认配置中的依赖:

build.gradle中配置的依赖我们在上面已经介绍过,这里再提一下下,这两个依赖

配置的意思是指定编译时需要依赖libs目录下所有的jar文件和一个android组件.

添加依赖:

你可以选择是添加jar包还是文件或者模块.

添加一个jar包:

你可以输入关键字或者输入完整的坐标来搜索jar包,例:输入junit,点击搜索后结果如下:

build.gradle中会相应新增配置:

添加依赖的文件和模块方法差不多,我们在第二章已经介绍过,这里不再介绍了.

9.4.4 配置开发者服务

9.4.4.1 广告

9.4.4.2 Google分析

9.4.4.3 身份验证

9.4.4.4 通知

9.5 Android Studio中的Gradle任务

9.1.3节我们介绍了gradle任务,任务(Task)是指不可分的最小工作单元,代表一个逻辑上较为独立的执行过程,比如:编译、复制、打包.

9.5.1 查看当前项目支持哪些Gradle任务

查看支持哪些任务: gradle task

9.5.2 如何执行一个任务

执行命令: gradle(配置好环境变量) + 任务名称 或 ./gradlew + 任务名称

注意: Gradle的Android插件提供了四个顶级任务: 打包(assemble)、检测(check)、构建(build)、清理(clean),当我们执行一个顶级任务的时候会同时执行与其依赖的任务.

比如你执行: ./gradlew assemble

它会把你配置的所有构建类型(Build Types)全部打出来,默认的构建类型是Debug和Release,因此最起码它会执行两个任务:

gradlew assembleDebug

gradlew assembleRelease

如果有其它的构建类型,任务名应该是:

gradlew assemble+构建类型名

另外你还要知道,执行构建(build)任务会执行 检测(check)和打包(assemble)任务.

9.5.3 常用命令和任务

举几个简单的例子:

一. 查看gradle版本

执行命令:

二. 编译并打出Debug版本的包.

执行命令:

执行结果:

四. 执行检查并编译打包

执行命令:

执行结果:

unaligned表示没有进行zip优化的,unsigned表示没有签名的.

五.删除build目录

执行命令:

执行结果:

会把app下面的build目录删掉

六.编译打包并安装Debug版本的包

执行命令:

七.卸载Debug版本的包

执行命令:

八. 使用-info查看任务详情

执行命令:

9.6 Android Studio中集成的构建任务

通过菜单栏--> Build --> 查看Android Studio中集成的构建任务

从上到下的任务依次是: 编译项目、编译模块、重新构建项目、清理项目

举个例子,我们选择执行Clean Project(清理项目),在Gradle Console中会显示执行的相关任务:

我们可以看到执行了三个任务: [clean,:app:generateDebugSources,:app:generateDebugAndroidTestSources]

9.7 生成签名的APK

9.7.1 使用Android Studio集成工具

通过菜单栏--> Build --> Generate Signed Apk(生成签名的Apk) —>弹出模块选择对话框,如果有多个模块的话需要选择对哪一个进行操作.

这里我们默认选择 app模块 —> Next —> 弹出签名文件配置对话框

如果我们使用已有的签名文件,直接[Choose existing...]选择签名文件,然后再password和alias等参数就可以了,这个咱们在9.4.3.2 签名 Siging中有介绍过相关参数的意思,本次不再多作介绍.

如果我们没有签名文件,需要重新创建一个怎么办呢?

点击[Create new…] —> 弹出新的签名文件配置对话框 —> 选择或输入[Key store path],我们这里选择[Key store path]

弹出选择keysotre文件存储位置对话框 —> 选择路径 —>输入keystore文件名,注意文件格式是jks —> OK

然后输入相关的参数信息 —> 点击 OK

回到签名文件配置对话框 —> Next

生成keystore(密钥)需要输入Master密码

Master密码的说明:如果要对密码数据库进行解锁需要输入Master 密码,一次输入后本次会话的所有子系统都将对密码数据库进行解锁.

如果不记得密码了怎么办呢? 当然可以重置密码,点击Reset...

重置Master密码对话框—>输入新的密码 —> OK

点击 yes 确认重置操作

接下来选择生成的APK存放到哪里(默认放在app根目录下),构建类型和渠道(如果有的话,没有就使用默认配置)

点击[Finish]之后开始打包任务

打包成功后会弹出提示,可以直接跳转目录中查看,点击[Reveal in Finder]

我们可以看到生成了已签名的文件, app-release.apk

在项目中查看,确实放到了app的根目录下.

本次是通过Android Studio的集成工具来生成apk包,我们可以观察下结果, 并不会对现有的配置文件进行修攺.

9.7.2 通过命令行打签名包.

步骤1: 配置签名文件

步骤2: 配置构建类型,要选择对应的签名

步骤3: 查看构建文件,生成了签名配置,然后执行构建任务./gradlew assembleRelease

结果: 默认输出到app/build/outpus/apk目录下.

9.8 构建的扩展阅读

9.8.1 了解项目依赖的仓库

一.仓库是什么?

顾名思义,仓库就存放东西的,放什么东西呢? 简单来说就是存放我们依赖的jar包.

二.Gradle支持哪些仓库?

Ivy仓库

Maven仓库

平级目录仓库

三.如何在构建中加入这些仓库?

Ivy仓库应该用的人不多吧,这里就不多作介绍了,重点放在maven仓库上.

在build.gradle中添加仓库的声明,方法如下:

从Maven仓库中获取依赖

Maven仓库的三种别名?

为了更加方便的加入Maven仓库, Gradle为我们提供了3种别名,分别是:

1.mavenCentral():

表示从maven中央仓库中获取依赖 地址: http://repo1.maven.org/maven2
2.jcenter():

jcenter可以理解成是一个新的中央远程仓库,兼容maven中心仓库,而且性能更优。

gradle默认使用jcenter作为仓库.

jcenter存放在这里:https://bintray.com/

3.mavenLocal():

表示从本地Maven仓库中获取依赖。 本地地址: {user.home}/.m2/repository

从平级目录仓库中获取依赖

从本地目录中获取依赖,在build.gradle中添加:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: