第一章欢迎来到AndroidStudio

1.1介绍AndroidStudio

AndroidStudio 是一个基于 IntelliJIDEA 的新的 Android 开发环境。与 EclipseADT 插件相似, AndroidStudio 提供了集成的 Android 开发工具用于开发和调试。除了你期望的 IntelliJ 的能力, AndroidStudio 还提供 :

[图片]基于Gradle的灵活的构建系统[图片]支持构建变种版本和生成多个APK文件[图片]支持通过代码模板来帮助你建立通用的app功能[图片]支持丰富的布局编辑器,可拖放主题编辑[图片]支持lint工具来捕获性能、可用性、版本兼容等问题[图片]支持代码混淆和应用签名[图片]内置的google云平台支持,因此很容易整合google云消息和app引擎

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

1.2安装AndroidStudio

1.2.1AndroidStudio系统要求:

屏幕分辨率最小1280x800最小2GBRAM,4GBRAM最佳Oracle®JavaDevelopmentKit(JDK)7

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

1.2.2AndroidStudio下载:

下载地址:

http://developer.android.com/sdk/index.html

三大操作系统全部支持:

1.2.3MacOS安装配置:

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

下载完成后开始安装:

Linux/windows上安装配置AndroidStudioMac上差不多,在此就不多介绍了。

1.3打开AndroidStudio

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

点击[OpenanexistingAndroidStudioproject]来选择一个本地的AndroidStudio项目

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

1.3.2 导入一个 Android 代码示例

1.点击[importanAndroidcodesample]进入示例代码选择界面

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

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

4.运行应用程序

5.手机上查看运行结果

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

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

1.点击[CheckoutprojectfromVersionControl],选择[Github]

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

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

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

4.CloneGithub上的项目

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

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

1.3.4导入一个项目(EclipsADT/Gradle)

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

1.4配置AndroidStudio

AndroidStudio欢迎界面点击[Configure]进入配置界面

1.4.1配置界面

配置界面显示如下:

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

1.4.2导出设置文件

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

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

1.4.3项目默认配置

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

1.5

帮助文档

第二章文件管理

2.1操作界面概览

2.2关于AndroidStudio

2.2.1配置检测更新

.检测当前版本更新

检测AndroidStudio的更新我们通过:AndroidStudio-->CheckforUpdates…

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

.配置更新通道

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

菜单-->AndroidStudio-->CheckforUpdates...

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

.4个版本的区别:

StableChannel:稳定版本

BetaChannel:测试版本

DevChannel:开发版本

CanaryChannel:金丝雀版本

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

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

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

.版本安装更新过程

更新到DevChannel的最新版本的例子:

假如有新版本可以更新:

点击[UpdateandRestart]后会开始更新并重启:

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

OK 后就可以啦!

2.3文件管理功能概览

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

2.4新建和导入

2.4.1新建一个项目

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

一是通过启动界面:StartanewAndroidStudioproject

二是通过打开的AndroidStudio-->菜单-->File-->New-->CreateNewProject

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

新建一个项目

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

2.选择目标设备

MiniSDK选择

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

就越高.

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

helpmechoose

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

合适的SDK版本.

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

3.选择一个模板

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

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

4.自定义Activity

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

5.开始创建项目

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

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

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

不要怕,AndroidStudio会给出相应的解决方案,点击【OpenMessagesView】可打开错误提示界面

上面的错误是 com.android.support:appcompat-v7:22.+ 解析失败

看一下这个组件是干什么用的,点击[ShowinProjectStructuredialog]

是编译的时候用到的.

OK,那我们安装这个组件,点击【InstallRepositoryandsyncproject

安装过程如下:

7.运行

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

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

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

AndroidStudio中的Project相当于EclipseWorkspace,Module相当于EclipseProject.

EclipseAndroidStudio项目中相关名字的对比如下:

2.4.3AndroidStudio 项目文件结构

AndroidStudio项目有八种查看文件的模式:

下面我们一一介绍:

.Project模式

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

