技术栈

主页 > 移动开发 >

带你进入 Android 的世界

技术栈 - 中国领先的IT技术门户

1 Android 简介

Android 从面世以来到现在已经发布了二十几个版本了。在这几年的发展过程中,谷歌为 Android 王国建立了一个完整的生态系统。手机厂商、开发者、用户之间相互依存,共同推进着 Android 的蓬勃发展。开发者在其中扮演着不可或缺的角色,因为如果没有开发者来制作丰富的应用程序,那么不管多么优秀的操作系统,也是难以得到大众用户喜爱的,相信没有多少人能够忍受没有 QQ、微信的手机吧。而且,谷歌推出的 Google Play 更是给开发者带来了大量的机遇,只要你能制作出优秀的产品,在Google Play 上获得了用户的认可,你就完全可以得到不错的经济回报,从而成为一名独立开发者,甚至是成功创业!

1.1 Android 系统架构

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

  • Linux 内核层(Linux Kernel):
    Android 系统是基于 Linux 内核的,这一层为 Android 设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi 驱动、电源管理等。

  • 系统运行库层(Libraries):
    这一层通过一些 C/C++ 库来为 Android 系统提供了主要的特性支持。如 SQLite 库提供了数据库的支持,OpenGL|ES 库提供了 3D 绘图的支持,Webkit 库提供了浏览器内核的支持等。
    同样在这一层还有 Android 运行时库,它主要提供了一些核心库,能够允许开发者使用 Java 语言来编写 Android 应用。另外,Android 运行时库中还包含了 Dalvik 虚拟机(5.0系统之后改为ART运行环境),它使得每一个 Android 应用都能运行在独立的进程当中,并且拥有一个自己的 Dalvik 虚拟机实例。相较于 Java 虚拟机,Dalvik 是专门为移动设备定制的,它针对手机内存、CPU 性能有限等情况做了优化处理。

  • 应用框架层(Application Framework):
    这一层主要提供了构建应用程序时可能用到的各种 API,Android 自带的一些核心应用就是使用这些 API 完成的,开发者也可以通过使用这些 API 来构建自己的应用程序。

  • 应用层(Applications):
    所有安装在手机上的应用程序都是属于这一层的,比如系统自带的联系人、短信等程序,或者是从 Google Play 上下载的小游戏,当然还包括我们自己开发的程序。

1.2 Android 系统底层能力

1、 四大组件

Android 系统四大组件分别是活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)。

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

2、系统控件

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

3、SQLite 数据库

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

4、多媒体

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

5、地理位置定位

移动设备和 PC 相比,地理位置定位功能算是很大的一个亮点。现在的 Android 手机都内置有GPS,走到哪儿都可以定位到自己的位置,发挥你的想象就可以做出创意十足的应用,如果再结合功能强大的地图功能,就可以提供 LBS(Location Based Service)服务啦O(∩_∩)O~。

2 搭建开发环境

2.1 准备工具

  • JDK:JDK是 Java 语言的软件开发工具包,它包含了 Java 的运行环境、工具集合、基础类库等内容。注意,以后我们的示例 Android 程序必须要使用 JDK 8 或以上版本才能正常运行。

  • Android SDK:Android SDK 是谷歌提供的 Android 开发工具包,在开发 Android程序时,我们需要通过引入这个工具包,来使用 Android 相关的 API。

  • Android Studio:2013年,谷歌推出了一款官方的 IDE 工具 Android Studio,Android Studio 在开发 Android 程序方面要比 Eclipse 强大而且方便得多。

2.2 搭建开发环境

谷歌为了简化搭建开发环境的过程,已经将所有需要用到的工具都集成好了,所以到 Android 的官网(要翻墙哦)就可以下载到最新的开发工具。也可以在网盘上下载

下载下来的是一个安装包(比如:android-studio-bundle-145.3276617-windows.exe),安装的过程很简单,一直点击 Next 就可以了。

其中选择安装组件时建议全部勾上,如图所示:

接下来还会选择 Android Studio 的安装路径以及 Android SDK 的安装路径:

解压后的 Android SDK 大概会占 4G 多的空间。

现在点击 Finish 按钮来启动 Android Studio,一开始会选择是否导入之前 Android Studio 版本的配置,因为这是首次安装,所以选择不导入:

首次打开 Android Studio 时,会弹出以下 “unable to access android sdk-on list” 错误:

