Android 10源码下载

想要研究Android 源码的同学可以用此方法进行下载。源码从清华大学开源软件镜像站下载。

使用Linux的同学直接参照清华镜像站提供的使用帮助即可,本文主要介绍在window平台下进行源码下载。

环境

操作系统:Window 10

Git :2.38.1

Node:v14.19.1

Node环境不是必须的,使用node是编写一个小程序实现自动下载Android源码的功能,也可以使用其他语言实现自动下载的功能。下面会详细介绍下载的逻辑。

初始化manifest仓库

我们克隆manifest仓库,这个仓库并不是安卓源码仓库,这个仓库很小,他只是列出了安卓源码仓库列表。

git clone https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

克隆成功后,manifest目录内容如下:

选择分支

然后我们看下分支都有什么,每个分支都对应着Android的不同版本。有很多内容,滚动条滚到下方才能看到。

cd manifest
git tag

我选择了android-10.0.0_r47这个分支,他下载的就是android10源码的清单文件了。

成功之后,default.xml文件中记录的就是android10系统各个模块的路径了。

接下来,我们就要下载各个模块的源码了。

下载源码

在下载源码之前,我们先要看下default.xml文件中内容。

我们看到,已经切换到android-10.0.0_r47的分支了。

下面的每一个标签就代表一个模块。我们看下的属性:

  1. path:是文件路径,我在下载的时候就按照这个路径存储各模块的源代码
  2. name:git地址后缀,要加上清华镜像站的地址拼成完成的地址,这个完整的路径就是模块的git仓库地址。比如platform/build 最后要拼成

https://aosp.tuna.tsinghua.edu.cn/platform/build.git

然后我们梳理一下自动下载源码的功能:

1.首先,读取default.xml的文件内容,得到一个包含所有project的集合

2.然后,遍历这个集合,根据path创建本地文件夹,根据name生成完整git路径,然后执行git clone。

下面就是我用JS+Node API实现的自动下载功能:

使用了两个JS库:

  • xml2js: 将xml文件内容转为js的对象,然后直接这个对象的属性进行操作就行。
  • mkdirp:Node 本身不支持创建多级目录,使用这个库可以实现创建多级目录的功能。
