当前位置: 首页 > news >正文

【Android】系统源码下载及编译

源码及编译

步骤 1:创建一个空目录来存放源码:

mkdir aosp
cd aosp

步骤 2:获取最新版本的 repo 并签出 android-8.1.0_r1 分支:

repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r1

其中,android-8.1.0_r1 代表源码标记,代表我们将要获取 Android 8.1 的源码,如需查看其他版本的源码标记,可参阅 源代码标记和 build。

步骤 3:将 Android 源码从默认清单中指定的代码库下载到本地工作目录:

repo sync

步骤 4:创建本地分支并关联 repo 上的所有仓库:

repo start ycx-dev --all	

步骤 5:使用 envsetup.sh 脚本初始化编译环境:

source ./build/envsetup.sh

步骤 6:选择编译目标:

lunch aosp_arm64-eng

编译目标的格式说明:编译目标的格式是 BUILD-BUILDTYPE ,如 aosp_arm64-eng 这个目标,它的 BUILD 是 aosp_arm64,BUILDTYPE 是 eng 。

BUILD 指的是特定功能的组合的特定名称,即表示编译出的镜像可以运行在什么环境,例如 aosp_arm64-eng 中的 aosp(Android Open Source Project) 代表 Android 开源项目,arm 表示系统是运行在 arm 架构的处理器上的,arm64 则是指 64 位 arm 架构处理器

想查看 Android 设备的 cpu 架构,可以执行命令:adb shell getprop ro.product.cpu.abi

BUILDTYPE 指的是编译类型,通常有三种:

  • user:表示编译出的系统镜像版本可以用来正式发布到市场,这个版本是不能 root 的
  • userdebug:在 user 版本的基础上开放了 root 权限和 debug 权限
  • eng:表示开发工程师版本,拥有 root 权限,此外还附带了许多 debug 工具

如果我们在终端输入 lunch 命令,将会列出所有的编译目标:

在这里插入图片描述

步骤 7:开始编译(设置8个线程同时编译):

m -j8

参与编译的线程并不是越多越好,通常是根据你机器 cup 的核心来确定,公式为:core * 2,即当前 cpu 的核心的 2 倍

我们可以执行 cat /proc/cpuinfo| grep "cpu cores"| uniq 命令查看电脑 cpu 的核心数。

编译问题

错误 1:flex-2.5.39: loadlocale.c:130:_nl_intern_locale_data

在这里插入图片描述

解决方法:在终端输入命令:export LC_ALL=C,然后重新编译即可。

错误 2:xmllint: command not found

解决方法:在终端输入命令:sudo apt-get install libxml2-utils,然后重新编译即可。

编译单模块并运行

例如,我们修改了 SystemUI 模块的代码,需要编译到机器上运行看看效果,那么可以这样,

步骤 1:在当前源码目录下执行编译命令:

make SystemUI

稍等片刻,就可以看见编译成功了:

在这里插入图片描述

步骤 2:获得系统写入权限:

adb root && adb remount

步骤 3:接下来把编译产物 push 到设备上即可:

adb push out/target/product/xxx/product/priv-app/SystemUI /system/product/priv-app/

步骤 4:重启设备上层:

adb shell stop && adb shell start

重启完毕后即可看到修改后的效果了。

http://www.lryc.cn/news/6451.html

相关文章:

  • 基于HTML实现浪漫情人节表白代码(附源代码)
  • PCL 平面拟合——RANSAC
  • 【Linux之Shell脚本实战】监控系统的磁盘空间使用率
  • 【Python安全编程】Python实现网络主机和端口扫描
  • 四大垃圾回收算法七大垃圾回收器
  • P1217 [USACO1.5]回文质数 Prime Palindromes
  • 用大白话给你科普,到底什么是 API(应用程序编程接口)?
  • 企业电子招采系统源码——信息数智化招采系统
  • 【vnc】Ubuntu20.04+vnc安装和配置(中文输入法)
  • 【排序算法】数据结构排序详解
  • 【docker知识】DockerFile语法 1:注释指令、解释器指令
  • [失业前端恶补算法]JavaScript leetcode刷题top100(一)
  • HTTP协议
  • javafx学习教程
  • 百度百科创建词条教程合集分享,赶紧收藏起来
  • 镜像恒流源电路分析
  • 奥威软件宏昊化工启动BI项目,打造智能制造标杆
  • GitHub访问问题与FastGithub下载及使用(详细篇)
  • 这个打上实时补丁的Linux内核,大家可以看一下
  • 三维形体的表面积
  • 二维码数据压缩实践 | 使用python对二维码数据进行压缩 |不乱码,支持中文
  • C语言学习_DAY_3_基本数据类型_运算符与表达式【C语言学习笔记】
  • c++练习题(4)
  • 腾讯云 cos 字体在CDN上跨域处理
  • api是什么意思?又该如何使用呢?
  • JavaScript------面向对象
  • charles+夜神模拟器抓包
  • 【STC15单片机】模拟I2C操作AT24C02数据读取【更新中】
  • Hadoop
  • ArrayList源码+扩容机制分析