第一章 第一行代码-第二版(郭霖著)笔记(初识Android)
目录
一、Android简介
1.android系统架构
2.Android应用开发特色
二、工具准备
Tips:新建项目的时候是否勾选use legacy android.support libraries
三、分析第一个Android程序
1.app目录详解
2.分析HelloWorld项目
3.详解项目中的资源
4.详解build.gradle文件
四、Android中的日志工具类Log
1.Logcat中的过滤器
linux kernel(Linux内核层):提供硬件底层驱动
libraries(系统运行库层):提供了主要的特性支持,如SQLite库、Webkit库;还包含android runtime(android运行时库)
application framework(应用框架层):提供了构建应用程序时可能用到的各种API
applications(应用层):手机上的应用程序
1.四大组件
活动(Activity):看得到的
服务(Service):看不到的
广播接收器(Broadcast Receiver):接受其他应用的广播消息
内容提供器(Content Provider):应用程序间共享数据
2.丰富的系统控件
3.SQLite数据库(嵌入式关系型数据库,支持标准的SQL语法,还可以通过Android API进行操作)
4.强大的多媒体
5.地理位置定位
JDK
Android SDK
Android Studio
不要勾选,因为已经使用androidx类库替代了
1. .gradle和.idea
自动生成,无需关心
2.app
放置项目的代码、资源等内容
3.build
包含编译时自动生成的文件,无需关心
4.gradle
包含了gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否需要联网下载gradle
5. .gitignore
将指定的目录或文件排除在版本控制之外
6.build.gradle
项目全局的gradle构建脚本
7.gradle.properties
全局的gradle配置文件
8.gradlew和gradlew.bat
在命令行页面中执行gradle命令
9.HelloWorld.iml
IDEA自动生成,标识这是一个IDEA项目
10.local.properties
指定本机中Android SDK路径
11.setting.gradle
指定项目中所有引入的模块
1.build
编译时自动生成
2.libs
第三方jar包
3.androidTest
编写测试用例,自动化测试
4.java
Java代码或Kotlin代码
5.res
资源目录:图片放到drawable目录录下,布局放到layout目录下,字符串放到values目录下
6.AndroidManifest.xml
整个项目的配置文件,四大组件都需要在这个文件注册
7.test
自动化测试的另一种方式
8. .gitignore
app模块内指定的目录和文件排除在版本控制之外
9.app.iml
IDEA项目自动生成,无需关心
10.build.gradle
app模块的gradle构建脚本
11.proguard-rules.pro
指定项目代码的混淆规则,防止打成的安装包文件被破解
表示MainActivity是这个项目的主活动,点击应用首先出现的就是这个活动
创建的活动继承了AppCompatActivity,这是一种向下兼容的Activity(兼容到Android2.1)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
为当前的活动引入activity_main这个布局
drawable开头:放图片
mipmap开头:放应用图标
values开头:放字符串、样式、颜色等配置
layout:放布局文件
HelloWorld
在代码中通过R.string.app_name可以获得该字符串的引用;在XML中通过@string/app_name可以获得该字符串的引用。
最外层目录下的build.gradle文件:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:4.1.2"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
google()是Google自家的扩展依赖库
jcenter()是第三方代码托管库,现在已经废弃,迁移至mavenCentral()
classpath "com.android.tools.build:gradle:4.1.2" 表明Gradle构建的是Android项目
app目录下的build.gradle文件:
plugins {
id 'com.android.application'
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.jack.helloworld"
minSdkVersion 21
targetSdkVersion 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.1.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
com.android.application表示这是一个应用程序模块, com.android.library表示这是一个库模块。二者最大的区别在于,应用程序模块是可以直 接运行的,库模块只能作为代码库依附于别的应用程序模块来运行。
applicationId "com.jack.helloworld" 是每一个应用的唯一标识符,绝对不能重复,默认会使用我们在创建项目时指定的包名
Log(android.util.Log)
Log.v()对应级别verbose,日志信息
Log.d()对应级别debug,调试信息
Log.i()对应级别info,数据信息
Log.w()对应级别warn,警告信息
Log.e()对应级别error,错误信息
Log.d("HelloWorldActivity","onCreate excute");
第一个参数是tag,一般传入当前类名,用于对打印信息过滤;第二个参数是msg,打印的具体内容
Firebase是Google提供的一个开发者工具和基础架构平台,我们可以不用管它
data这个过滤器只会显示tag名称为data的日志