Android学习记录——1.Android Studio

文章目录

  • 1.了解全貌——Android王国简介
    • 1.1 Android系统架构
    • 1.2 Android已发布的版本
    • 1.3 Android应用开发特色
  • 2.搭建开发环境
    • 2.1 准备所需要的工具
    • 2.2 搭建开发环境
  • 3.创建第一个Android项目
    • 3.1 创建Hello World项目
    • 3.2 启动模拟器
    • 3.3 运行HelloWorld
    • 3.4 分析Android程序
    • 3.5 详解项目中的资源
    • 3.6 详解build.gradle文件
  • 4.日志工具的使用
    • 4.1 使用Android的日志工具Log
    • 4.2 为什么使用Log而不使用System.out

1.了解全貌——Android王国简介

1.1 Android系统架构

Android大致可以分为四层架构:Linux内核层、系统运行库层、应用框架层和应用层

  1. Linux内核层
    Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等。
  2. 系统运行库层
    这一层通过一些C/C++库来为Android系统提供了主要的特性支持。同样在这一层还有Android运行时库,它主要提供了一些核心库,能够允许开发者使用Java语言来编写Android应用。
  3. 应用框架层
    这一层主要提供了构建应用程序时可能用到的各种API,Android自带的一些核心应用就是使用这些API来完成的,开发者也可以通过这些API来构建自己的应用程序。
  4. 应用层
    所有安装在手机上的引用程序都是属于这一层的,比如系统自带的联系人、短信等程序,或者是你从Geogle Play上下载的小游戏,当然还包括你自己开发的程序。

1.2 Android已发布的版本

Android当下主流版本
目前4.0以上的系统已经占据了超过98%的Android市场份额,所以我们主要开发的程序只能面向4.0以上的系统。

1.3 Android应用开发特色

四大组件

  • 活动(Activity)
    活动是所有Android应用程序的门面,凡是在应用中你看得到的东西,都是放在活动中的。
  • 服务(Service)
    服务与活动不同,你无法看到它,但它会一直在后台默默地运行,即使用户退出了应用,服务仍然是可以继续运行的。
  • 广播接收器(Broadcase Receiver)
    广播接收器允许你的应用接收来自各处的广播消息,比如电话、短信等,当然你的应用也可以向外发出广播消息。
  • 内容提供器(Content Provider)
    内容提供器则为应用程序之间共享数据提供了可能,比如你想要读取系统电话簿中的联系人,就需要通过内容提供器来实现。

丰富的系统控件
Android系统为开发者提供了丰富的系统控件,使得我们可以很轻松地编写出漂亮的界面。当然,如果你不满足于系统自带的控件效果,也完全可以定制属于自己的空间。

SQLite数据库
Android系统还自带了这种轻量级、运算速度极快的嵌入式关系型数据库。它不仅支持标准的SQL语法,还可以通过Android封装好的API进行操作,让存储和读取数据变得
非常方便。

强大的多媒体
Android系统还提供了丰富的多媒体服务,如音乐、视频、录音、拍照、闹铃,等等,这一切你都可以在程序中通过代码进行控制,让你的应用变得更加丰富多彩。

地理位置定位
移动设备和PC相比起来,地理位置定位功能应该可以算是很大的一个亮点。现在的Android手机都内置有GPS,走到哪里都可以定位到自己的位置,发挥你的想象就可以做出创意十足的应用,如果再结合功能强大的地图功能,LBS这一领域潜力无限。

2.搭建开发环境

2.1 准备所需要的工具

开发Android程序需要准备的工具

  • JDK
    JDK是Java语言的软件开发工具包,它包含了Java的运行环境、工具集合、基础类库等内容。
  • Android SDK
    Android SDK是谷歌提供的Android开发工具包,在开发Android程序时,我们需要通过引入该工具包,来使用Android相关的API。
  • Android studio
    在2013年时,谷歌推出了一款官方的IDE工具Android Studio,由于不再是以插件的形式存在,Android Studio在开发Android程序方面要远比Eclipse强大和方便很多。

2.2 搭建开发环境