这里点击 “Cancel”,选择在后续的界面中再安装 SDK。

进入到 Android Studio 的配置界面:

点击 Next 开始进行具体的配置,首先选择 Android Studio 的安装类型,有
Standard 和 Custom 两种。Standar d表示一切都使用默认的配置,比较方便;Custom 则可以根据用户的特殊需求进行自定义。

点击 Finish 按钮,配置工作就全部完成了。然后 Android Studio 会尝试联网下载一些 SDK 组件,等下载完成后再点击 Finish 按钮就会进入 Android Studio 的欢迎界面咯O(∩_∩)O~

下载的时间比较长哦,请耐心等待:)

更新完成后再点击 Finish 按钮就会进入 Android Studio 的欢迎界面:

3 创建第一个 Android 项目(Hello World)

3.1 创建新项目

在 Android Studio 的欢迎界面点击 Start a new Android Studio project,会打开一个创建新项目的界面:

  • Application name:应用名称,即该应用被安装到手机后会在手机上显示的名称。
  • Company Domain:公司域名。
  • Package name:项目的包名,Android系统就是通过包名来区分不同应用程序的,因此包名一定要具有唯一性。Android Studio 会根据应用名称和公司域名自动生成包名,如果不想使用默认生成的包名,也可以点击右侧的 Edit 按钮进行修改。
  • Project location:项目代码存放的位置。

点击 Next 可以对项目的最低兼容版本进行设置:

在 Phone and Tablet 中,下拉选择 Minimum SDK 为 API15,Android Studio 还温馨地提醒我们,这一版本的 SDK 已经可以说是 100% 兼容目前的主流设备啦O(∩_∩)O哈哈~

点击 next,会安装一些必须的组件(这次速度很快,不用担心O(∩_∩)O):

点击 Next 会跳转到创建活动界面,这里我们选择一种设备模板:

Android Studio 提供了很多种内置模板,这里直接选择 Empty Activity 来创建一个空的活动。

继续点击 Next,给创建的活动和布局命名:

  • Activity Name:活动的名字。
  • Layout Name:布局的名字。
    修改活动的名字,Android Studio 会根据活动的名字,自动给布局命名哦O(∩_∩)O~

点击 Finish 按钮,等一会儿,项目就会创建成功。如果中途弹出防火墙,记得点击“允许访问”哦。

最后对 IDE进行相关设置:

1、设置字符编码

File-》setting -》Editer -》File Encodings 中,把 Properties 的文件编码修改为 UTF-8,并勾选 Transparent native-to-ascii conversion:

2、设置主题与字体

File-》setting -》Editer -》Colors & Fonts -》Font -》设置主题为 Darclua(这可以开发者最喜欢的黑色主题哦):

然后点击右边的 Save As 按钮,自定义一个字体主题配置,为这个配置命名:

最后在 Editor Font 页签中,设置你喜欢的字体与大小就可以啦:

全部设置完成后,记得重启 Android Studio 哦。

现在是不是漂亮多了呢O(∩_∩)O~

3.2 启动模拟器

由于 Android Studio 自动生成了很多东西,所以现在不需要编写任何代码,就可以运行这个项目了。但在此之前还必须要有一个运行载体,可以是一部 Android 手机,也可以是 Android 模拟器。这里我们使用模拟器来运行程序。

点击中部工具栏的这个图标,创建并启动模拟器:

因为之前的模拟器列表还是空的,所以这里需要创建一个虚拟设备,点击 Create Virtual Device 按钮就可以开始创建:

这里有很多种设备可供选择,不仅能创建手机模拟器,还可以创建平板、手表、电视等设备模拟器。

我们选择创建 Nexus 5X 这台设备的模拟器,然后点击 Next:

这里可以对模拟器的配置进行确认,比如说指定模拟器的名字、分辨率、横竖屏等信息。

点击 Finish 就可以完成模拟器的创建,然后会弹出模拟器列表:

点击 Actions 列中的最左边的三角形按钮即可启动模拟器。模拟器会像手机一样,有一个开机过程,启动完成后出现这样一个界面(最开始会弹出一个信息框,点击 Got IT):

3.3 运行项目

模拟器已经启动起来了,现在我们把项目运行到模拟器上。

  • 左边的锤子按钮:编译项目。
  • 中间的下拉列表:用来选择运行哪一个项目,通常app就是当前的主项目。
  • 右边的三角形按钮:用来运行项目。