.Packages模式

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

.Scratches模式

Scratches模式只显示草稿文件.

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

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

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

.Android模式

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

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

.ProjectFiles模式

类似Eclipse的项目结构形式.

.Problems模式

仅显示报错的文件结构.

.Production模式

仅显示生产文件结构 .

.Tests模式

仅显示测试文件结构 .

2.5打开、关闭项目/导入、导出设置

如图这些功能 , 我们在第一章已经全部介绍过 , 这里再简单介绍几个。

2.62.5.1清空最近打开的项目列表

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

2.8步骤如下:

菜单-->File-->OpenRecent-->ClearList

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

2.6文件同步

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

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

2.7清除缓存/重启AndroidStudio

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

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

2.8 导出到 HTML

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

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

导出后的结果 :

2.9添加到收藏

操作步骤:File--AddtoFavorites(添加到收藏)

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

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

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

如何打开收藏列表呢?

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

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

2.10切换文件编码方式

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

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

2.11切换行分隔符

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

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

2.12 使文件只读

操作步骤:File--MakeFileRead-only(使文件只读)

2.13使用省电模式

操作步骤:File--PowerSaveMode(省电模式)

第三章编辑

3.1编辑概览

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

3.2复制粘贴

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

.CopyasPlainText(复制为纯文本)

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

.CopyReference(复制参考)

.PastefromHistory(从历史粘贴)

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

3.3 查找

.查找概览

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

.结构搜索/替换

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

操作步骤:Edit--Find--SearchStructurally/ReplaceStructurally(结构搜索/替换)

打开[SearchStructurally]

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

编辑变量

历史记录

复制现有模板

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

.查找设置

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

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

3.4Macros()

.什么是宏?

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

AndroidStudio中支持录制宏的功能

.录制回放宏

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

第一步:Edit-->Macros-->StartMacrosRecording-->AndroidStudio右下角显示开始录制提示

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

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

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

第五步 : 定义快捷键

AndroidStudio-->Keymap--Macros--找到我们刚才录制的宏[AutoSaveAndRun]

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

确定后显示如下

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

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

.编辑宏

Edit-->Macros-->EditMacros

3.5使用列选择模式

操作步骤:Edit-->ColumnSelectionMode(列选择模式)

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

3.6扩大/缩小选择范围

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

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

3.7合并两行内容

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

3.8 自动补全当前的语句

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

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

第四章视图

4.1视图概览

4.2 工具窗口管理

操作步骤:View--ToolWindows(工具窗口管理)

4.3 快速查看某个变量或者方法的定义

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

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

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

4.5快速查看文档说明

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

4.6查看参数信息

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

4.7查看方法的背景信息

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

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

4.8查看最近打开过的文件

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

4.9查看最近攺变过的文件

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

4.10查看最近的攺动

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

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

4.11对比两个文件

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

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

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

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

切换对比显示方式

其它的设置

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

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


4.13对比剪切版上的内容
操作步骤:View--ComparewithClipboard(对比剪切版上的内容)

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



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

4.14

快速切换方案

操作步骤:View--QuickSwitchScheme(快速切换方案)



4.15窗口工具是否显示

4.16 进入演示 / 免打扰 / 全局模式

View--EnterPresentationMode

View--EnterDistractionFreeMode

View--EnterFullScreen

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

第五章导航

5.1导航概览

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

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

5.2跳转到类文件

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

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

操作窗口介绍

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

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

此功能不支持查找其它文件类型,不支持查找方法

5.3跳转至指定的文件或目录

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

5.4跳转到指定文件或方法

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

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

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

和折叠类和方法的代码,

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

举个例子:

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

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

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

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

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

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

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

举个例子:

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

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

5.6跳转到某一行

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

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

举个例子:

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

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

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

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

第四步:点击OK

结果:跳转到第123

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

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

5.7光标前后快速跳转

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

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

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

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

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

5.9书签的使用

5.9.1什么是书签?

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

5.9.2书签功能

