Android系统采用分层架构,自下而上分别是:Linux内核层与可信执行环境(TEE)、硬件抽象层(HAL)、原生C/C++库与Android运行时环境(ART)、应用程序框架层(Framework)和应用层(Apps)

image.png

安卓架构

  • Linux 内核层
  • 系统运行库层
  • 应用框架层
  • 应用层

image.png

四大组件

Android 系统到底提供了哪些东西,供我们可以开发出优秀的应用程序。
image.png

活动是所有 Android 应用程序的门面, 凡是在应用中你看得到的东西,都是放在活动中的 。服务就比较低调了,你无法看到 它,但它会一直在后台默默地运行,即使用户退出了应用,服务仍然是可以继续运行的。 广播接收器可以允许你的应用接收来自各处的广播消息,比如电话、短信等,当然你的 应用同样也可以向外发出广播消息。 内容提供器则为应用程序之间共享数据提供了可 能,比如你想要读取系统电话簿中的联系人,就需要通过内容提供器来实现。

项目结构

开发准备

  • Android SDK
  • AndroidStudio Version4.1.4
  • JDK Version1.8

image.png

  • .gradle .idea

放置自动生成的一些文件。无需关心,都是AndroidStudio自动生成的一些文件。

  • app

主要的工作目录,项目代码,资源都在这里。

  • build 编译自动生成的文件。
  • src
    • main
      • AndroidMainifest.xml

程序注册的组件都要在这个文件里注册。

  • 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

第一个安卓应用

创建应用
image.png
Name参数就是装好APP的名称。Package name表示项目的包名。安卓是通过不同的包名来区分不同应用程序的。

image.png

  1. <activity android:name=".MainActivity">
  2. <intent-filter>
  3. <!--
  4. 非常重要
  5. 表示这个是程序的主活动,手机点击图标,首先启动的就是这个活动。
  6. -->
  7. <action android:name="android.intent.action.MAIN" />
  8. <category android:name="android.intent.category.LAUNCHER" />
  9. </intent-filter>
  10. </activity>

引用资源

res/values/strings.xml

  1. <resources>
  2. <string name="app_name">HelloWorld</string>
  3. </resources>

引用方式

  1. // 方式1 代码
  2. R.string.hello_world
  3. // 方式2 XML
  4. @string/hello_world

比如
image.png

build.gradle

可以看到有两个这个文件,一个是最外层,一个是app目录下的。

最外层

  1. buildscript {
  2. repositories {
  3. google()
  4. jcenter()
  5. }
  6. dependencies {
  7. classpath "com.android.tools.build:gradle:4.1.1" // 使用这个插件构建安卓应用
  8. classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20"
  9. }
  10. }
  11. allprojects {
  12. repositories {
  13. google()
  14. jcenter()
  15. }
  16. }
  17. task clean(type: Delete) {
  18. delete rootProject.buildDir
  19. }

内层

  1. plugins {
  2. id 'com.android.application' // 表示这是一个应用程序模块 com.android.library表示库模块
  3. id 'kotlin-android' // Kotlin 语言
  4. }
  5. // 大闭包
  6. android {
  7. compileSdkVersion 30 // 编译SDK版本
  8. buildToolsVersion "30.0.2" // 指定项目构建工具版本
  9. defaultConfig {
  10. applicationId "com.example.helloworld" // 项目包名
  11. minSdkVersion 26 // 项目最低兼容系统版本
  12. targetSdkVersion 30 // 在该目标版本桑做过充分测试
  13. versionCode 1 // 项目的版本号。
  14. versionName "1.0" // 版本名
  15. testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  16. }
  17. // 生成安装文件的相关配置。 通常两个子包 debug/release
  18. buildTypes {
  19. release {
  20. minifyEnabled false // 指定是否对项目的代码进行混淆proguardfiles表示混淆文件。
  21. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  22. }
  23. }
  24. compileOptions {
  25. sourceCompatibility JavaVersion.VERSION_1_8
  26. targetCompatibility JavaVersion.VERSION_1_8
  27. }
  28. }
  29. // 依赖关系 本地依赖/库依赖/远程依赖
  30. dependencies {
  31. implementation 'androidx.appcompat:appcompat:1.1.0'
  32. implementation 'com.google.android.material:material:1.1.0'
  33. implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
  34. testImplementation 'junit:junit:4.+' // 测试用例库
  35. androidTestImplementation 'androidx.test.ext:junit:1.1.1'
  36. androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
  37. }

日志工具

Android日志工具类。Log (android.util.Log)

技巧
方法内: 快速补全
image.png
方法外:快速补全 logtimage.png**

  1. D/MainActivity: onCreate: Yes

过滤器
image.png