Android 源码下载以及编译指南

fbb7ea86e217c687751db05d989c92ae.gif

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、下载AOSP前的准备
二、国内网络下 clone 清华大学开源软件镜像
三、编写Python脚本,开始下载android 源码
四、源码下载工具包
五、编译

一、下载AOSP前的准备

想在国内网络下载AOSP源码,需要电脑配置如下环境

  • 1.安装Git

  • 2.安装 Python

  • 3.配置python脚本,硬盘大于100G

1. 安装 Git Bash

Git官网下载地址:https://git-scm.com/download/win

2.安装Python

Python 官网下载地址:https://www.python.org/downloads/

二、国内网络下 clone 清华大学开源软件镜像

1. clone 命令

// 没有翻墙网络 只能clone 清华镜像
git clone https://aosp.tuna.tsinghua.edu.cn/platform/manifest.git

2.操作截图

44b15a509b45df6c154a2fb5cf45ae72.jpeg

使用命令如下 clone 清华镜像操作步骤如上

3.操作结果

484a0a871dc7e4bc07bd891996867a70.jpeg

Clone 结束如上

4. 切换要下载的Android源码分支

比如我想下载到android-10.0.0_r40的源码,可以使用如下命令:

git switch -c android-10.0.0_r40

操作结果如下

0412e7d37f40deb5a76ca1177cf6c05b.jpeg

切换要选择下载的Android版本分支

三、编写Python脚本,开始下载android-10.0.0_r40 源码

1. 自动化下载Android 10 脚本参考如下

import xml.dom.minidom
import os
from subprocess import call## 注意地址中使用的是 "/" 而不是"\", unbantu 跟Windows 是有区别的#代码保存位置,硬盘建议大于100G
rootdir ="E:/AOSP/android_10_0_0_r40"#git 安装路径,可以使用 where git 命令查看 
git ="E:/software/git/path/mingw64/bin/git.exe"# 刚刚切换 android-10.0.0_r40 目录下的defaul.xml 文件
dom = xml.dom.minidom.parse("E:/AOSP/clone_tsinghua/manifest/default.xml")
root = dom.documentElement# clone 清华大学镜像库地址 
prefix= git +" clone https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/"
suffix=".git"if not os.path.exists(rootdir):os.mkdir(rootdir)for node in root.getElementsByTagName("project"):os.chdir(rootdir)d = node.getAttribute("path")last= d.rfind("/")iflast!=-1:d = rootdir +"/"+ d[:last]if not os.path.exists(d):os.makedirs(d)os.chdir(d)cmd =prefix+ node.getAttribute("name")+suffixcall(cmd)

2. 执行下载Android 10 的脚本

双击downloadAOSP.py或者执行 python downloadAOSP.py 既可以开始下载Android 10 源码,经过一段时间漫长等待,就可以查看Android Q的源码了。

3. 开始成功下载源码截图

e133ee7a38eafadc093a61971e7c3367.jpeg

双击downloadAOSP.py 即可开始Android 10的源码下载

四、源码下载工具包

1.源码下载工具包地址

百度网盘下载地址:https://pan.baidu.com/s/1GkGiKROmcfPD7oSL8EYhOw: 提取码: uiv4

链接: https://pan.baidu.com/s/1GkGiKROmcfPD7oSL8EYhOw 
提取码: uiv4

2.源码下载工具包内容

23394dce005f7d48fea46aea5e13e31b.jpeg

源码下载工具包

五 、编译指南

1. 查看项目所在分支

git branch -a
表示:查看并列出当前项目所有分支

Test@Test:/Test/android$ git branch -a
* linux_android_developmentmasterremotes/origin/A/B_update_linux_android_developmentremotes/origin/HEAD -> origin/master... ...remotes/origin/secure_linux_android_developmentremotes/origin/streamlined_code_engineering

编译方法

Android 源码编译,每个项目由于脚本各不相同,编译的命令 有时候也会有说差异。

google 官方编译命令如下

1.source ./build/envsetup.sh
2.lunch 项目
3.make -j64

单编 模块

我们常用 mmm 以及mm 来及对单模块进行编译。
mmm 与mm 主要区别在于你当前所在的目录位置。
如果当前正在所要编译模块的地方(需要有android.mk文件,才可以进行),请使用 mm,否则使用mmm

高通项目举例如下:

1. mmm使用举例(此时不在FM 目录)

比如单编FM,不在FM目录下,需要执行mmm vendor/qcom/opensource/commonsys/fm/fmapp2/

Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ mmm vendor/qcom/opensource/commonsys/fm/fmapp2//Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android/vendor/qcom/opensource/commonsys/fm/fmapp2/
RestrictionCheckernot present, skipping..
device/qcom/msm8937_64/msm8937_64.mk:42: warning:"Build with 4.9 kernel"
============================================
......
OUT_DIR=out
============================================
QSSI:not enabled for msm8937_64 target as vendor/qcom/proprietary/release/QSSI/QSSI_enforced_targets_list.txt was not found.......
#### build completed successfully (7 seconds) ####Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$