AndroidStudio中提供的书签功能

5.9.3标记书签

也可以使用快捷键Fn+F3

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

5.9.4使用助记符标记书签

操作步骤:Navigate--Bookmarks--ToggleBookmarkwithMnemonic或使用快捷方式Fn+Opetion+F3

5.9.5管理书签

方法一:

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

修攺书签描述

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

方法二:

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

5.10

跳转到导航栏

操作步骤:Navigate--JumptoNavigationBar或使用快捷键Command+↑

5.11跳转到声明

什么是声明(Declaration)?

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

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

举个例子:

5.12跳转到实现

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

5.13跳转到类型声明

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

5.14跳转到继承方法

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

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

举个例子:

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

5.15.1跳转到测试类

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

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

第三步:选择要跳转的类

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

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

5.15.2搜索测试类

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

[

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

5.15.3直接运行选中的测试类

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

5.15.4 创建测试类

在弹出的测试类选择界面,选择Createnewtest,弹出下面的创建界面:

选择测试类需要继承的类

OK之后,再选择要生成的setUptearDown方法

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

5.15.5跳转到被测类

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

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

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

5.16跳转到相关联的文件

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

举个例子:

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

弹出相关文件选择对话框

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

5.17打开文件结构

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

5.17.1显示匿名内部类

5.17.2显示所有继承的方法

5.17.3输入时缩小

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

勾先输入时缩小:

不勾先输入时缩小:

5.18显示类的层次结构图

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

5.19显示方法的层次结构图

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

举个例子:

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

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

操作步骤:

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

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

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

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

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

5.22在方法间前后跳转

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

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

5.23翻页

向上翻页:Fn+↑

向下翻页:Fn+↓

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

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

第六章代码工具

6.1代码工具概览

6.2快速覆写父类的方法

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

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

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

6.3快速实现接口

快速实现接口有两种方法

方法一:是通过Code--OverrideMethod或者使用快捷方式Control+O,在弹出的界面选择selectmethodtoimplement

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

选择后的结果显示如下:

6.4快速实现代理方法

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

6.4.1代理模式是什么

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

举个例子:

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

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

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

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

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

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

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

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

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

C.真实角色(明星)

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

6.4.2代理模式实例

新建3个类文件:

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

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

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

6.4.3快速生成代理方法

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

方法一:

操作步骤:Code--DelegateMethods

方法二:

操作步骤:

Code--Generate--DelegateMethods

或使用快捷方式Command+N--DelegateMethods

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

后续的操作同方法一

6.5快速生成构造函数

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

6.6快速生成GetterSetter方法

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

6.7快速覆写equalshashcode方法

6.7.1equalshashcode方法简单介绍

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

equals方法:

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

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

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

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

hashcode方法:

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

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

b.一般用户不会调用:

比如在hashmapkey是不可以重复的,它在判断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信息

操作步骤:AndroidStudio--Preferences--Copyright--CopyrightProfiles

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

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

我的配置信息如下:

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

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

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

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

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

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

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

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

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

6.10 快速提取或删除语句

AndroidStudio提供了一个方法,可以从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基本自动补全

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

如果在你输入的时候没有自动触发,可以通过如下方式触发基本的自动补全 :

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

6.11.2智能自动补全

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

操作步骤如下:

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

6.11.3循环扩展词

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

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

操作方法如下:

Code--Completion--cyclicexpandwordcyclicexpandword(backward)

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

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

6.11.4更攺快捷方式

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

修攺方法如下:

6.12展开和收缩代码

6.12.1展开和收缩代码

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

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

6.12.2递归展开和收缩代码

递归展开代码:Code--Folding--ExpandRecursively或使用快捷方式optionCommand+

递归收缩代码:Code--Folding--CollapseRecursively或使用快捷方式optionCommand-

6.12.3全部展开和收缩代码

全部展开代码:Code--Folding--ExpandAll或使用快捷方式ShiftCommand+

全部收缩代码:Code--Folding--CollapseAll或使用快捷方式ShiftCommand-

6.12.4展开和收缩注释

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

展开代码注释:Code--Folding--Expanddoccomments

收缩代码注释:Code--Folding--Collapsedoccomments

6.12.5指定展开层级

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

指定展开代码层级:Code--Folding--Expandtolevel

指定全部展开代码的层级:Code--Folding--Expandalltolevel

6.12.6折叠/展开选中区域

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

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

6.12.7折叠代码块

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

6.13使用缩写快速插入代码

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

6.13.1常用的缩写

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

1.Code--InsertLiveTemplate在弹出的列表中选取缩写

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

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

类中常用的缩写如下:

方法中常用的缩写如下:

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

使用模板来包围

Code--SurroundwithLiveTemplate或使用快捷方式option+command+j

6.13.2查看所有的缩写

进入Preferences--Editor--LiveTemplates

6.13.3编辑LiveTemplates

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

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

6.14注释掉代码

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

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

6.15优化你的代码

6.15.1格式化代码

操作步骤:

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

举个例子:

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

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

配置优化选项:

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

格式化文件:

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

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

6.15.2自动缩进代码

操作步骤:

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

6.15.3优化导入

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

操作步骤:

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

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

6.15.4重新排列代码

操作步骤:

Code--RearrangeCode

6.16移动你的代码

6.16.1上下移动代码语句

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

Code--MoveStatementDown快捷键:shift+command+↑

Code--MoveStatementUp快捷键:shift+command+↓

6.16.2上下移动一行

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

Code--MoveLineDown快捷键:option+command+↑

Code--MoveLineUp快捷键:option+command+↓

第七章代码检查

7.1代码检查简介

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

AndroidStudio代码检查其实就是执行代码检查

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

目前支持的语言有AndroidJavaXMLHTML等等。

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

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

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

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

发现可能的错误;

定位死代码;

检测性能问题;

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

与编码准则和标准一致;

符合规范;

7.2代码检查

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

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

操作步骤:

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

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

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

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

7.2.2查看代码检查结果

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

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

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

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

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

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

 按严重程度分组 

 按目录分组

高亮显示不同和仅显示不同

与前一个版本对比,显示或过滤出新增的文件的问题

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

检查没用使用的声明选项

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

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

7.2.4分析检查出的问题

举几个简单的例子:

JAVA:无用声明

Android:未知属性

AndroidLint:版本兼容性问题

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

lint 暂时先介绍这一点 , 后面会有详细介绍。

7.3Lint使用说明

7.3.1Lint是什么

Lint是谷歌从Android4.1版本开始提供的代码扫描工具;

lint工具的代码扫描工作流

为什么要用Lint?

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

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

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

认识IssueCategory

Issue是什么?

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

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

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

Fatal/Error/Warning/Information/Ignore

Issue(问题)的忽略操作其实也就是降低它的SeverityIgnore

Category是什么?

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

Correctness(正确定性)

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

Security(安全)

Performance(性能)

Usability:Typography(可用性:字体)

Usability:Icons(可用性:图标)

Usability(可用性)

Accessibility(可访问性)

Internationalization(国际化)

Bi-directionalText(双向文字)

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

两种使用场景

AndroidLint2种使用场景:IDE和命令行

AndroidStudio/Intellijidea/Eclipse/Jenkins都有AndroidLint的插件支持,本书会重点介绍

AndroidStudiolint的使用,也会稍带介绍lint命令行的使用。

7.3.2Lint会检查哪些错误

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

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

配置文件错误

更多请参考:http://tools.android.com/tips/lint-checks

7.3.3Lint命令行使用方法介绍

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

7.3.4Lint命令行参数用法举例

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

2. 如何禁用某项检查?

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

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

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

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

7.如何检查本地项目?

8. 如何检查网络项目?

7.3.5AndroidLint常规检查项

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

Correctness(正确定性)

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

Security(安全)

Performance(性能)

Usability:Typography(可用性:字体)

Usability:Icons(可用性:图标)

Usability(可用性)

Accessibility(可访问性)

Internationalization(国际化)

Bi-directionalText(双向文字)

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

.Correctness【正确性】

1.DuplicatedIds:重复的id

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

2.NewApi:API

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

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/Activityexportedtrue时,设置一个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的线性布局,可被采用CompoundDrawableTextView代替。

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

4.UseSparseArrays:使用Sparse数组

尽量用AndroidSparseArray代替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”

可以设置themebackgroundnull来避免。

10.UselessLeaf/UselessParent:Viewview的父亲没有用

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

1.TypographyDashes:破折号

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

2.TypographyEllipsis:省略号

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

3.TypographyFractions:字体部分

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

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

1.IconNoDpi:

Iconnodpi和指定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:内容描述

ImageViewImageButton应该提供contentDescription

.Internationalization【国际化】

1.HardcodeText:硬编码文本

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

2.EnforceUTF8:强制UTF8编码

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

...

更多内容请参考:

http://blog.csdn.net/thl789/article/details/8037333

http://tools.android.com/tips/lint

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

7.4配置代码检查规则

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

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

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

我们可以看到代码检查分类 , 展开分类可以查看具体的检查项 , 我们挑几个来讲讲。

7.4.1检查项的严重程度配置

点击Editseveritties来编辑严重程度

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

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

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

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

7.4.2 检查项的应用范围

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

7.4.3

Android 检查项简介

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

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

1.验证AndroidXML中的资源引用

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

3.报告两类问题:

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

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

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

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

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

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

7.4.4AndroidLint检查项简介

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

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

7.4.5共享代码检查规范

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

7.5代码清理

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

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

7.5.1用法介绍:

操作步骤:

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

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

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

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

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

7.5.2实例:自动清理代码

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

7.6指定检查代码规则

7.6.1用法介绍:

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

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

点击选择检查规则之后会弹出检查范围指定窗口 , 指定后就执行检查啦 !

7.6.2实例:检查无用的资源文件

Analyze-->RunInspectionbyName-->弹出规则输入框-->输入规则名(unusedresources)

检查整个项目

检查结果如下 :

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

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

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

7.7.1用法介绍:

菜单-->Analyze-->ConfigureCurrentFileAnalysis...-->弹出配置窗口

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

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

Syntax:语法(仅检查语法)

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

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

7.7.2实例:配置举例

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

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

7.8查看本地代码检查结果

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

这些导出的文件我们就可以方便的打包共享给有需求的同学了。

那么问题来了,拿到这些文件的同学如何打开呢?

很简单,followme!

菜单-->Analyze-->ViewOfflineInspectionResults-->弹出选择对话框

导入后的显示:

7.9自动添加@Nullable@NotNull注解

7.9.1为什么要使用@Nullable@NotNull

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

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

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

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

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

7.9.2实例演示

第一步:菜单-->Analyze-->InferNullity-->弹出检查范围选择对话框-->选择CurrentFile-->OK

检查结果如下 :

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

结果添加@NotNull注解。

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

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

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

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

importorg.jetbrains.annotations.NotNull;

importorg.jetbrains.annotations.Nullable;

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

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

加上注解的变量和参数

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

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

7.10分析依赖

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

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

7.10.1分析依赖

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

分析结果如下 :

7.10.2分析反向依赖

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

菜单-->Analyze-->AnalyzeBackwardDependences-->指定分析范围

7.10.3分析模块依赖

菜单-->Analyze-->AnalyzeModuleDependences

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

7.10.4分析循环依赖

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

菜单-->Analyze-->AnalyzeCyclicDependences

7.11分析数据流

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

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

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

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

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

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

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

7.11.1我从哪儿来?

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

7.11.2我要到哪儿去?

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

7.12分析堆栈

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

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

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

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

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

第八章重构

8.1重命名

8.1.1重命名类

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

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

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

弹出重命令选择对话框:

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

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

点击Preview,查看结果:

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

8.1.2重命名变量

重命名变量,方法同上

8.1.3重命名文件

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

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

8.2更改方法签名

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

使用方法如下:

1.光标定位在方法名上

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

3.指出对话框

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

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

8.3迁移变量类型

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

使用方法:

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

实例介绍:

有两个文件Book.javaBookStore.java

执行迁移

8.4转成静态方法

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

使用方法:

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

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

3. 点击预览 (Preview)

4.点击DoRefactor

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

8.5 转成实例方法

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

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

举个例子:

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

1.光标定位在initMethod方法上

2. 菜单 -->Refactor-->ConverttoInstanceMethod--> 弹出对话框

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

Visibility:可见性

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

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

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

第九章构建

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

9.1认识Gradle

9.1.1Gradle是什么?

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

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

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

Groovy是什么?

Groovy是一种基于JVMJava虚拟机)的敏捷开发语言,它结合了PythonRubySmalltalk的许多强大的特性,

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

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

