点击android studio的运行按钮 -> 显示页面 这个过程都干了什么?

0 阅读4分钟

开发者点击 Run 后:

一、IDE 准备阶段

说明:Android Studio 视角,决定“跑什么、跑到哪、用什么构建工具”

  1. Android Studio 识别当前项目是 Gradle 工程,并根据 Run Configuration (Run Configuration 是 Android Studio 里“这次运行要怎么跑”的配置)确认要:运行哪个 module,比如 app运行哪个构建变体,比如 debug安装到哪个设备,比如 Pixel 模拟器启动哪个 Activity是否带 debugger,是否先清除旧 App是否用特定安装方式。
  2. Android Studio 通常使用项目里的 Gradle Wrapper(启动器)。Wrapper 会根据 gradle/wrapper/gradle-wrapper.properties 确定并启动对应版本的 Gradle(干活的构建引擎)。

二、Gradle 构建阶段

说明:Gradle 视角,把源码和资源变成 APK

  1. Gradle 进入初始化阶段,读取 settings.gradle.kts,确定项目名称、插件仓库、依赖仓库以及包含哪些模块,比如 :app。
  2. Gradle 进入配置阶段,读取根目录 build.gradle.kts 和 app/build.gradle.kts。Android Gradle Plugin 根据这些配置创建 Android 构建任务和任务依赖关系。
  3. Gradle 执行类似 :app:assembleDebug 的任务(第一次运行通常会构建 APK;但后续可能用增量构建、Apply Changes、只安装变化部分),把 Kotlin / Java 代码变成 dex(编译:Kotlin / Java -> .class 字节码 -> D8 转成 .dex),处理资源和 Manifest,生成 R、BuildConfig、处理后的 Manifest、编译后的 class、dex 文件等中间产物(项目构建产生的大多数东西在 app/build/;Gradle 自己的缓存可能在 .gradle/ 和 ~/.gradle/),最终打包并签名生成 debug APK。

三、部署阶段

说明:Android Studio + ADB + Android 系统配合,把 APK 安装到设备/模拟器中。

  1. Android Studio 确保目标模拟器已经启动。如果没启动,就先启动对应AVD(Android Virtual Device,Android 虚拟设备)。Android Emulator 是“模拟器程序”,AVD 是“要模拟哪台手机的配置
  2. Android Studio 通过 ADB (电脑和 Android 设备之间的桥)和模拟器通信,Android Studio 发起安装请求,adb把请求交给android系统,android系统安装APK 。(adb install app-debug.apk的意思不是adb安装,而是通过 ADB 把安装请求交给 Android 系统)。
  3. Android 系统收到安装请求后,开始安装 APK。安装过程中,系统会解析 APK 里的 AndroidManifest.xml,读取并登记 App 的包名、组件、权限、入口 Activity 等信息,系统会登记包信息、组件、权限、签名、代码路径等,并准备/维护应用数据目录,让系统知道这个 App 已安装。
  4. 安装完成后,系统已经知道这个 App 怎么启动、有哪些组件和权限。之后启动 App 时,系统会根据安装阶段登记的信息找到入口 Activity。

四、Android 系统运行阶段

说明:Android 系统根据安装阶段登记的信息,启动 App 进程、创建 Activity,并显示页面。

  1. Android Studio 通过 ADB 请求android系统启动 App。模拟器里的 Android 系统接手启动流程,根据安装阶段登记的信息找到入口 Activity,也就是 MainActivity(这里不一定是这个文件,通常是 AndroidManifest.xml 里带(如下图))。

    1.  <intent-filter>
           <action android:name="android.intent.action.MAIN" />
           <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
      
  2. 为了不让用户看到白屏/黑屏,Android 系统会先显示一个启动画面(一般是应用app图标居中的那个界面),在此期间,系统创建新App 进程,会先创建 Application,并调用 Application.onCreate(),然后再创建 MainActivity。

  3. 系统调用 MainActivity.onCreate()。在 onCreate 里,App 通常通过 setContent 或 setContentView 设置页面内容(我要显示这些内容)。

  4. onCreate 结束后,系统继续调用: MainActivity.onStart():Activity 要变得可见 MainActivity.onResume():Activity 要进入前台

  5. 页面内容设置好以后,Android 系统会进行测量大小、布局位置、绘制出来,最终页面显示在模拟器上。

总结

Android Studio 点击 Run 后,IDE 先根据 Run Configuration 决定运行目标;然后通常通过 Gradle Wrapper 启动指定版本的 Gradle;Gradle 根据 settings.gradle.kts 和各级 build.gradle.kts 完成配置与构建,生成 APK;Android Studio 再通过 ADB 请求设备系统安装 APK;安装完成后,通过 ADB 请求系统启动指定 Activity;Android 系统创建进程、初始化 Application 和 Activity,最后完成布局测量、绘制并显示页面。