点击右边的运行按钮,会弹出一个选择运行设备的对话框:

点击 OK 按钮,稍等一会儿,就会看到项目运行到模拟器上了。

3.4 分析项目结构

一个新建的项目都会默认使用 Android 模式的项目结构。这种项目结构简洁明了,适合进行快速开发。也可以切换为 Project 结构模式:

文件或文件夹说明
.gradle和.ideaAndroid Studio 自动生成的一些文件。
app存放项目中的代码、资源等文件。
build编译后自动生成的文件。
gradle包含了 gradle wrapper 的配置文件,使用 gradle wrapper 的方式时,IDE会根据本地的缓存情况决定是否需要联网下载 gradle。Android Studio 默认没有启用gradle wrapper 的方式,如果需要打开,可以点击 File→Settings→Build, Execution, Deployment→Gradle,修改配置。
.gitignore用来将指定的目录或文件排除在版本控制之外。
build.gradle项目全局的 gradle 构建脚本,通常这个文件中的内容是不需要修改的。
gradle.properties全局的 gradle 配置文件,在这里配置的属性将会影响到项目中所有的 gradle 编译脚本。
gradlew和gradlew.bat这两个文件是用来在命令行界面中执行 gradle 命令的。gradlew 在 Linux 或 Mac 系统中使用,gradlew.bat 在 Windows 系统中使用。
HelloWorld.imliml 文件是所有 IntelliJ IDEA 项目都会自动生成的一个文件(Android Studio 是基于 IntelliJ IDEA 开发的),因此里面是与 IntelliJ IDEA 有关的配置。
local.properties用于指定本机中的 Android SDK 路径,通常内容都是自动生成的。
settings.gradle用于指定项目中所有引入的模块。通常情况下,模块的引入都是自动完成的。

现在我们来分析 app 下的目录结构:

文件或文件夹说明
build在编译时自动生成的文件。
libs如果在项目中使用到了第三方 jar 包,那么就需要把这些包放到 libs 目录下,放在这个目录下的 jar 包都会被自动添加到构建路径中去。
androidTest存放 androidTest 测试用例。
java放置 Java 代码。
res存放项目中使用到的所有图片、布局、字符串等资源文件。这个目录下还有很多子目录,比如图片放在 drawable 目录下,布局放在 layout 目录下,字符串放在values 目录下。
AndroidManifest.xml整个项目的配置文件,在程序中定义的所有组件都需要在这个文件里注册,另外还可以在这个文件中给应用程序添加权限声明。
test存放 Unit Test 测试用例。
.gitignore用于将 app 模块内的指定的目录或文件排除在版本控制之外。
app.imlIntelliJ IDEA项目自动生成的文件。
build.gradleapp 模块的 gradle 构建脚本。
proguard-rules.pro指定项目代码的混淆规则代码开发完成后打成安装包文件,通常会将代码进行混淆,从而让破解者难以阅读。

现在让我们分析一下项目是怎么运行起来的吧。打开 AndroidManifest.xml 文件:

<activity android:name=".HelloWorldActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

这里对 HelloWorldActivity 这个活动进行注册,没有在 AndroidManifest.xml 里注册的活动是不能使用的。<action android:name= "android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /> 表示HelloWorldActivity 是这个项目的主活动,在手机上点击应用图标,首先启动的就是这个活动。

现在看看 HelloWorldActivity :

public class HelloWorldActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hello_world);
    }
}

HelloWorldActivity 继承自 AppCompatActivity ,这是一种向下兼容的 Activity,可以将 Activity 在各个系统版本中增加的特性和功能最低兼容到 Android 2.1系统。Activity 是 Android 系统提供的一个活动基类,我们项目中所有的活动都必须继承它或者它的子类才能拥有活动的特性(AppCompatActivity 是 Activity 的子类)。在
HelloWorldActivity 中有一个 onCreate() 方法,这个方法是一个活动被创建时一定会执行的方法。

Android 程序的设计强调逻辑和视图分离,因此是不推荐在活动中直接编写界面的,而是在布局文件中编写界面,然后在活动中引入进来。可以看到,在onCreate() 方法的第二行调用了 setContentView() 方法,就是这个方法给当前的活动引入了一个 hello_world_layout 布局。

布局文件都是定义在 res/layout 目录下的,我们展开 layout 目录,就会看到hello_world_layout.xml 这个文件。打开该文件并切换到 Text 视图,代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_hello_world"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.deniro.myapplication.HelloWorldActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>