9.1.2为什么要用Gradle

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

Gradle有以下特点:

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

9.1.3Gradle中的ProjectTaskPlugin

理解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)对于只有一个项目的构建而言是可选的,如果我们的构建中包含多于一个项目,那么它就是必须的,因为它描述了哪一个项目参与构建。

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

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

9.2配置Gradle环境

9.2.1Mac上配置Gradle环境

.下载gradle

1.1下载地址:http://gradle.org/downloads

1.2下载最新版本:gradle-2.3(当前最新版为2.3)

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

.配置环境变量

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

2.2编缉.bash_profilevim~/.bash_profile

2.3配置环境变量:

2.3. 使配置立即生效 :source~/.brash_profile

.查看配置是否成功

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

9.2.2AndroidStudio中的GradleWrapper

GradleWrapper是什么?

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

如何做到的呢?

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

使用AndroidStudio创建的项目默认为我们生成了GradleWrapper的文件结构。

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

gradle/wrapper目录下有两个文件:gradle-wrapper.jargradle-wrapper.properties

gradlewgradlew.bat文件分别用于linux/unixwindows系统.

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

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

本例的gralde-wrapper.properties文件:

Tips:

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

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

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

9.3.1GradleScript概述

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

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

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

1.build.gradle:Project构建文件

2.build.gradle:Module构建文件

