Android介绍
1.Android系统架构
1.Linux内核层:提供底层驱动
2.系统运行库:通过一些c/c++库为Android系统提供主要的特性支持,还有Androidd运行时库,Android运行时库中还包含了Dalvik虚拟机(5.0系统之后改为了ART运行环境)
3.应用框架层:提供了构建应用程序时可能用到的各种API
4.应用层:所有安装在手机上的应用程序都属于这一层。
2.Android四大组件
1.Activity
2.Service
3.BroadcastReceiver
4.ContentProvider
分析项目
- .gradle和.idea 这两个目录下放置的都是Android Studio自动生成的一些文件。无需关心
- .app项目中的代码,资源等内容都是防止在这个目录下的。
- build这个目录主要包含了一些在编译时自动生成的文件,无需关心
- gradle 这个目录下包含了gradle wrapper的配置文件。Android studio会自动根据本地缓存情况决定是否需要联网下载gradle
- .gitignore 这个文件时用来将指定的目录或文件排除在版本控制之外的
- build.gradle 这个时全局的gradle构建脚本。
- gradle.properties 这个文件时全局的gradle配置文件,在这里配置的属性会影响到项目中所有的gradle编译脚本
- gradlew和gradlew.bat 这两个文件时用来命令行界面中执行gradle命令的,gradkew是在Linux或Mac系统中使用的,gradlew.bat是在Window系统中使用的
- HelloWorld.iml iml文件是所有IntelliJ IDEA项目都会自动生成的一个文件
- local.properties 这个文件用于指定本机中的Android SDK路径
- settings.gradle 这个文件用于指定项目中所有引入的模块(由于项目中只有一个app模块,所以该文件也就只引入了app这一个模块)
app目录下的内容进行分析 - build 这个目录和外层目录相似,也包含了一些在编译时自动生成的文件
- libs 需要把第三方jar包放在lib目录下
- androidTest 此处是用来编写AndroidTest测试用例,可以对项目进行一些自动化测试
- java java目录是放置我们所有Java代码的地方(Kotlin代码也放在这里)
- res 这个项目中使用到的所有图片,布局,字符串等资源都放在这个目录下
- AndroidManifest.xml 这是整个Android项目配置文件,所有四大组件在这里注册
- test 此处用来编写Unit Test测试用例的
- .gitignore这个文件用于app模块内指定的目录或文件排除在版本控制之外,作用和外层的.gitignore文件类似
- app.iml IntelliJ IDEA项目自动生成文件
- build.gradle app模块的gradle构建脚本,这个文件会指定很多项目构建相关的配置
- proguard-rules.pro 这个文件用于指定项目代码的混淆规则,从而让破解者难以阅读
分析AndroidManifest.xml
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这段代码表示对MainActivity进行注册 。< action android:name=“android.intent.action.MAIN” />和< category android:name=“android.intent.category.LAUNCHER” />表示MainActivity是这个项目主Activity。
详解build.gradle文件
buildscript {
ext.kotlin_version = '1.3.72'
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/'}
maven { url'https://maven.aliyun.com/repository/public/' }
maven { url'https://maven.aliyun.com/repository/google/' }
maven { url'https://maven.aliyun.com/repository/jcenter/' }
maven { url'https://maven.aliyun.com/repository/central/' }
mavenLocal()
mavenCentral()
/*
google()
jcenter()
*/
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/'}
maven { url'https://maven.aliyun.com/repository/public/' }
maven { url'https://maven.aliyun.com/repository/google/' }
maven { url'https://maven.aliyun.com/repository/jcenter/' }
maven { url'https://maven.aliyun.com/repository/central/' }
mavenLocal()
mavenCentral()
/*
google()
jcenter()
*/
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
两处repositories的闭包都声明了google()和jcenter()两行配置,他们都分别对应了一个代码仓库。google仓库中包含的主要是Google自家的扩展依赖库,而jcenter仓库中包含的大多是一些第三方的开源库。
dependencies闭包中使用classpath声明了两个插件:一个Gradle插件和一个Kotlin插件。
app目录下的build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.example.servicetest"
minSdkVersion 21
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 {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
首先第一行应用了一个插件,一般有两个值可选:com.android.application表示这是一个应用程序模块,com.android.library表示这是一个库模块。二者最大的区别在于,应用程序模块是可以直接运行的,库模块只能作为代码库依附在别的程序模块来运行。
紧接着是一个大的android闭包,这个闭包力可以配置项目构建的各种属性。compileSdkVersion是项目编译版本,buildToolsVersion 是项目构建工具版本。
dependencies闭包功能非常强大,里面指定当前项目的所有的依赖关系。通常Android Studio项目一共有3种依赖方式:本地依赖,库依赖,远程依赖。