认识第一个Android项目
文件组成
-
.gradle和.idea
这两个目录下是android studio自动生成的一些文件,我们无须关心,也不要手动编辑
-
app
项目中的代码、资源等内容几乎都是放置在这个目录下的,我们后面的开发工作也基本在这个目录下进行的
-
build
这个目录无需关心,主要包含了一些编译时会自动生成的文件
-
gradle
目录包含了gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载,如需启用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.iml
iml文件是所有IDEA项目都会自动生成的文件,不需要修改
-
local.properties
这个文件用于指定本机的SDK路径,通常都是自动生成的,我们并不需要修改。
-
settings.gradle
这个文件用于指定项目中的所有引入模块。通常情况的模块引入都是自动完成的,需要我们手动引入的情况较少
app文件组成
-
build
这个目录与外层的build类似,主要是包含了一些在编译时自动生成的文件,不过文件内容会更加的复杂
-
libs
如果项目引入了第三方jar包,就需要把这些jar包都放在libs目录下,放在这个目录下的jar包都会被添加进去
-
androidTest
此处用来编写Android Test 测试用例,可以对项目进行一些自动化测试
-
java
放置我们所有java代码的地方
-
res
所有用到的图片、布局、字符串等资源都要放在这个目录下。
-
AndroidMainifest
整个Android项目的配置文件,程序中定义的四大组件都需要在这个文件里注册,另外还需要在这个文件中添加权限申明。
-
test
用来编写Unit Test 测试用例,是对项目自动化测试的另一种方式
-
.gitignore
用于将指定的目录或者文件排除在版本控制之外,作用与外部的.gitignore相似
-
app.iml
IDEA项目自动生成的文件,我们不关心或者修改这个文件中的内容。
-
build.gradle
这是项目全局的gradle构建脚本,这个文件有许多的项目相关配置。
-
proguard-rules.pro
这个文件用于指定项目代码的混淆规则,当代码开发完成后打成包装文件,如果不希望代码被人破解,通常会将代码进行混淆,从而让破解者难以阅读。
项目中的资源
展开res文件,有主要几种文件
drawable开头的文件夹都是用来放图片的
mipmap开头的文件都是用来放应用图标的
values开头的文件夹都是用来放字符串、样式、颜色等配置的
layout开头的文件夹都是用来存放布局文件的
引用方式(以res/values/strings.xml中引用app_name为例):
- 在代码中通过R.string.app_name
- 在XML中通过@string/app_name
详解build.gradle文件
不同于escplise,IDEA是采用Gradle来构建项目的。它基于特定的语言(DSL)来申明项目配置,摒弃了传统的XML(如Ant和Maven)的各种繁琐配置
- 最外层的目录下的bulid.gradle文件代码如下:
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.0.2"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
dependencies 闭包中使用classpath申明了一个Gradle插件。Java、C++等很多项目都可以用Gradle来构建,我们需要用它来构建Android项目则需要申明com.android.tools.build:gradle:7.0.2这个插件,后面部分时插件版本号
- app目录下的build.gradle文件代码如下:
plugins {
id 'com.android.application'
}
android {
compileSdk 30
defaultConfig {
applicationId "com.example.apptest"
minSdk 21
targetSdk 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
android的日志工具Log
日志五种级别:
Log.v() Verbose //最琐碎的、意义最小的日志信息。对应级别最低的一种
Log.d() Debug //打印调试信息
Log.i() Info//打印比较重要的数据
Log.w() Warn//用于打印一些警告信息
Log.e() Error//用于打印程序中的错误信息
为什么用Log不用System.out.println
System.out.println()的缺点:
日志打印不可控制、打印时间无法确定、不能添加过滤器、没有日志级别之分…
谢谢阅读