3.gradle.propertiesgradle配置文件

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

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

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

7.local.properties:SDKNDK配置文件

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

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

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

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

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

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

默认的build.gradle内容如下:

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

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

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

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

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

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

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

9.3.4Gradle配置文件:gradle.properties

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

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

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

可以在这里设置Gradle的代理

gradle.properties添加:

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

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

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

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

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

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

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

include':app'

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

如果新增一个模块需要在这里添加配置,通过AndroidStudio添加依赖的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配置ProjectStructure

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

打开ProjectStructure对话框:

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

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

9.4.1配置SDKLocation

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

每个配置项的说明如下:

本地AndroidSDK路径:

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

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

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

如果JDK无效:

本地NDK路径:

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

如何安装NDK

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

SDKQuickfixInstallation对话框

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

9.4.2配置Project

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

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

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

举个例子:

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

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

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

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

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

9.4.3配置Modules

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

它的配置分成5个部分,分别是1.属性Propertie2.签名Siging3.多渠道(特性)Flavors4.构建类型BuildTypes5.依赖Dependencies

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

9.4.3.1属性Properties

CompileSdkVersion:指定Android的编译版本.

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

compiledkVersion22

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

builderToolsVersion“22.0.1”

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

关于如何管理SDK版本和构建工具就看第141.3:系统设置之管理AndroidSDK