const fs = require('fs')
const xml2js = require('xml2js')
const { mkdirp } = require('mkdirp')
const { spawn } = require('child_process');//安卓源码下载路径,所有的模块都下载到这个文件夹下
const ANDROID_SRC_PATH = 'E:\\Source2023\\OS\\AndroidOS\\Android10\\'
//git.exe的路径 git设置了全局变量不用这个也可以
const GIT_PATH = 'D:\\software\\Git\\bin\\git.exe'
//清单文件的路径
const MANIFEST_PATH = 'E:\\Source2023\\OS\\AndroidOS\\manifest\\default.xml'
//清华镜像站地址,注意后面的斜杠,因为各project的path前面没有斜杠
const TSINGHUA_GIT_PATH = 'https://aosp.tuna.tsinghua.edu.cn/'//xml解析成js对象的实例
const parser = new xml2js.Parser()//任务checkout下标,标识当前下到第几个project
let projectIndexByCheckOut = 0;
//project集合
let projects = [];/*** 2.遍历集合,把每个project的path中的 / 转换成 \\* @param {*} projectArray xml文件中的project集合* @returns path路径转换后的集合*/
const getProjectArray = (projectArray) => {const result = []projectArray.forEach(item => {// console.log(item)//item.$ 代表的对象就是我们需要的,对象有个属性path// console.log(item.$)if (!!item.$) {//把path中的 / 转换成 \\item.$.path = item.$.path.replace(/\//g, '\\')result.push(item.$)}});return result
}/*** 3.下载源码* 这个方法就是执行git clone* 执行完一次git clone 才执行下一个源码的git clone。源码是一个一个下的。 * @param {*} project 当前要下载的project*/
const checkOutSrc = (project) => {const projectPath = `${ANDROID_SRC_PATH}${project.path}`const gitPath = `${TSINGHUA_GIT_PATH}${project.name}.git`console.log(`Git路径:${gitPath}`)console.log(`源码下载路径:${projectPath}`)if (!fs.existsSync(projectPath)) {mkdirp.sync(projectPath)}//这里执行的命令就是 git clone xxx xxxlet control = spawn(GIT_PATH, [`clone`, gitPath, projectPath])control.stdout.on('data', (data) => {console.log(`${data}`)})control.stderr.on('data', (data) => {console.log(`${data}`)})control.on('close', (code) => {console.log(`执行完成:${code}`)//判断还有没有需要下载的project,如果有继续下载projectIndexByCheckOut++if(projectIndexByCheckOut>=projects.length){return}checkOutSrc(projects[projectIndexByCheckOut])})
}/*** 1.解析xml文件,解析成功后,进行下载*/
const transXml = () => {//读取文件,data就是文件内容fs.readFile(MANIFEST_PATH, (err, data) => {if (err !== null) {//解析清单文件发生了异常return}//把data传给parser进行解析//通过这个方法就会把xml文件转换成js的对象//得到对象之后我们就从这个对象获取各project的pathparser.parseStringPromise(data).then(result => {if (!result) {//解析的对象为空return}// console.log(result)//如果要看解析后的js对象结构就把这个注释放开// const projectArray = result.manifest.project// console.log(projectArray)projects = getProjectArray(result.manifest.project)//集合长度大于0 就开始下载if(projects.length>0){projectIndexByCheckOut = 0checkOutSrc(projects[projectIndexByCheckOut])}})})
}transXml()
//安卓源码下载路径,所有的模块都下载到这个文件夹下
const ANDROID_SRC_PATH = 'E:\\Source2023\\OS\\AndroidOS\\Android10\\'//清单文件的路径
const MANIFEST_PATH = 'E:\\Source2023\\OS\\AndroidOS\\manifest\\default.xml'

这两个路径是自定义的,主要取决于你想把代码下载到哪个文件夹,修改这两个就可以。

然后经过漫长的等待就可以了。

最后

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。

相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

全套视频资料:

一、面试合集


二、源码解析合集

三、开源框架合集

欢迎大家一键三连支持,若需要文中资料,直接扫描文末CSDN官方认证微信卡片免费领取↓↓↓

Window平台下载Android源码相关推荐

  1. windows平台下载android源码

    最近在看<android内核剖析>,很多细节不具体看代码很难理解,记住了印象也不深,感觉还是跟着源码走一遍好些,回来下载android源码,遇到不少问题,终于开始下载了,整理下流程,鉴于网 ...

  2. 如何下载Android源码(window和Linux)

    文章参照来源: http://source.android.com/source/downloading.html 一.window平台 关于在window平台下载Android源码,网上一般使用的是 ...

  3. 下载Android源码流程(完整版)

      要在Linux环境下操作,要在Linux环境下操作,要在Linux环境下操作~~ 不要想在Windows环境下操作,因为会有各种问题.Windows环境的童鞋又不想装双系统的可以跟着下面的操作,L ...

  4. Windows 环境下载 Android 源码

    Windows 环境下载 Android 源码 前言 Android 官网(该方式不适合 Windows 平台):https://source.android.com/source/downloadi ...

  5. 【Linux/Ubuntu学习6】unbuntu 下载android源码

    在Windows下安装Cygwin,通过Cygwin也可在Windows里通过本文的下载步骤下载Android源码. 以下为在Ubuntu下下载Google Android4.4源码的步骤: 1. 安 ...

  6. android源码下载过程的一些注意事项,windows下载android源码

    网上目前有很多下载android源码的方法,在linux下基本上用 repo 脚本,先repo init 然后在 repo sync一下 最后提取的时候的 使用 repo sync -l 一下. 所有 ...

  7. android 清华镜像,清华镜像网站下载android源码并编译

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 下载android源码方法: 我的系统是ubuntu 18.04,主要参考了blog通过清华大学镜像下载Android源 ...

  8. Arndale Octa开发板下载android源码

    Arndale是由insignal公司开发制作的一款开发板,用了三星目前最先进的SoC Exynos5420,搭载了3GB的RAM,4G EMMC(这个有点坑),AX88796 10/100M网卡(略 ...

  9. 下载Android 源码(高墙之下,只能用镜像啦)

    按照http://source.android.com上的步骤并不能获取android源代码,估计又是被墙了.不过经过研究发现可以从一些镜像站点上获取android源代码 Step 1.按照http: ...

最新文章

  1. Linux shell脚本基础学习详细介绍(完整版)一
  2. 干就行了!!!写程序就像珊瑚,分支太多,哪有那么多复用!
  3. lucene的丰富的各种查询
  4. buildroot 问题
  5. Multi-thread--提高C++性能的编程技术笔记:多线程内存池+测试代码
  6. win7倒计时桌面小工具_这些小工具,彻底解放了我的电脑桌面
  7. 大数据分析机器学习(二)之直方图和多元线性回归
  8. 设计模式之原型模式(Prototype)
  9. ComboBox控件值对类
  10. [翻译] 使用ElasticSearch,Kibana,ASP.NET Core和Docker可视化数据
  11. linux shell 数字计算详解
  12. office怎么像wps一样多栏_WPS文档分栏设置,让排版更完美 Word2010如何分两栏、三栏、多栏技巧...
  13. VScode设置目录分级显示
  14. CREATE DATABASE 或 ALTER DATABASE 失败,因为结果数据库的累计大小将超出每 数据库 为 4096 MB 的
  15. c语言中进入临界区函数,VC/MFC 临界区使用方法事例
  16. 鹿晓亮:基于大数据云计算的语音识别深度平台
  17. 笔记:新手SEOer必备的WordPress优化插件
  18. 快排三种基本解法以及两种快排优化
  19. 永顺一中2021高考成绩查询入口,2017年高考永顺传来喜报
  20. pta 吃鱼还是吃肉 c语言

热门文章

  1. 瑞云专访CG新生力量:《星野》C4D动画毕设制作分享
  2. 伊利收购澳优、蒙牛私有化雅士利,乳业双雄能在“奶粉界称王”吗?
  3. ChatBot闲聊---腾讯自然语言处理 NLP
  4. 无需代码即可训练和可视化口罩检测模型
  5. java修改线程池名称_自定义线程池的名称(ThreadPoolExecutor)
  6. 半世浮尘洗铅华,余半生为君温酒煮茶
  7. 【大数据入门核心技术-Flume】(四)使用Flume采集数据到Hive
  8. PythonStock(10):使用notebook + tushare + pandas 简单的股票分析,蜡烛图
  9. WampServer图标为黄色,无法启动的解决办法及思路
  10. IoT物联网平台如何实现大规模设备的高效控制?