2. mm使用举例(在FM 目录下)

比如单编FM,在FM目录下,需要执行mm

Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ cd  vendor/qcom/opensource/commonsys/fm/fmapp2/
Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android/vendor/qcom/opensource/commonsys/fm/fmapp2$ mm
RestrictionCheckernot present, skipping..
device/qcom/msm8937_64/msm8937_64.mk:42: warning:"Build with 4.9 kernel"
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=9
......
OUT_DIR=out
============================================
QSSI:not enabled for msm8937_64 target as vendor/qcom/proprietary/release/QSSI/QSSI_enforced_targets_list.txt was not found.
ninja: no work to do.
......
build/make/core/base_rules.mk:412: warning: ignoring old commands for target `out/target/product/msm8937_64/vendor/lib64/hw/fingerprint.default.so'
ninja: no work to do.#### build completed successfully (41 seconds) ####Test@Test:/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android/vendor/qcom/opensource/commonsys/fm/fmapp2$

3.frameworks/av/camera/目录:

make cameraserver -j32

cameraserver目录下:编译module是 ---> make cameraserver -j32

ndk目录下:编译module是 ---> make libcamera2ndk -j32

4.frameworks/av/services/camera/目录:

make libcameraservice -j32

libcameraservice目录下:编译module是 ---> make libcameraservice -j32

编译生成的文件是:out/target/product/平台/system/lib/libcameraservice.so

5.vendorimage.img 镜像编译

make vendorimage

6.bootimage.img镜像编译

make bootimage

push 模块 验证修改是否生效

7. 使用debug版本,挂载手机

adb shell getprop ro.build.type 主要用来查看当前使用的版本,调试只能使用debug 版本,user版本无法调试。

举例如下:

C:\Users\Administrator>adb shell getprop ro.build.type
userdebug
C:\Users\Administrator>adb root
C:\Users\Administrator>adb remount
remount succeeded
C:\Users\Administrator>adb push C:\Users\Administrator\Desktop\FM2.apk /system/app/FM2
C:\Users\Administrator\Desktop\FM2.apk: 1 file pushed. 9.7 MB/s (861880 bytes in 0.085s)
C:\Users\Administrator>

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

4bbc5f9b29545a0af343f6d077c7e3ba.jpeg

点个在看,为大佬点赞!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31365.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 远程桌面多端口访问,局域网虚拟IP映射多个Windows 主机解决方案

情景 项目现场4G路由局域网中两台主机通过VPN连接到公司内网,实现远程管理,要求映射两个Windows 桌面进行管理。 目录 情景 网络 思路 已知 问题解决 1.客户端通过VPN进入内网路由器配置NAT 2.使用远程主机远程桌面功能:IP端口号访问 …

子数组问题——动态规划

个人主页:敲上瘾-CSDN博客 动态规划 基础dp:基础dp——动态规划-CSDN博客多状态dp:多状态dp——动态规划-CSDN博客 目录 一、解题技巧 二、最大子数组和 三、乘积最大子数组 四、最长湍流子数组 五、单词拆分 一、解题技巧 区分子数组&…

数据结构(蓝桥杯常考点)

数据结构 前言:这个是针对于蓝桥杯竞赛常考的数据结构内容,基础算法比如高精度这些会在下期给大家总结 数据结构 竞赛中,时间复杂度不能超过10的7次方(1秒)到10的8次方(2秒) 空间限制&#x…

使用Modelsim手动仿真

FPGA设计流程 在设计输入之后,设计综合前进行 RTL 级仿真,称为综合前仿真,也称为前仿真或 功能仿真。前仿真也就是纯粹的功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟。在完成一个设计的代码编写工作之后,可以直接对代码进行仿真,…

化工厂防爆气象站:为石油化工、天然气等领域提供安全保障

【TH-FB02】在石油化工、天然气等高危行业中,安全生产是至关重要的。这些行业常常面临着易燃易爆、有毒有害等潜在风险,因此,对气象条件的监测和预警显得尤为重要。化工厂防爆气象站作为一种专门设计用于这些特殊环境的气象监测设备&#xff…

Mysql InnoDB 行格式解析

该篇是学习笔记,笔记来源于《MySQL是怎样运行的:从根儿上理解MySQL》 InnoDB 是一个将表中的数据存储到磁盘上的存储引擎,所以即使关机后重启我们的数据还是存在的。而真正处理数据的过程是发生在内存中的,所以需要把磁盘中的数据…

【测试框架篇】单元测试框架pytest(4):assert断言详解

一、前言 用例三要素之一就是对预期结果的断言。 何为断言?简单来说就是实际结果和期望结果去对比,符合预期就测试pass,不符合预期那就测试 failed。断言内容就是你要的预期结果。断言包含对接口响应内容做断言、也包含对落DB的数据做断言。…

基础玩转物联网-4G模块如何快速实现与MQTT服务器通信

目录 1 前言 2 环境搭建 2.1 硬件准备 2.2 软件准备 2.3 硬件连接 2.4 检查驱动 3 连接MQTT服务器 3.1 创建MQTT监听Topic 3.2 打开配置工具读取基本信息 3.3 设置连接参数进行数据交互 4 总结 1 前言 MQTT(Message Queuing Telemetry Transport)是一种轻…

平面机械臂运动学分析

平面机械臂运动学分析 一 整体概述1 研究步骤: 二 正向1 几何分析2 matlab 仿真模拟(1)实现效果(2)matlab代码: 3 DH矩阵计算法(1)计算公式(2)计算结果验证&a…

Hadoop、Hive、Spark的关系

Part1:Hadoop、Hive、Spark关系概览 1、MapReduce on Hadoop 和spark都是数据计算框架,一般认为spark的速度比MR快2-3倍。 2、mapreduce是数据计算的过程,map将一个任务分成多个小任务,reduce的部分将结果汇总之后返回。 3、HIv…

1.4 单元测试与热部署

本次实战实现Spring Boot的单元测试与热部署功能。单元测试方面,通过JUnit和Mockito等工具,结合SpringBootTest注解,可以模拟真实环境对应用组件进行独立测试,验证逻辑正确性,提升代码质量。具体演示了HelloWorld01和H…

thinkphp+mysql+cast解决text类型字段的文本型数字排序错误的方法 - 数据库文本字段排序ASC、DESC的失效问题

TP中使用cast order $lists AmdCommonTable::where(..............) ->field(*,CAST(w6 AS UNSIGNED) as sort) ->order(sort, asc) ->select() ->toArray(); 先转换为数字,再order by 效果对比 (1/2) 不ok - 直接order by 某字段 asc - 只能按照文本…

批量将 Excel 转换 PDF/Word/CSV以及图片等其它格式

Excel 格式转换是我们工作过程当中非常常见的一个需求,我们通常需要将 Excel 转换为其他各种各样的格式。比如将 Excel 转换为 PDF、比如说将 Excel 转换为 Word、再比如说将 Excel文档转换为图片等等。 这些操作对我们来讲都不难,因为我们通过 Office 都…

C语言每日一练——day_3(快速上手C语言)

引言 针对初学者,每日练习几个题,快速上手C语言。第三天。(会连续更新) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用…

RSA的理解运用与Pycharm组装Cryptodome库

1、RSA的来源 RSA通常指基于RSA算法的密码系统,令我没想到的是,其名字的来源竟然不是某个含有特别意义的单词缩写而成(比如PHP:Hypertext Preprocessor(超文本预处理器)),而是由1977年提出该算法的三个歪果…

聊一聊 Android 的消息机制

聊一聊 Android 的消息机制 侯 亮 1 概述 在 Android 平台上,主要用到两种通信机制,即 Binder 机制和消息机制,前者用于跨进程通信,后者用于进程内部通信。 从技术实现上来说,消息机制还是比较简单的。从大的方面讲…

数据结构第八节:红黑树(初阶)

【本节要点】 红黑树概念红黑树性质红黑树结点定义红黑树结构红黑树插入操作的分析 一、红黑树的概念与性质 1.1 红黑树的概念 红黑树 ,是一种 二叉搜索树 ,但 在每个结点上增加一个存储位表示结点的颜色,可以是 Red和 Black 。 通过对 任何…

CI/CD—Jenkins配置一次完整的jar自动化发布流程

背景: 实现设想: 要创建自动化发布,需要准备一台测试服务器提前安装好java运行所需的环境,JDK版本最好和Windows开发机器上的版本一致,在Jenkins上配置将构建好的jar上传到测试服务器上,测试服务器自动启动…

我的两个医学数据分析技术思路

我的两个医学数据分析技术思路 从临床上获得的或者公共数据库数据这种属于观察性研究,是对临床诊疗过程中自然产生的数据进行分析而获得疾病发生发展的规律等研究成果。再细分,可以分为独立危险因素鉴定和预测模型构建两种。 独立危险因素鉴定是一直以…

时序数据库TimescaleDB基本操作示例

好的&#xff01;以下是使用 TimescaleDB 的 Java 示例&#xff08;基于 JDBC&#xff0c;因为 TimescaleDB 是 PostgreSQL 的扩展&#xff0c;官方未提供独立的 Java SDK&#xff09;&#xff1a; 1. 添加依赖&#xff08;Maven&#xff09; <dependency><groupId&g…