LibraryReposiory:指定依赖的仓库源.

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

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

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

repositories{

mavenCenter

}

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

IgnoreAssetsPattern:指定构建打包时要忽略的文件.

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

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

aaptOptions{

ignoreAssetsPattern'bixiaopeng'

}

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

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

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

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

dexOptions{

incrementaltrue

}

SourceCompatibility:指定资源版本

TargetCompatibility:指定目标版本

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

9.4.3.2签名Siging

如果我们在ProjectStructure配置签名:

确定后moduleappbuild.gradle文件中会自动添加如下配置:

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

大家可以对比看一下哦.

9.4.3.3特性Flavors

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

Name:Flavor的名字,如我们常用的渠道:xiaomibaidu

MinSdkVersion:向下兼容的最小SDK版本

ApplicationId:应用程序的包名

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

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

TargetSdkVersion:目标SDK版本

TestInstrumentationRunner:指定TestRunner

TestApplicationId:测试应用的ID

VersionCode:应用的版本号,用于升级

VersionName:应用的版本名称

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

修攺默认配置:

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

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

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

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

新增一个Flavor:

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

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

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

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

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

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

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

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

9.4.3.4构建类型BuildTypes

构建类型BuildTypes非常重要,在这里可以配置构建版本的一些非常重要的参数,默认有两个构建版本:debugrelease

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