这里用到了 Android 系统提供的一个控件 TextView ,它用于在布局中显示文字。android:text="Hello World!",原来 Hello World 在这里O(∩_∩)O哈哈~

3.5 分析项目资源(res)

  • 以 drawable 开头的文件夹:放图片。
  • 以 mipmap 开头的文件夹:放应用图标。之所以有这么多 mipmap 开头的文件夹,主要是为了让程序能够更好地兼容各种设备。制作程序的时候最好能够给同一张图标图片提供几个不同分辨率的版本,分别放在这些文件夹下,然后当程序运行的时候,会根据当前运行设备的分辨率高低自动选择需要加载哪个文件夹下的图片。
  • 以 values 开头的文件夹:放字符串、样式、颜色等配置。

现在演示一下如何去使用这些资源。打开 res/values/strings.xml 文件:

<resources>
    <string name="app_name">HelloWorld</string>
</resources>

这里定义了一个应用程序名的字符串,我们有以下两种方式来引用它。

  • 在代码中使用 R.string.app_name
  • 在 XML 中使用 @string/app_name

string 部分是可以替换的,如果是引用的是图片资源就可以替换为 drawable,如果是引用的是应用图标就可以替换为 mipmap,如果是引用的布局文件就可以替换为 layout,以此类推。

我们看一下 AndroidManifest.xml:

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".HelloWorldActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

可以看到,这个项目的应用图标是通过android:icon 属性来指定的,应用的名称则是通过android:label属性指定的。这用的是在 XML中引用资源的语法。

3.6 build.gradle 文件

Android Studio 是采用 Gradle 来构建项目的。Gradle 是一个非常先进的项目构建工具,它使用了一种基于 Groovy 的领域特定语言(DSL)来声明项目设置,摒弃了传统基于XML(如 Ant 和 Maven)的各种烦琐配置来声明设置的方式。

这个项目中有两个 build.gradle 文件,一个是在最外层目录下的,一个是在app目录下的。

先来看一下最外层目录下的 build.gradle 文件:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

jcenter() 是一个代码托管仓库,很多 Android 开源项目都会选择将代码托管到jcenter上,声明了这行配置之后,我们就可以在项目中轻松引用任何 jcenter 上的开源项目啦O(∩_∩)O~。

dependencies 中使用 classpath 声明了一个 Gradle 插件。

下面我们再来看一下 app 目录下的 build.gradle 文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "27.0.3"
    defaultConfig {
        applicationId "com.example.deniro.myapplication"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    testCompile 'junit:junit:4.12'
}

第一行应用了一个插件,一般有两种值可选:com.android.application 表示这是一个应用程序模块,com.android.library 表示这是一个库模块。应用程序模块和库模块的最大区别在于,一个是可以直接运行的,一个只能作为代码库依附于别的应用程序模块来运行。

接下来是一个大的 android{ },在这里我们可以配置项目构建的各种属性。其中,compileSdkVersion 用于指定项目的编译版本,这里指定成 24 表示使用 Android 7.0 系统的 SDK 编译。buildToolsVersion 用于指定项目构建工具的版本。

在 android{ } 中又嵌套了一个 defaultConfig{ },defaultConfig{ } 中可以对项目的更多细节进行配置:

  • applicationId - 用于指定项目的包名。
  • minSdkVersion - 用于指定项目最低兼容的 Android 系统版本,这里指定成 15 表示最低兼容到 Android 4.0 系统。
  • targetSdkVersion - 指定的值表示在该目标版本上已经做过了充分的测试,系统将会为应用程序启用一些最新的功能和特性。比如说 Android 6.0 系统中引入了运行时权限这个功能,如果将 targetSdkVersion 指定成 23 或者更高,那么系统就会为程序启用运行时权限功能。
  • versionCode - 用于指定项目的版本号。
  • versionName - 用于指定项目的版本名。

buildTypes{ } 是用于指定生成安装文件的相关配置,通常只会有两个子 {},一个是
debug,一个是 release。debug 闭包用于指定生成测试版安装文件的配置,可以忽略不写;release 闭包用于指定生成正式版安装文件的配置。

