Android开发学习 -- Day1 了解Android的一些
现在的职位是Android测试,但在日常工作中,常有一些困扰。测试的好奇心驱使自己不断的去问为什么。例如,为什么会出这个bug,怎么修复这个bug,如何避免这个bug。之前还写过文章,Android测试--记录一个简单问题的定位与跟踪,所以最终一切问题还是会回归到代码上。
于是就定下个目标,掌握Android开发技术,并坚持记录学习过程。
因为做了一阵Android的测试“工程师”,因此对一些基础的知识还是有所了解。例如Activity的生命周期,Android的四大组件等等。不过为了戒骄,还是要沉下心来看。关于如何搭建Android开发环境和创建和了解hello World项目就略过了。
一、项目的工程结构
新建一个工程,可看到如下图目录,将视图由Android调整为project,以观全局。
二、build.gradle文件详解
Android Studio采用Gradle来构建项目,这是一种先进的项目构建工具。它使用了一种基于Groovy的领域特定语言DSL来声明项目设置,摒弃了传统基于XML的各种繁琐的配置。
在上面的图中,我们看到一共有两个gradle文件,一个是app模块的,另一个是整个项目的。这两个文件对构建Android项目都起到了至关重要的作用,需要分开来分析。
1、先来看最外层的gradle文件:
代码所示
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
这些代码都是项目自动生成的,其中我们看到两处repositories的闭包中都有google()和 jcenter()的配置。他们其实是代码的托管仓库,如声明了 jcenter(),就可以在项目中轻松的引用jcenter上的开源项目了。
dependencies闭包中使用了classpath声明了一个Gradle插件。因为Gradle并不是专门为Android项目开发的,所以要用Gradle构建Android项目的话,就需要声明com.android.tools.build:gradle:3.0.1这个插件。最后的3.0.1指的是插件的版本号。
2、app下的Gradle文件
代码如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.johnhao.listviewdemo"
minSdkVersion 19
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets { main { java.srcDirs = ['src/main/java', 'src/main/java/Adapter'] } }
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.android.support:support-v4:26.1.0'
implementation 'com.android.support:design:26.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:0.5'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
implementation 'com.android.support:recyclerview-v7:26.1.0'
}
内容比较多,一条一条来分析。
首先,第一行应用了一个插件:apply plugin: 'com.android.application',这里的com.android.application表示这是一个应用程序模块;还有另一种方式com.android.library表示这是一个库模块。两者主要区别就是一个是可以直接运行,另一个只能作为代码库依附于别的应用程序模块来运行。
接下来是一个大的android闭包,这里可以配置项目构建的各种属性。
🀆 compileSdkVersion:指定项目的编译版本。
之后又嵌套了一个defaultConfig闭包
🀆 applicationId:用于指定项目的包名
🀆 minSdkVersion:项目最低兼容的Android系统版本
🀆 targetSdkVersion:表明项目在目标版本上进行了充分的测试,系统将启用一些最新的功能和特性。
🀆 versionCode:指定项目的版本号
🀆 versionName:指定项目的版本名
分析完defaultConfig闭包,再来看buildTypes闭包。buildTypes用于指定生成安装文件的相关配置,通常有两个闭包,分别为debug和release。
🀆 minifyEnabled:是否对项目进行混淆
🀆 proguardFiles:指定混淆规则
最后来看一下dependencies闭包,它可以指定当前项目所有的依赖关系。通常Android Studio项目有三种依赖关系,本地依赖、库依赖和远程依赖。本地依赖可以对本地Jar包或者目录添加依赖关系;库依赖可以对项目中的模块库添加依赖关系;远程依赖则可以对jcenter库上的开源项目添加依赖关系。
例如:'com.android.support:appcompat-v7:26.1.0'就是一个标准的远程依赖库格式,其中com.android.support是域名部分;26.1.0是版本号;appcompat-v7是组名称,用于和其他的库做区分。
三、Android的日志工具
平常的测试中,最常用的方法有种叫做Log大法,即在关键的地方打下日志,方便调试肉眼不可见的信息。
Android中的日志工具类是Log(android.util.Log),这个类提供了如下5个方法来供我们打印日志。
🀆 Log.v():用于打印最为琐碎的。意义最小的日志信息。对应级别verbose,是Android日志里面级别最低的一种
🀆 Log.d():用于打印一些调试信息,这些信息对调试程序和分析问题应该是有帮助的,对应级别debug,比verbose高一级。
🀆 Log.i():用于打印一些比较重要的数据,这些数据应该是非常想看到的,可以帮助分析用户行为数据。对应级别info,比debug高一级。
🀆 Log.w():用于打印一些警告信息,提示程序在这个地方可能存在潜在的风险,最好修复这些警告。对应级别warn,比info高一级。
🀆 Log.e():用于打印程序中的错误信息,比如程序进入catch语句。当有错误信息打印的时候,一般代表程序中出了严重问题,必须尽快修复。对应级别error,比warn高一级。
在Android Studio里,提供了log的快捷键。例如想打印debug级别的日志,只需要输入logd,就会自动补全代码。另外由于Log都需要一个tag,在最外面输入logt同样也会自动补全生成一个TAG常量。
接下来就可以通过过滤TAG和日志级别来筛选自己需要的信息啦。
关于Android的一些基础知识就复习到这里,这一天,我们已经搭建好了Android的开发环境,对整个Android也有了一定的认知,并创建了自己的项目工程,还了解了日志的使用,愉快而丰富的一天就要结束了。从下一章学习开始,就要真正的步入Android的世界中了。
关注获取更多信息