Android系统架构
- Linux内核层 Linux内核层为Android设备各种硬件提供底层驱动。
- 系统运行库层 通过一些C/C++库为Androin系统提供主要特性支持,以及Java核心库
- 应用框架层 提供构建应用时的各种API
- 应用层 安装的各种应用
四大组件
- 活动(Activity) Android应用中,可以看见的部分都在活动中
- 服务(Service) 后台运行,即使应用退出仍然运行
- 广播接收器(BroadcastReceiver) 接受来自各处的广播消息以及向外发送广播消息
- 内容接收器(ContentProvider) 应用程序之间共享信息
Android Studio 工程目录详解
.gradle 自动生成的文件,无需手动编辑
.idea 自动生成的文件,无需手动编辑
app 项目中详细代码以及资源
build 编译时自动生成的文件
gradle gradle wrapper的配置文件
.gitignore 版本控制
build.gradle 全局gradle构建脚本
gradle.properties 全局的gradle配置文件
gradlew/gradlew.bat 在命令行界面中执行gradle命令的
xxxxx.iml 自动生成的一个文件,无需修改
local.properties 指定本机中的Android SDK路径
settings.gradle 指定项目中所有引入的模块
除了app目录以外,大多数文件以及目录都是自动生成,无需修改,app中包含所有源码文件。
build 编译时自动生成的文件,
libs 项目中使用到了第三方jar包
androidTes 用来编写Android Test测试用例
java 放置我们所有Java代码的地方
res 项目中使用到的所有图片、布局、字符串等资源
AndroidManifest.xml 整个Android项目的配置文件
test 用来编写Unit Test测试用例
.gitignore 将app模块内的指定的目录或文件排除在版本控制之外
app.iml 项目自动生成的文件
build.gradle 这是app模块的gradle构建脚本
proguard-rules.pro 指定项目代码的混淆规则
对于res文件夹下的资源,由两种方法引用
//定义个程序名的字符串,位于res/ values/strings.xml文件
<resources>
<string name="app_name">HelloWorld</string>
</resources>
代码中通过
R.string.app_name
XML中通过
@string/app_name
build.gradle文件详解
Android Studio是采用Gradle来构建项目的。项目中有两个build.gradle文件,一个是在最外层目录下的,一个是在app目录下的。这两个文件对构建Android Studio项目都起到了至关重要的作用
//外层中build.gradle文件
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
两处repositories的闭包中都声明了jcenter()这行配置,它是一个代码托管仓库,很Android开源项目都会选择将代码托管到jcenter上,dependencies闭包中使用classpath声明了一个Gradle插件,最后面的部分是插件的版本号。最外层目录下的build.gradle文件分析完了,通常情况下并不需要修改这个文件中的内容,除非需要添加一些全局的项目构建配。
//内层build.gradle文件
apply plugin: 'com.android.application'
android {
compileSdkVersion 29//指定项目编译版本
buildToolsVersion "29.0.2"//指定项目构建版本
defaultConfig {
applicationId "com.example.testapplication"//指定项目包名
minSdkVersion 15//最低兼容版本
targetSdkVersion 29//已在该版本做过详细测试
versionCode 1//指定项目版本号
versionName "1.0"//指定项目版本名
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {//指定生成的安装文件配置
release {
minifyEnabled false//是否进行代码混淆
proguardFiles getDefaultProguardFile('proguard-android-optimize.
txt'), 'proguard-rules.pro'//混淆时的规则文件
}
}
}
dependencies {//指定项目的依赖关系
//声明本地依赖 libs下的所有jar添加到项目
implementation fileTree(dir: 'libs', include: ['*.jar'])
//声明远程依赖包
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
//声明测试库
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
Log日志工具
Android中的日志工具类是Log(android.util.Log)。
- Log.v()。用于打印那些最为琐碎的、意义最小的日志信息。verbose
- Log.d()。用于打印一些调试信息,debug
- Log.i()。用于打印一些比较重要的数据,info
- Log.w()。用于打印一些警告信息,warn
- Log.e()。用于打印程序中的错误信息,error
//举例
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch (requestCode){
case 1 :
if(resultCode == RESULT_OK){
String returnData = data.getStringExtra("data_return");
Log.d("MainActivity",returnData);
}
break;
default:
}
}
注意:不建议使用System.out.println()方法的!该方法的日志打印不可控制、打印时
间无法确定、不能添加过滤器、日志没有级别区分。