Name:构建类型名称

Debugable:是否可以调试

JinDebuggable:Jin是否可以调试

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

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

RenderscriptOptimLevel:Rendescript版本.

MinifyEnabled:是否混淆

PseudoLocalesEnaled:是否支持本地化整理

ProguardFile:指定混淆文件路径

ApplicationIdSuffix:应用程序Id后缀

VersionNameSuffix:版本名称后缀

ZipAlignEnabled:是否支持ZipAlign(字节码对齐)

新增一个构建类型:

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

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

打出Debug的包:./gradlewassembleDebug

打出Release的包:./gradlewassembleRelease

打出Bbbbb的包:./gradlewassembleBbbbb

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

app/build/output/apk 目录下就会打出相应的 apk .

解析apk,查看包名和版本号是不是我们配置的:

, 正是我们刚才配置的相关属性 .

扩展阅读:

ProjectStructure中没有的配置但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.2Google分析

9.4.4.3身份验证

9.4.4.4通知

9.5AndroidStudio中的Gradle任务

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

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

查看支持哪些任务:gradletask

9.5.2如何执行一个任务

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

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

比如你执行:./gradlewassemble

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

gradlewassembleDebug

gradlewassembleRelease

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

gradlewassemble+构建类型名

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

9.5.3常用命令和任务

举几个简单的例子:

.查看gradle版本

执行命令:

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

执行命令:

执行结果:

.执行检查并编译打包

执行命令:

执行结果:

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

.删除build目录

执行命令:

执行结果:

会把app下面的build目录删掉

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

执行命令:

.卸载Debug版本的包

执行命令:

.使用-info查看任务详情

执行命令:

9.6AndroidStudio中集成的构建任务

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

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

举个例子,我们选择执行CleanProject(清理项目),GradleConsole中会显示执行的相关任务:

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

9.7生成签名的APK

9.7.1使用AndroidStudio集成工具

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

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

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

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

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

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

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

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

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

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

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

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

点击yes确认重置操作

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

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

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

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

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

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

9.7.2通过命令行打签名包.

步骤1:配置签名文件

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

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

结果:默认输出到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中添加:

更多相关文章

  1. View类xml属性、方法
  2. android 实用代码片段整理
  3. 【Android 开发】:UI控件之显示图片控件 ImageView 的使用方法
  4. [代码分享] 乐淘Android客户端源码
  5. Android与JavaScript方法相互调用!
  6. 在Ubuntu上下载编译安装Android最新内核源代码

随机推荐

  1. MySQL日志设置及查看方法
  2. MYSQL 一个巧用字符函数做数据筛选的题
  3. ubuntu系统中Mysql ERROR 1045 (28000):
  4. MySQL之递归小问题
  5. mysql 求解求2个或以上字段为NULL的记录
  6. MySQL使用变量实现各种排序
  7. MySQL 消除重复行的一些方法
  8. mysql查询表里的重复数据方法
  9. Mysql一些复杂的sql语句(查询与删除重复
  10. Mac下安装mysql5.7.18的详细步骤