release{ } 中的具体内容如下:

  • minifyEnabled - 用于指定是否对项目的代码进行混淆,true 表示混淆,false 表示不混淆。
  • proguardFiles - 用于指定混淆时使用的规则文件,这里指定了两个文件,第一个proguard-android.txt 是在 Android SDK 目录下的,里面是所有项目通用的混淆规则,第二个 proguard-rules.pro 是在当前项目的根目录下的,里面可以编写当前项目特有的混淆规则。

注意,通过 Android Studio 直接运行项目,生成的都是测试版安装文件。

最后是 dependencies{ },它用于指定当前项目所有的依赖关系。Android Studio 项目有 3 种依赖方式:本地依赖、库依赖和远程依赖。

  • 本地依赖 - 可以对本地的 Jar 包或目录添加依赖关系。
  • 库依赖 - 可以对项目中的库模块添加依赖关系。
  • 远程依赖 - 可以对 jcenter 库上的开源项目添加依赖关系。

配置中的第一行的 compile fileTree 就是一个本地依赖声明,它表示将 libs 目录下所有 .jar 后缀的文件都添加到项目的构建路径当中。第二行的 compile 则是远程依赖声明,com.android.support:appcompat-v7:24.2.1 是一个标准的远程依赖库格式,其中 com.android.support 是域名部分,用于和其他公司的库做区分;appcompat-v7 是组名称,用于和同一个公司中不同的库做区分;24.2.1 是版本号,用于和同一个库不同的版本做区分。加上这句声明后,Gradle 在构建项目时会首先检查一下本地是否已经有了这个库的缓存,如果没有,就会自动联网下载,然后再添加到项目的构建路径当中。而库依赖声明的基本格式是 compile project 后面加上要依赖的库名称,比如说有一个库模块的名字叫 deniro,那么添加这个库的依赖关系只需要加入 compile project(':deniro') 声明即可。

4 日志工具

4.1 使用日志工具 Log

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

代码对应级别说明
Log.v()verbose打印最为琐碎的、意义最小的日志。
Log.d()debug打印调试信息。
Log.i()info打印比较重要的数据,这些数据一般是用于分析用户行为数据。
Log.w()warn打印警告信息,提示开发者这里可能存在潜在的风险。
Log.e()error打印程序中的错误异常信息。

有没有发现,代码的方法名称实际上就是对应级别的首字母缩写呀O(∩_∩)O哈哈~

现在就在项目中试一试吧,打开 HelloWorldActivity,在 onCreate() 方法中添加一行打印日志的语句:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_hello_world);
    Log.d("HelloWorldActivity","执行 onCreate");
}

Log.d() 方法中传入了两个参数:第一个参数是 tag,一般是传入当前的类名,主要用于对打印信息进行过滤;第二个参数是 msg,即想要打印的具体内容。

现在重新运行一下这个项目,点击顶部工具栏上的运行按钮,或者使用快捷键 Shift + F10(Mac系统是 control + R),等程序运行完毕,点击 Android Studio 底部工具栏的 Android Monitor,在 logcat 中就可以看到打印信息。

在 Android Studio 中也可以快捷输入,比如想打印一条 debug 级别的日志,那么只需要输入 logd,然后按下 Tab 键,就会自动补全一条完整的打印语句;输入 logi,然后按下 Tab 键,会自动补全一条 info 级别的打印日志;以此类推。

另外,由于 Log 的所有打印方法都要求传入一个 tag 参数,每次写一遍显然太过麻烦。我们可以在 onCreate() 方法的外面输入 logt,然后按下 Tab 键,这时就会以当前的类名作为值自动生成一个 TAG 常量,如下所示:

 private static final String TAG = "HelloWorldActivity";

是不是很方便呀O(∩_∩)O哈哈~

在 logcat 中还可以添加自定义的过滤器,过滤出我们真正想看的日志。

点击 logcat 右侧的 show only selected application 下拉框,选择 Edit filter Configuration:

在过滤器配置框中,输入过滤器的名称以及日志的 tag:

用上自定义的过滤器,就可以过滤出我们刚才定义的日志信息咯:

还可以直接控制日志级别:

日志级别控制的好处就是,可以很快地找到我们所关心的那些日志信息O(∩_∩)O哈哈~

还可以进行关键字过滤。如果使用过滤器加日志级别控制还是不能锁定到想查看的日志内容的话,那么还可以通过关键字进行进一步的过滤:

关键字过滤是支持正则表达式的,因此我们就可以构建出更加丰富的过滤条件。

责任编辑:admin  二维码分享:
本文标签: Android