Android系统采用分层架构,自下而上分别是:Linux内核层与可信执行环境(TEE)、硬件抽象层(HAL)、原生C/C++库与Android运行时环境(ART)、应用程序框架层(Framework)和应用层(Apps)
安卓架构
- Linux 内核层
- 系统运行库层
- 应用框架层
- 应用层
四大组件
Android 系统到底提供了哪些东西,供我们可以开发出优秀的应用程序。
活动是所有 Android 应用程序的门面, 凡是在应用中你看得到的东西,都是放在活动中的 。而服务就比较低调了,你无法看到 它,但它会一直在后台默默地运行,即使用户退出了应用,服务仍然是可以继续运行的。 广播接收器可以允许你的应用接收来自各处的广播消息,比如电话、短信等,当然你的 应用同样也可以向外发出广播消息。 内容提供器则为应用程序之间共享数据提供了可 能,比如你想要读取系统电话簿中的联系人,就需要通过内容提供器来实现。
项目结构
开发准备
- Android SDK
- AndroidStudio Version4.1.4
- JDK Version1.8
- .gradle .idea
放置自动生成的一些文件。无需关心,都是AndroidStudio自动生成的一些文件。
- app
主要的工作目录,项目代码,资源都在这里。
- build 编译自动生成的文件。
- src
- main
- AndroidMainifest.xml
- main
程序注册的组件都要在这个文件里注册。
libs 如果你的项目中使用到了第三方jar包,就需要把这些jar包都放在libs目录下,放在这个目 录下的jar包都会被自动添加到构建路径里去。
proguard-rules.pro
指定项目的混淆规则。代码开发完打包文件,不希望别人破解,对代码进行混淆。
- gradle
包含了gradle wrapper的配置文件。
这个目录下包含了 gradle wrapper的配置文件,使用 gradle wrapper I的方式不需要提前将 gradle 下载好,而是会自动根据本地的缓存情况决定是否需要联网下载 gradle。
- .gitignore
版本控制忽略文件
- build.gradle
gradle构建脚本
- gradle.properties
全局gradle的配置文件。
- gradlew gradlew.bat
windows和mac系统使用gradle命令
- local.properties
放置本机SDK 安卓
- settings.gradle
第一个安卓应用
创建应用
Name参数就是装好APP的名称。Package name表示项目的包名。安卓是通过不同的包名来区分不同应用程序的。
<activity android:name=".MainActivity">
<intent-filter>
<!--
非常重要
表示这个是程序的主活动,手机点击图标,首先启动的就是这个活动。
-->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
引用资源
res/values/strings.xml
<resources>
<string name="app_name">HelloWorld</string>
</resources>
引用方式
// 方式1 代码
R.string.hello_world
// 方式2 XML
@string/hello_world
比如
build.gradle
可以看到有两个这个文件,一个是最外层,一个是app目录下的。
最外层
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:4.1.1" // 使用这个插件构建安卓应用
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
内层
plugins {
id 'com.android.application' // 表示这是一个应用程序模块 com.android.library表示库模块
id 'kotlin-android' // Kotlin 语言
}
// 大闭包
android {
compileSdkVersion 30 // 编译SDK版本
buildToolsVersion "30.0.2" // 指定项目构建工具版本
defaultConfig {
applicationId "com.example.helloworld" // 项目包名
minSdkVersion 26 // 项目最低兼容系统版本
targetSdkVersion 30 // 在该目标版本桑做过充分测试
versionCode 1 // 项目的版本号。
versionName "1.0" // 版本名
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
// 生成安装文件的相关配置。 通常两个子包 debug/release
buildTypes {
release {
minifyEnabled false // 指定是否对项目的代码进行混淆proguardfiles表示混淆文件。
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'
}
日志工具
Android日志工具类。Log (android.util.Log)
技巧
方法内: 快速补全
方法外:快速补全 logt**
D/MainActivity: onCreate: Yes
过滤器