基础知识 | 学习笔记

简介: 简介:快速学习基础知识

开发者学堂课程【开源 Android 容器化框架 Atlas 开发者指南: 基础知识】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/392/detail/5018


基础知识

内容介绍:

一. android 打包基础

二. Gradle 基础

三. android 启动流程分析

四. android 插件华基础


一、 Android 打包基础。

android 应用是一个 apk 文件,apk 文件从项目中生成的具体步骤如下。

image.png

第一步,处理资源文件,通过 aapt 打包 res 资源文件,生成 R.Java resource.ARSC 和 ReS 文件。同时注意 XML 文件汇编译为二进制的 XML 文件,目的是为了提高反序列化的速度,同时也减少了空间的占用。这里并不处理 asset 文件夹下面的文件。

第一步的产物是 resource.AP 下划线,这是一个压缩文件,里面包括 resource.arsc res 文件夹和 android manifest 文件。

第二步,处理 AIDL 文件,生成对应的 Java 中的接口文件。

第三步,编译 Java 文件,通过 Java c 将前两步生成的 R.Java,Java 接口文件和项目中的 Java 源文件编译成 class 文件。

第四步,Class 2dex 通过 dex 命令将前面生成的 class 文件与第三方库中的 class 文件处理成 dex 文件。这一步并不是简单的打包压缩,dex 命令会将 class 转为 Derek 字节码,生成常量池,消除冗余数据等。

第五步,Apk 打包,通过 apk builder 工具将 aapt 生成的 resource.AP 下划线文件与 set 文件,检查的文件,还有 class.dex 文件一起打包生成 apk 文件。

第六步,签名。通过 Jarsigner 的工具,这上面的 apk 进行 debug 或 release 签名。

第七部 zip align 对齐。是指对签名后的 apk 文件进行对齐处理,使 apk 中所有资源文件距离文件起始偏移为四字节的整数倍。从而通过内存映射访问 apk 文件时会更快,同时也减少了在设备上运行时的内存消耗。


二、 Gradle 基础。

这里列出四篇文档的链接,简单了解即可。

image.png


三、 Android 启动流程分析。

Atlas 框架运行时是在应用程序启动后进行初始化的操作。其中反射应用了一些系统的类 ,方法 ,字段。想理解 atlas 为什么这么做?了解 android 应用的启动流程就是十分必要的。

先说下 AMS。Android 一个应用就是一个进程,系统对应用的管理是一个专门的 service activity manager service。简称为 AMS,AMS 是一个系统级的 service ,系统通过它来管理应用进程的生命周期,包括应用的 activity service 等生命周期。Activity manager proxy 就是 ams 的代理,供应进程调用。

Application thread proxy 应用进程的代理,供AMS调用。这就是跨进程的调用。

应用的启动是从其他应用调用 start activity 开始的,通过代理请求 ams 启动activity。AMS 创建进程并进入 activity thread main 入口,在main入口儿主线程初始化生成 looper 便开始 loop 。Activity thread main 函数,也就是 android 应用程序的入口。应用进程将实例化的 application thread binder 传给 AMS,这样ams 就可以通过代理对应用进程进行访问。

Application thread 是 activity thread 的一个内部类。Ams通过代理请求 Activity application thread 通知主线程执行该请求,然后 activity thread 实行 activity 的启动,这样就完成了应用的启动。

image.png


四、 Android 插件化基础。

要想实现插件的加载和运行。就要解决两个重要的问题,一是类的加载和运行,二是资源的加载和运行。类的部分,了解 android 中的 class loader 机制。

资源的运行,要了解 resource 类和 certain manage 类加载资源的原理。

相关文章
|
SQL XML Oracle
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
705 0
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
|
Java
java8中List对象转另一个List对象
java8中List对象转另一个List对象
606 0
|
编解码 自然语言处理 算法
开源版图生视频I2VGen-XL:单张图片生成高质量视频
VGen是由阿里巴巴通义实验室开发的开源视频生成模型和代码系列,具备非常先进和完善的视频生成系列能力
|
10月前
|
存储 安全 搜索推荐
几种常见教育视频点播系统建设方案和成本分享
教育行业视频点播系统建设方案分享,点量软件团队专注视频点播十五年,无论是局域网、公网点播视频建设均可。终端可应用于手机、电视盒、智能电视等多种设备,在不同的设备中都可以流畅播放。
276 3
几种常见教育视频点播系统建设方案和成本分享
|
测试技术 Python
AB测试实战(二)
AB测试是一种数据驱动的产品优化方法,用于比较不同版本的网页、应用界面或营销策略的效果。
|
12月前
|
IDE 调度 开发工具
鸿蒙Flutter实战:08-如何调试代码
本文介绍了鸿蒙Flutter项目的开发环境搭建、配置、日志查看及调试方法。首先按照指南搭建开发环境,安装IDE插件;接着配置vscode的launch.json文件;通过IDE调试控制台或命令行查看日志;提供两种调试Flutter的方式,包括IDE直接运行和使用DevEco;最后介绍ArkTs和Webview的调试方法。
402 0
|
应用服务中间件 nginx
Nginx反向代理其他服务
Nginx反向代理其他服务
|
网络安全 数据安全/隐私保护 网络架构
|
SpringCloudAlibaba Nacos 数据中心
SpringCloudAlibaba Nacos集群改为单机版启动
SpringCloudAlibaba Nacos集群改为单机版启动
308 0
|
Java 应用服务中间件 PHP
Nginx——*5 connect() failed (111: Connection refused) while connecting to upstream
Nginx——*5 connect() failed (111: Connection refused) while connecting to upstream
1293 0
Nginx——*5 connect() failed (111: Connection refused) while connecting to upstream