按照网上的指示安装Android Studio即可
(注意:由于我之前安装过一次,在第二次安装时因为SDK路径未能够正确导入(以前第一次安装时留下的SDK,卸载时依旧留在系统中)以至于打开Android时出现问题;
解决方法:进入Android Studio后,找到File->Settings->Apperance & Behavior ->System Settings->Android SDK目录,在Android SDK Location一栏中选择安装Android Studio时附带的SDK目录(我的SDK安装目录是G:\AndroidSDK)
Android学习记录——1.Android Studio_第1张图片

3.创建第一个Android项目

3.1 创建Hello World项目

Android Studio的欢迎界面
Android学习记录——1.Android Studio_第2张图片
在Android Studio的欢迎界面,点击Start a new Android Studio project,会打开一个新建项目的界面。

Android Studio的创建新项目界面
Android学习记录——1.Android Studio_第3张图片
其中:

  • Application name:表示应用名称,此应用安装到手机之后会在手机上显示该名称,这里我们填入HelloWorld。
  • Company Domain:表示公司域名,如果是个人开发者,没有公司域名的话,那么就像我一样填example.com就可以了。
  • Package name:表示项目的包名,Android系统就是通过包名来区分不同应用程序得到,因此包名一定要具有唯一性。Android Studio会根据应用名称和公司域名来自动帮我们生成合适的包名,如果你不想使用默认生成的包名,也可以点击右侧的Edit按钮自行修改。
  • Project location:表示该项目代码存放的位置,如果没有特殊要求的话,这里也保持默认就可以。

Android Studio的模板选择界面
Android学习记录——1.Android Studio_第4张图片
在上一个界面点击Next后,在这个界面我们可以选择一种模板。可以看到,Android Studio提供了很多种内置模板,这里直接选择Empty Activity来创建一个空的活动就可以了。

Android Studio的模板编辑界面
Android学习记录——1.Android Studio_第5张图片
继续点击Next,可以给创建的活动和布局命名。
其中:

  • Activity Name:表示活动的名字。
  • Layout Name:表示布局的命名。

3.2 启动模拟器

Android Studio的模拟器按钮
在这里插入图片描述
观察Android Studio顶部工具栏中的图标,该按钮是用于创建和启动模拟器的,点击该按钮,即可打开模拟器的界面。

Android Studio的模拟器界面
Android学习记录——1.Android Studio_第6张图片
进行一系列的配置过后,可以看到现在模拟器列表中已经性存在一个创建好的模拟器你设备了,点击Actions栏目中最左边的三角形按钮可启动模拟器。模拟器会像手机一样,有个开机的过程。

3.3 运行HelloWorld

Android Studio的运行项目按钮
在这里插入图片描述
观察Android Studio顶部工具栏中的图标,其中左边的锤子按钮是用来编译项目的,中间的下拉列表是用来选择运行哪一个项目的,通常app就是当前的主项目,右边的三角形项目是用来运行项目的。
选择运行设备
Android学习记录——1.Android Studio_第7张图片
以看到,我们创建的模拟器是在线的,点击OK按钮,稍微等待一会儿,HelloWorld项目就会运行到模拟器上了。

模拟器运行界面
Android学习记录——1.Android Studio_第8张图片
可以看到,模拟器已经安装上HelloWorld这个应用了。

3.4 分析Android程序

Android Studio的项目结构
Android学习记录——1.Android Studio_第9张图片
任何一个新建的项目都会默认使用Android模式的项目构造,但这并不是项目真实的目录结构,而是被Android Studio转换过的。这种项目结构简介明了,适合进行快速开发,但是对于新手来说可能并不易于理解。
Android学习记录——1.Android Studio_第10张图片
点击图中的Android区域可以切换项目结构模式,这里讲项目结构模式切换成Project,这就是项目真实的目录结构了。
Android学习记录——1.Android Studio_第11张图片
Android Studio的外层目录结构讲解
Android学习记录——1.Android Studio_第12张图片

  1. .gradle和.idea:这两个目录下放置的都是Android Studio自动生成的一些文件,我们无须关心,也不要去手动编辑。
  2. app:项目中的代码、资源等内容几乎都是放置在这个目录下的,我们后面的开发工作也基本都是在这个目录下进行的。
  3. build:它主要包含了一些在编译时自动生成的文件。
  4. gradle:这个目录下包含了gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否需要联网下载gradle。Android Studio默认没有启用gradle wrapper的方式,如果需要打开,可以点击Androdi Studio导航栏->File->Settings->Build,Execution,Deployment->Gradle,进行配置更改。
  5. .gitignore:这个文件是用来将制定的目录或文件排除在版本控制之外的。
  6. build.gradle:这是项目全局的gradle构建脚本,通常这个文件中的内容是不需要修改的。
  7. gradle.properities:这个文件是全局的gradle配置文件,在这里配置得到属性将会影响到项目中所有的gradle编译脚本。
  8. gradlew和gradlew.bat:这两个文件是用来在命令行界面中执行gradle命令的,其中gradlew是在Linux或Mac系统中使用的,gradlew.bat是在Windows系统中使用的。
  9. HelloWorld.iml:iml文件是所有IntelliJ IDEA项目都会自动生成的一个文件(Android Studio是基于IntelliJ IDEA开发的),用于标识这是一个IntelliJ IDEA项目,我们不需要修改这个文件中的任何内容。
  10. local.properties:这个文件用于指定本机中的Android SDK路径,通常内容都是自动生成的,我们并不需要修改。除非你本机中的Android SDK位置发生了变化,那么就将这个文件中的路径改成新的位置即可。
  11. settings.gradle:这个文件用于指定项目中所有引入的模块。通常情况下模块的引入都是自动完成的,需要我们手动去修改这个文件的场景可能比较少。

现在整个项目的外层目录结构已经介绍完了,你会发现,除了app目录之外,大多数的文件和目录都是自动生成的,我们并不需要进行修改。想必你已经猜到了,app目录下的内容才是我们以后的工作重点。

app目录下的内容讲解
Android学习记录——1.Android Studio_第13张图片

  1. build:这个目录和外层的build目录类似,主要也是包含了一些在编译时自动生成的文件,不过它里面的内容会更加复杂,我们不需要过多关心。
  2. libs:如果你的项目中使用到了第三方jra包,就需要把这些jar包放在libs目录下,放在这个目录下的jar包都会被自动添加到构建路径里去。
  3. androidTest:此处是用来编写Android Test测试用例的,可以对项目进行一些自动化测试。
  4. java:毫无疑问,java目录是放置我们所有Java代码的地方,展开该目录,你将看到我们刚才创建的HelloWorldActivity文件就在里面。
  5. res:这个目录下的内容就有点多了。简单点说,就是你在项目中使用到的所有图片、布局、字符串等资源都要存放在这个目录下。当然这个目录下还有很多子目录,图片放在drawble目录下,布局放在layout目录下,字符串放在values目录下。
  6. AndroidManifest.xml:这是你整个Android项目的配置文件,你在程序中定义的所有四大组件都需要再这个文件里注册,另外还可以在这个文件中给应用程序添加权限声明。
  7. test:此处是用来编写Unit Test测试用例的,是对项目进行自动化测试的另一种方式。
  8. .gitignore:这个文件用于将app模块内的指定的目录或文件排除在版本控制之外,作用和外层的.gitignore文件类似。
  9. app.iml:IntelliJ IDEA项目自动生成的文件,我们不需要关心或修改这个文件中的内容。
  10. build.gradle:这是app模块的gradle构建脚本,这个文件中会指定很多项目构建相关的配置。
  11. proguard-rules.pro:这个文件用于制定项目代码的混淆规则,当代码开发完成后打成安装包文件,如果不希望代码被别人破解,通常会将代码进行混淆,从而让破解难以阅读。

分析项目是如何运行的
首先打开AndroidManifest.xml文件,从中可以找到如下代码:
Android学习记录——1.Android Studio_第14张图片
这段代码表示对HelloWorldActivity这个活动进行注册,没有在AndroidManifest.xml里注册的活动是不能使用的。
其中,intent-filter里的两行代码非常重要:
表示HelloWorldActivity是这个项目的主活动,在手机上点击应用图标,首先启动的就是这个活动。
那HelloWorldActivity具体又有什么作用呢?活动是Android应用程序的门面,凡是在应用中你看得到的东西,都是放在活动中的。因此你看到的页面,其实就是HelloWorldActivity这个活动。
打开HelloWorldActivity.java,代码如下所示:
Android学习记录——1.Android Studio_第15张图片
我们可以看到,HelloWorldActivity是继承自AppCompatActivity的,这是一种向下兼容的Activity,可以将Activity在各个系统版本中增加的特性和功能最低兼容到Android2.1系统。
Activity是Android提供的一个活动基类,我们项目中所有的活动都必须继承它或者它的子类才能拥有活动的特性(AppCompatActivity是Activity的子类)。
然后可以看到HelloWorldActivity中有一个onCreate()方法,这个方法是一个活动被创建时必定要执行的方法,其中只有两行代码,并且没有Hello World!的字样。
Android程序的设计讲究逻辑和视图分离,比较通用的编写界面的方式是:在布局文件中编写界面,然后在活动中引入进来。可以看到,在onCreate()方法中的第二行调用了setContentView()方法,就是这个方法给当前的活动引入了一个hello_world_layout布局,那Hello World!一定就是这里定义的了。
布局文件都是定义在res/layout目录下的,当你展开layout目录,你会看到hello_world_layout.xml这个文件,打开该文件并切换到Text视图,代码如下所示:
Android学习记录——1.Android Studio_第16张图片
我们可以看到,代码中有一个TextView,这是Android系统提供的一个控件,用于在布局中显示文字的。事实上,Hello World!的字样就是通过android:text="Hello World!"这句代码定义的。

3.5 详解项目中的资源

如果你展开res目录看一下,其实里面的东西还是挺多的,很容易让人看得眼花缭乱。
Android学习记录——1.Android Studio_第17张图片
所有以drawable开头的文件夹都是用来放图片的,所有以mipmap开头得到文件都是用来放应用图标的,所有以values开头的文件夹都是用来放字符串、样式、颜色等配置的,layout文件夹是用来放布局文件的。
之所以有这么多mipmap开头的文件夹,其实主要是为了让程序能够更好地兼容各种设备。drawable文件夹也是相同的道路,虽然Android Studio没有帮我们自动生成,但是我们有概念股自己创建drawable-hdpi、drawable-xhdqi、drawable-xxhdpi等文件夹。在制作程序的时候最好能够给同一张图片提供几个不同分辨率的版本,分别放在这些文件夹下,然后当程序运行的时候,会自动根据当前运行设备分辨率的高低选择加载哪个文件夹的图片。
打开res/values/strings.xml文件,内容如下所示:
在这里插入图片描述
可以看到,这里定义了一个应用程序名的字符串,我们有以下两种方式来引用它:

  1. 在代码中通过通过R.string.app_name可以获得该字符串的引用。
  2. 在XML中通过@string/app_name可以获得该字符串的引用。
    基本语法就是上面这两种方式,其中string部分是可以替换的:
  3. 如果是引用的图片资源就可以替换成drawable。
  4. 如果是引用的应用图标就可以替换成mipmap。
  5. 如果是引用的布局文件就可以替换成layout。
    以此类推。
    打开AndroidManifest.xml文件,找到如下代码:
    Android学习记录——1.Android Studio_第18张图片
    其中,HelloWorld项目的应用图标就是通过android:icon属性来指定的,应用的名称则是通过android:label属性指定的。

3.6 详解build.gradle文件

不同于Eclipse,Android Studio是采用Gradle来构建项目的。Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置,摒弃了传统基于XML(如Ant和Maven)的各种繁琐配置。
在之前我们可以看到,HelloWorld项目中有两个build.gradle文件,一个是在最外层目录下的,一个是在app目录下的。这两个文件对构建Android Studio项目都起到了至关重要的作用,下面我们就来对这两个文件中的内容进行详细的分析。
先来看一下最外层目录下的build.gradle文件,代码如下所示:
Android学习记录——1.Android Studio_第19张图片
这些代码都是自动生成的,虽然语法结构看上去可能有点难以理解,但是如果我们忽略语法结构,只看最关键的部分,其实还是很好懂的。
其中,两处repositories闭包中都声明了jcenter()这行配置,它是一个代码托管仓库,很多Android开源项目都会选择将代码托管到jcenter上,声明了这行配置之后,我们就可以在项目中轻松引用任何jcenter上的开源项目了。
接下来,dependencies闭包中使用classpath声明了一个Gradle插件。为什么要声明这个插件呢?因为Gradle并不是专门为构建Android项目而开发的,Java、C++等很多种项目都可以使用Gradle来构建。因此如果我们想要使用它来构建Android项目,则需要声明com.android.tools.build:gradle:2.2.0这个插件。其中,最后的部分是插件的版本号。
这样我们就将最外层目录下的build.gradle文件分析完了,通常情况下你并不需要修改这个文件中的内容,除非你想添加一些全局的项目构建配置。
下面我们再来看一下app目录下的build.gradle文件,代码如下所示:
Android学习记录——1.Android Studio_第20张图片
首先第一行应用了一个插件,一般有两种值可选:com.android.application表示这是一个应用程序模块,com.android.library表示这是一个库模块。应用程序模块和库模块的最大区别在于:一个是可以直接运行的,一个只能作为代码库依附于别的应用程序模块来运行。
接下来是一个大的android闭包,在这个闭包中我们可以配置项目构建的各种属性。其中:

  1. compileSdkVersion:用于指定项目的编译版本,这里指定成24表示使用Android7.0系统的SDK编译。
  2. buildToolsVersion:用于指定项目构建工具的版本,目前最新的版本就是24.0.2,如果有更新的版本时,Android Studio会进行提示。

然后我们看到,这里在android闭包中又嵌套了一个defaultConfig闭包,这个闭包可以对项目的更多细节进行配置。其中:

  1. applicationId:用于指定项目的包名,前面我们在创建项目的时候其实已经指定过包名了,如果你想在后面对其进行修改,那么就是在这里修改的。
  2. minSdkVersion:用于指定项目最低兼容的Adnroid系统版本,这里指定成15表示最低兼容到Android4.0系统。
  3. targetSdkVersion:指定的值表示你在该目标版本上已经做过了充分的测试,系统将会为你的应用程序启用一些最新的功能和特性。
  4. versionCode:用于指定项目的版本号。
  5. versionName:用于指定项目的版本名。

分析完了这个闭包,接下来我们看一下buildTypes闭包。这个闭包的功能非常强大,它可以指定当前项目所有的依赖关系。通常Android Studio项目一共有三种依赖关系:
8. 本地依赖:可以对本地的Jar包或目录添加依赖关系。
9. 库依赖:可以对项目中的库模块添加依赖关系。
10. 远程依赖:可以对jcenter库上的开源项目添加依赖关系。

观察一下dependencies闭包中的配置,第一行的compile fileTree就是一个本地依赖声明,它表示将libs目录下所有.jar后缀的文件都添加到项目的构建路径当中。而第二行的compile则是远程依赖声明,com.android.support:appcompat-v7:24.2.1就是一个标准的远程依赖库格式,其中:

  1. com.android.support:是域名部分,用于和其他公司的库做区分
  2. appcompat-v7:是组名称,用于和同一个公司中不同的库做区分
  3. 24.2.1:是版本号,用于和同一个库中不同的版本做区分。

加上这句声明后,Gradle在构建项目时会首先检查一下本地是否已经有这个库的缓存,如果没有的话则会去自动联网下载,然后再添加到项目的构建路径当中。至于库依赖声明这里没有用到,它的基本格式是compile project后面加上要依赖的库名称,比如说有一个库模块的名字叫helper,那么添加这个库的依赖关系只需要加入compile project(’:helper’)这句声明即可。
另外,剩下的一句testCompile是用于声明测试用例库的。

4.日志工具的使用

4.1 使用Android的日志工具Log

Android中的日志工具类是Log(android.util.Log),这个类中提供了如下5个方法来供我们打印日志:

  1. Log.v():用于打印那些最为琐碎的、意义最小的日志信息。对应级别verbose,是Android日志里级别最低的一种。
  2. Log.d():用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别debug,比verbose高一级。
  3. Log.i():用于打印一些比较重要的数据,这些数据应该是你非常想看到的、可以帮你分析用户行为数据。对应级别info,比debug高一级。
  4. Log.w():用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别warn,比info高一级。
  5. Log.e():用于打印程序中的错误信息,比如程序进入到了catch语句当中。当有错误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应级别error,比warn高一级。
    其实很简单,一共就5个方法,当然每个方法还会有不同的重载,但那对你来说肯定不是什么难理解的地方了。我们现在就在HelloWorld项目中试一试日志工具好不好用吧。
    打开HelloWorldActivity,在onCreate()方法中添加一行打印日志的语句,如下所示:
    Android学习记录——1.Android Studio_第21张图片
    Log.d()方法传入了两个参数:第一个参数是tag,一般传入当前的类名就好,主要用于对打印信息进行过滤;第二个参数是msg,即想要打印的具体的内容。
    现在,运行一下HelloWorld这个项目,等程序运行完毕,点击Android Studio底部工具栏的Android Monitor,在locate中就可以看到打印信息了,如图所示:
    Android学习记录——1.Android Studio_第22张图片
    其中,你不仅仅可以看到打印日志的内容和tag名,就连程序的包名、打印的时间以及应用程序的进程号你都可以看到。

4.2 为什么使用Log而不使用System.out

在真正的项目开发中,是极度不建议使用System.out.println()方法的,如果你在公司的项目中经常使用这个方法,就很有可能要挨骂了。
System.out.println()方法虽然可以实现快捷使用,但是具有日志打印不可控制、打印时间无法确定、不能添加过滤器、日志没有级别区分的缺点。
上面提到的快捷使用,在Android Studio当中也是有的,比如你想打印一条debug级别的日志,那么只需要输入logd,然后按下Tab键,就会帮你自动补全一条完整的打印语句。输入logi,然后按下Tab键,会自动补全一条info级别的打印日志。输入logw,按下Tab键,会自动补全一条warn级别的打印日志,以此类推。
另外,由于Log的所有打印方法都要求传入一个tag参数,每次写一遍显然太过麻烦。这里还有一个小技巧,我们在onCreate()方法的外面输入logt,然后按下Tab键,这是就会以当前的类名作为值自动生成一个TAG常量,如下所示:
在这里插入图片描述
除了快捷输入之外,logcat中还能很轻松地添加过滤器,你可以在下图中看到我们目前所有的过滤器:
Android学习记录——1.Android Studio_第23张图片
目前只有3个过滤器,其中:

  1. Show only selected application:表示只显示当前选中程序的目录。
  2. Firebase:是谷歌提供的一个分析工具,我们可以不同管它。
  3. No Filters:相当于没有过滤器,会把所有的日志都显示出来。

除此之外,我们还可以自定义过滤器。点击上图中的Edit Filter Configuration,会弹出一个过滤器配置页面:
Android学习记录——1.Android Studio_第24张图片
我们给过滤器起名为Data,并且让它对名为data的tag进行过滤。点击OK,你就会发现已经多出了一个Data过滤器:
Android学习记录——1.Android Studio_第25张图片
当你切换到这个过滤器的时候,你会发现刚才在onCreate()方法里打印的日志没了,这是因为Data这个过滤器只会显示tag名称为data的日志。你可以尝试在onCreate()方法中把打印日志的语句改成Log.d(“data”,“onCreate execute”),然后再次运行程序,你就会在data过滤器下看到这行日志了。
看完了过滤器,再来看一下logcat中的日志级别控制吧。logcat中主要有5个级别,分别对应着1.4.1介绍的5歌方法,如图所示:
Android学习记录——1.Android Studio_第26张图片
当前我们选中的级别是verbose,也就是最低等级。这意味着不管我们使用哪一个方法打印日志,这条日志都一定会显示出来。而如果我们将级别选中为debug,这时只有我们使用debug及以上级别方法打印的日志才会显示出来,以此类推。
日志级别控制的好处就是,你可以很快找到你所关心的那些日志。
最后我们再来看一下关键字过滤。如果使用过滤器加日志级别控制还是不能锁定到你想查看的日志内容的话,那么还可以通过关键字进行进一步的过滤,如下图所示:
在这里插入图片描述
我们可以在输入框里输入关键字的内容,这里只有符合关键字条件的日志才会显示出来,从而能够快速定位到任何你想查看的日志。另外还有一点需要注意,关键字过滤是支持正则表达式的,有了这个特性,我们就可以构建出更加丰富的过滤条件。

你可能感兴趣的:(Android,Android)