android 启动命令,Android启动方式简述

前言

我们点击Android应用图标启动应用程序的时候,有时候可以马上启动,但有时候很缓慢并进入空白页,这是为什么呢?这是因为Android的启动方式分为冷启动和热启动。

Android启动方式

Android启动方式有两种:冷启动,热启动

冷启动:在安卓系统中,系统为每个运行的应用至少分配一个进程 (多进程应用申请多个进程) 。从进程角度上讲,冷启动就是在启动应用前,系统中没有该应用的任何进程信息 (包括 Activity、Service 等) 。所以,冷启动产生的场景就很容易理解了,比如设备开机后应用的第一次启动,系统杀掉应用进程 (如:系统内存吃紧引发的 kill 和 用户主动产生的 kill) 后 的再次启动等。那么自然这种方式下,应用的启动时间最长,因为相比另外两种启动方式,系统和我们的应用要做的工作最多。

应用发生冷启动时,系统有三件任务要做:

1.开始加载并启动应用;

2.应用启动后,显示一个空白的启动窗口;

3.创建应用进程信息;

系统创建应用进程后,应用就要做下面这些事情:

1.初始化应用中的对象 (比如 Application 中的工作);

2.启动主线程 (UI 线程) ;

3.创建第一个 Activity;

4.加载内容视图 (Inflating) ;

5.计算视图在屏幕上的位置排版 (Laying out);

6.绘制视图 (draw)。

热启动:当启动应用时,后台存在该应用的进程(back键,home键,应用退出,但是没有销毁),从已有的进程中启动。

热启动的特点:从已有的进程中启动,不需要创建和初始化Application ,直接创建和初始化它的Launch Activity

优化冷启动时间

1.application的启动优化:Application启动会经过attachBaseContext-->onCreate;

这两个方法不执行完是不会出现lanucher页面的,所以我们需要对attachBaseContext和onCreate进行优化。

2.启动页优化:application优化完了以后,就会执行启动页的onCreate,我们发现oncreate一旦耗时,也会导致启动页有一瞬间的卡顿,精益求精,我们把启动页的启动逻辑延迟初始化并通知application进行初始化,然后等待application初始化完成的事件之后,继续往下走,直到进入主页; 启动页的优化逻辑比较简单,只是纯业务的上的调整。

3.主页优化:主要优化onCreate即可。把可以放线程初始化的都放到线程里去。

参考:https://juejin.im/entry/582adaad570c35006cdcb615

测试应用启动时间

1.可以通过代码打桩,计算启动时间

2.可以通过秒表计算(肉眼观察,这个很low)

3.通过adb命令:

adb shell am start -W [packageName]/[packageName.launchActivity]

<think>好的,用户想了解Android源代码的编译过程,步骤和流程。我需要根据提供的引用内容整理出一个清晰的步骤指南。首先,要确定系统环境,可能包括Linux发行版、JDK版本、依赖库等。根据引用[3],用户提到新公司的Linux电脑需要配置环境,所以需要详细列出系统要求,比如Ubuntu版本,安装依赖的命令。 接下来,下载源代码部分。引用[3]提到参考Google官方流程,可能需要用repo工具初始化仓库,同步代码。需要解释repo init和repo sync的使用方法,以及选择分支或标签。 然后是准备编译环境,设置环境变量,比如source build/envsetup.sh,选择lunch目标。这里可能需要说明不同lunch选项对应的设备类型,比如aosp_arm-eng,用户可能需要根据实际情况选择。 编译部分,引用[1]和[2]提到编译过程中会遇到很多问题,需要提醒用户注意常见错误,比如内存不足、依赖缺失。还要注意是否编译内核,引用[5]指出默认不编译内核,除非需要修改驱动,这时候需要单独编译内核。 生成镜像文件后,刷机或运行模拟器。需要解释生成的img文件如何刷入设备,或者使用emulator启动模拟器。可能引用[2]中的刷机步骤,但用户可能只是想知道基本流程,不一定需要详细刷机步骤。 最后,常见问题部分要总结引用中提到的各种问题,比如编译中断、资源文件修改后的编译(引用[4]中的framework资源编译),以及如何解决依赖问题。此外,优化编译速度的方法,比如ccache,也是用户可能关心的。 需要确保步骤结构清晰,分点说明,每个步骤包含必要的命令和解释。同时,相关问题要围绕编译流程可能涉及的扩展问题,比如性能优化、内核编译、环境配置等。还要注意用户提到的“尽量保证回答真实可靠”,所以需要基于引用内容,避免猜测。 检查是否遵循了系统级指令,数学公式是否正确,但这个问题可能不涉及太多数学内容,主要代码块是命令和脚本。确保所有代码块用反引号包裹,独立公式用$$,但这里可能用不上。引用标识要正确添加到对应的位置,比如编译问题引用[1],环境设置引用[3],内核编译引用[5]等。 最后生成相关问题,可能涉及编译优化、常见错误解决、内核编译、环境配置等,确保问题与编译流程相关,帮助用户深入理解。</think>### Android 源码编译步骤及流程 #### 一、系统环境准备 1. **操作系统要求** - 推荐使用 **Ubuntu 18.04/20.04 LTS**(其他 Linux 发行版需适配依赖)[^3]。 - 至少 **16GB 内存**(建议 32GB 以上,否则易出现编译中断)[^1]。 - 磁盘空间需预留 **250GB 以上**(源码 + 编译产物)[^3]。 2. **安装依赖工具** ```bash sudo apt update sudo apt install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig ``` 3. **配置 Java 环境** - Android 7.0 (Nougat) 及以下:OpenJDK 8 - Android 8.0 (Oreo) 及以上:OpenJDK 11 ```bash sudo apt install openjdk-11-jdk ``` --- #### 二、源码下载 1. **初始化 Repo 工具** ```bash mkdir ~/android-source && cd ~/android-source curl https://storage.googleapis.com/git-repo-downloads/repo > repo chmod +x repo ./repo init -u https://android.googlesource.com/platform/manifest -b <分支名> # 如 android-13.0.0_r1 ``` 2. **同步源码** ```bash ./repo sync -j4 # -j 后为并发线程数,根据网络调整 ``` - 若中断可重复执行 `repo sync`[^3]。 --- #### 三、编译环境配置 1. **加载编译脚本** ```bash source build/envsetup.sh ``` 2. **选择编译目标** ```bash lunch # 交互式选择,例如 aosp_arm-eng(模拟器)或具体设备型号 ``` 3. **启用编译缓存(可选)** ```bash export USE_CCACHE=1 ccache -M 50G # 设置缓存大小 ``` --- #### 四、开始编译 1. **全量编译** ```bash make -j$(nproc) # 使用全部 CPU 核心加速 ``` - 若失败,可通过 `m` 或 `mma` 命令局部重编[^2]。 2. **生成镜像文件** - 编译成功后,产物位于 `out/target/product/<设备名>/`,包含 `system.img`, `boot.img` 等[^3]。 --- #### 五、刷机或运行模拟器 1. **刷机到设备** ```bash adb reboot bootloader fastboot flashall -w # 需设备进入 fastboot 模式 ``` 2. **启动模拟器** ```bash emulator # 需提前配置环境变量 ``` --- #### 六、常见问题与解决 1. **编译中断** - **内存不足**:减少并发线程数(`make -j4`)[^1]。 - **依赖缺失**:根据报错安装对应库(如 `libssl-dev`)[^1]。 2. **修改 Framework 资源** - 修改后执行 `mm` 或 `mmm frameworks/base` 局部编译[^4]。 3. **编译内核(可选)** ```bash cd kernel/msm # 示例路径 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- defconfig make -j$(nproc) ``` - 默认编译不包含内核,需手动处理[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值