从github下载最新Android源码

article/2025/8/24 18:48:21

今年5月底开始,谷歌彻底被墙,所有谷歌的网站都不能访问了,这次包括了android.org,googlesource.com,code.google.com。Android官方的资源不能访问,想下载Android代码当然是困难重重了。

本文就为大家解决这一问题——介绍如何使从github.com/andorid下载Andorid最新源码。俗话说“授之以鱼不如授之以渔”,本文不只是给出一个已经打包好的源码的链接,而是重现一下我是如何下载的,希望对大家遇到的类似的问题能有所帮助。

github.com/android简介

打开github.com/android可以看到:

\

中间黑体列出的的是各个项目的链接。github.com/android上托管的Android源码是用git单独管理每个项目的,而没有像googlesource.com那样使用repo(谷歌开发的基于git的命令行工具)管理所有项目。所以,如果你只想下载一个项目的源码,可以单独下载(比如开发App想跟一下SDK的一些源码可以下载platform_frameworks_base项目)。

怎么下载一个项目的代码?

用过git的同学当然知道,可以使用下面的命令获取远程仓库的代码:

view source print ?
1. git clone [仓库URL]
github项目页面的右边栏给出了仓库URL,如下图(clone URL下方的文本框):

\

当然,如果只是要配置“App源码调试”环境,可以点“Download ZIP”按钮,下载zip格式的源码包,然后在Eclipse调试的时候选择下载好的源码包。


如何批量下载github上的Android源码

这里在是本文的重点——批量下载github上的android源码。

根据单独下载一个项目的过程,下载所有项目的源码可以有两种方法:

得到所有项目的git仓库URL得到所有项目的ZIP包下载链接

接下来的问题是如何得到这样的URL?

当然是从网页上(也就是页面的HTML文件上)!

现在问题就是如何得到这些网页?

我瞬间想到的办法就是——用CURL


ps: CURL是一个命令行上传下载工具,支持多种协议包括HTTP, HTTPS, FTP等。

没有curl的同学可以用如下命令下载:

view source print ?
1. sudo apt-get install curl

有了CURL用来抓页面,就不愁得不到仓库URL或ZIP包URL了:

首先要抓取github.com/android的页面,再“顺藤摸瓜”地抓取各个项目的页面,再从各项目的页面上抓取仓库URL或ZIP包URL。

抓取页面

在github.com/android页面的下方可以看github.com/andoid一共分5页,点击后面几个页面,可以发现这几个页面的URL形式一致为:

view source print ?
1. https://github.com/android?page=N
其中N表示“第几页”,比如第二页,就是https://github.com/android?page=2

由此,可以用bash脚本轻易写出抓取这5个页面的代码(可以直接在终端里执行下面的命令):

view source print ?
1. for ((i=1; i<=5; i++)); do
2. curl https://github.com/android?page=$i > android.github.com.$i.html;
3. done

有捷径

再看项目的首页URL和仓库URL可以发现:

仓库URL = 首页URL + .git

比如,platform_frameworks_base的首页URL是:

view source print ?
1. https://github.com/android/platform_frameworks_base
仓库URL是:
view source print ?
1. https://github.com/android/platform_frameworks_base.git
当然,如果你有github.com的帐号,并且当前环境的pubkey已加入到了profile下,也可以使用ssh协议下载(而不是https),ssh下载的URL是:
view source print ?
1. git://github.com/android/platform_frameworks_base.git
由此可知,获取仓库URL可以不用进一步抓起项目首页,更简单(下面只介绍获取所有仓库URL)。

解析页面

现在的问题就是——如何从这些页面上得到仓库的URL了。

可以通过浏览器的“审查元素”菜单快速找到页面上一个链接对应的HTML代码块,如下图:

\

可以看到platform_frameworks_base项目的超链接(<a href="xxx">)被一个<h3 class="repo-list-name">标签包围,粗略浏览一下刚才下载的几个子页面,可以看出每个项目首页的链接都是如此(在<h3 class="repo-list-name">的下一行)。

根据刚才找到的两个规律:

项目首页URL总是出现在<h3 class="repo-list-name">的下一行

仓库URL = 首页URL + .git

可以写出解析各个项目首页(仓库URL)的python代码(getGitRepos.py):

view source print ?
01. #!/usr/bin/python
02. import sys
03.  
04. flag = False
05. link_prefix = 'https://github.com' # 如果使用ssh协议下载,可将https改为git
06.  
07. allLines = sys.stdin.readlines()
08. for curLine in allLines:
09. if curLine.find('repo-list-name') >= 0:
10. flag = True
11. if flag:
12. pos = curLine.find('href="')
13. if pos >= 0:
14. pos += len('href="')
15. last = curLine[pos:]
16. end = last.find('"')
17. link = last[:end]
18.  
19. # name to path.
20. name = link[link.rfind('/')+1:]
21. prefix = name.find('platform_')
22. if prefix >= 0:
23. name = name[len('platform_'):] # ignore platform_
24. path = name.replace('_', '/')
25.  
26. link = link_prefix + link
27. # print 'curl', link, '>', name
28. # https://github.com/android/platform_external_qemu.git
29. print 'git clone', link + '.git', path # 输出 git clone 命令
30. flag = False
之所以用python解析,只是因为python写起来简洁,也可以用其他语言。

这段python程序从标准输入读入文本并解析,实际使用时可用重定向操作符实现,实现用之前抓取的github.com/android的几个子页面替代标准输入。

程序输出的git clone命令的path参数会忽略仓库名称前面的platform_前缀,这使得最终下载下来的源码结构和repo sync下来的类似。

可以先用一个页面测试一下,看看解析出来的URL对不对(上面的python代码就是这样改正确的),终端输入下面命令:

view source print ?
1. ./getGitRepos.py < android.github.com.1.html
该命令的输出为:
view source print ?
01. git clone https://github.com/android/platform_dalvik.git dalvik
02. git clone https://github.com/android/platform_bionic.git bionic
03. git clone https://github.com/android/platform_system_core.git system/core
04. git clone https://github.com/android/kernel_common.git kernel/common
05. git clone https://github.com/android/platform_external_qemu.git external/qemu
06. git clone https://github.com/android/platform_build.git build
07. git clone https://github.com/android/platform_development.git development
08. git clone https://github.com/android/platform_frameworks_base.git frameworks/base
09. git clone https://github.com/android/platform_manifest.git manifest
10. git clone https://github.com/android/platform_frameworks_support.git frameworks/support
11. git clone https://github.com/android/platform_packages_apps_settings.git packages/apps/settings
12. git clone https://github.com/android/platform_external_dhcpcd.git external/dhcpcd
13. git clone https://github.com/android/platform_external_webkit.git external/webkit
14. git clone https://github.com/android/platform_external_protobuf.git external/protobuf
15. git clone https://github.com/android/platform_packages_providers_mediaprovider.git packages/providers/mediaprovider
16. git clone https://github.com/android/platform_external_elfutils.git external/elfutils
17. git clone https://github.com/android/platform_external_strace.git external/strace
18. git clone https://github.com/android/platform_hardware_libhardware.git hardware/libhardware
19. git clone https://github.com/android/platform_external_tinyxml.git external/tinyxml
20. git clone https://github.com/android/platform_external_oprofile.git external/oprofile

测试基本上出现问题,因为getGitRepos.py输出的是git clone命令,执行之后在能执行实际的下载动作;所以,需要将这些输出保存下来;

使用如下命令可将每个子页面解析出的git clone命令保存到一个文本文件内:

view source print ?
1. for page in `ls android.github.com.*`; do
2. echo parse $page
3. ./getGitRepos.py < $page >> gitRepos.txt;
4. done

有了写满git clone命令的gitRepos.txt后,可以使用如下命令执行之:

view source print ?
1. sh gitRepos.txt

一键下载

为了方便广大网友使用,我已将上面需要用的命令写道了下面的cloneRepos.sh:

view source print ?
01. #!/bin/bash
02. # clone AOSP each repo from https://github.com/android
03. # this shell depends on git, curl and python 2.
04. # INSTALL depends:
05. #   sudo apt-get install git curl python
06. #
07. # by xu(xusiwei1236@163.com).
08.  
09. # download github AOSP sub pages
10. for ((i=1; i<=5; i++)); do
11. echo get AOSP subpage https://github.com/android?page=$i
12. curl https://github.com/android?page=$i > android.github.com.$i.html;
13. done
14.  
15. # parse git repo URL from each sub pages
16. mkdir repos
17. cat /dev/null > gitRepos.txt
18. for page in `ls android.github.com.*`; do
19. echo parse $page
20. ./getGitRepos.py < $page >> gitRepos.txt;
21. done
22.  
23. # clone repos
24. sh gitRepos.txt
另外,我已将上面的cloneRepos.sh和getGitRepos.py打包在了一起,可以到http://download.csdn.net/detail/xusiwei1236/7960925下载使用。

当然,如果觉得自己运行麻烦,可以直接copy生成的gitRepos.txt,直接粘贴到终端里执行之,即可下载全部Android源码:

view source print ?
01. git clone https://github.com/android/platform_dalvik.git dalvik
02. git clone https://github.com/android/platform_bionic.git bionic
03. git clone https://github.com/android/platform_system_core.git system/core
04. git clone https://github.com/android/kernel_common.git kernel/common
05. git clone https://github.com/android/platform_external_qemu.git external/qemu
06. git clone https://github.com/android/platform_build.git build
07. git clone https://github.com/android/platform_development.git development
08. git clone https://github.com/android/platform_frameworks_base.git frameworks/base
09. git clone https://github.com/android/platform_manifest.git manifest
10. git clone https://github.com/android/platform_frameworks_support.git frameworks/support
11. git clone https://github.com/android/platform_packages_apps_settings.git packages/apps/settings
12. git clone https://github.com/android/platform_external_dhcpcd.git external/dhcpcd
13. git clone https://github.com/android/platform_external_webkit.git external/webkit
14. git clone https://github.com/android/platform_external_protobuf.git external/protobuf
15. git clone https://github.com/android/platform_packages_providers_mediaprovider.git packages/providers/mediaprovider
16. git clone https://github.com/android/platform_external_elfutils.git external/elfutils
17. git clone https://github.com/android/platform_external_strace.git external/strace
18. git clone https://github.com/android/platform_hardware_libhardware.git hardware/libhardware
19. git clone https://github.com/android/platform_external_tinyxml.git external/tinyxml
20. git clone https://github.com/android/platform_external_oprofile.git external/oprofile
21. git clone https://github.com/android/platform_external_neven.git external/neven
22. git clone https://github.com/android/platform_external_netperf.git external/netperf
23. git clone https://github.com/android/platform_external_netcat.git external/netcat
24. git clone https://github.com/android/platform_external_libxml2.git external/libxml2
25. git clone https://github.com/android/platform_external_libpng.git external/libpng
26. git clone https://github.com/android/platform_external_libpcap.git external/libpcap
27. git clone https://github.com/android/platform_external_libffi.git external/libffi
28. git clone https://github.com/android/platform_external_jpeg.git external/jpeg
29. git clone https://github.com/android/platform_external_jhead.git external/jhead
30. git clone https://github.com/android/platform_external_jdiff.git external/jdiff
31. git clone https://github.com/android/platform_external_iptables.git external/iptables
32. git clone https://github.com/android/platform_external_icu4c.git external/icu4c
33. git clone https://github.com/android/platform_external_giflib.git external/giflib
34. git clone https://github.com/android/platform_external_freetype.git external/freetype
35. git clone https://github.com/android/platform_external_fdlibm.git external/fdlibm
36. git clone https://github.com/android/platform_external_expat.git external/expat
37. git clone https://github.com/android/platform_external_esd.git external/esd
38. git clone https://github.com/android/platform_external_emma.git external/emma
39. git clone https://github.com/android/platform_external_dropbear.git external/dropbear
40. git clone https://github.com/android/platform_external_apache-http.git external/apache-http
41. git clone https://github.com/android/platform_external_openssl.git external/openssl
42. git clone https://github.com/android/platform_external_sonivox.git external/sonivox
43. git clone https://github.com/android/platform_packages_providers_telephonyprovider.git packages/providers/telephonyprovider
44. git clone https://github.com/android/platform_packages_providers_downloadprovider.git packages/providers/downloadprovider
45. git clone https://github.com/android/platform_packages_providers_contactsprovider.git packages/providers/contactsprovider
46. git clone https://github.com/android/platform_packages_providers_calendarprovider.git packages/providers/calendarprovider
47. git clone https://github.com/android/platform_packages_apps_voicedialer.git packages/apps/voicedialer
48. git clone https://github.com/android/platform_packages_apps_stk.git packages/apps/stk
49. git clone https://github.com/android/platform_packages_apps_soundrecorder.git packages/apps/soundrecorder
50. git clone https://github.com/android/platform_packages_apps_phone.git packages/apps/phone
51. git clone https://github.com/android/platform_packages_apps_packageinstaller.git packages/apps/packageinstaller
52. git clone https://github.com/android/platform_packages_apps_music.git packages/apps/music
53. git clone https://github.com/android/platform_packages_apps_mms.git packages/apps/mms
54. git clone https://github.com/android/platform_packages_apps_htmlviewer.git packages/apps/htmlviewer
55. git clone https://github.com/android/platform_packages_apps_email.git packages/apps/email
56. git clone https://github.com/android/platform_packages_apps_contacts.git packages/apps/contacts
57. git clone https://github.com/android/platform_packages_apps_camera.git packages/apps/camera
58. git clone https://github.com/android/platform_packages_apps_calendar.git packages/apps/calendar
59. git clone https://github.com/android/platform_packages_apps_calculator.git packages/apps/calculator
60. git clone https://github.com/android/platform_packages_apps_browser.git packages/apps/browser
61. git clone https://github.com/android/platform_hardware_ril.git hardware/ril
62. git clone https://github.com/android/platform_external_zlib.git external/zlib
63. git clone https://github.com/android/platform_external_yaffs2.git external/yaffs2
64. git clone https://github.com/android/platform_external_tcpdump.git external/tcpdump
65. git clone https://github.com/android/platform_external_tagsoup.git external/tagsoup
66. git clone https://github.com/android/platform_external_srec.git external/srec
67. git clone https://github.com/android/platform_external_sqlite.git external/sqlite
68. git clone https://github.com/android/platform_external_skia.git external/skia
69. git clone https://github.com/android/platform_external_safe-iop.git external/safe-iop
70. git clone https://github.com/android/platform_external_ppp.git external/ppp
71. git clone https://github.com/android/kernel_msm.git kernel/msm
72. git clone https://github.com/android/platform_system_bluetooth.git system/bluetooth
73. git clone https://github.com/android/platform_prebuilt.git prebuilt
74. git clone https://github.com/android/platform_packages_providers_drmprovider.git packages/providers/drmprovider
75. git clone https://github.com/android/platform_external_ping.git external/ping
76. git clone https://github.com/android/platform_external_dbus.git external/dbus
77. git clone https://github.com/android/tools_repo.git tools/repo
78. git clone https://github.com/android/android.github.io.git android.github.io
79. git clone https://github.com/android/platform_external_wpa_supplicant.git external/wpa/supplicant
80. git clone https://github.com/android/platform_packages_apps_googlesearch.git packages/apps/googlesearch
81. git clone https://github.com/android/platform_system_wlan_ti.git system/wlan/ti
82. git clone https://github.com/android/platform_packages_providers_googlecontactsprovider.git packages/providers/googlecontactsprovider
83. git clone https://github.com/android/platform_packages_apps_im.git packages/apps/im
84. git clone https://github.com/android/platform_packages_providers_improvider.git packages/providers/improvider
85. git clone https://github.com/android/platform_external_tremor.git external/tremor
86. git clone https://github.com/android/platform_packages_apps_sync.git packages/apps/sync
87. git clone https://github.com/android/platform_packages_apps_alarmclock.git packages/apps/alarmclock
88. git clone https://github.com/android/platform_external_aes.git external/aes
89. git clone https://github.com/android/platform_external_clearsilver.git external/clearsilver
90. git clone https://github.com/android/platform_external_googleclient.git external/googleclient
91. git clone https://github.com/android/platform_packages_apps_launcher.git packages/apps/launcher
92. git clone https://github.com/android/platform_external_bluez.git external/bluez
93. git clone https://github.com/android/platform_external_gdata.git external/gdata
94. git clone https://github.com/android/platform_frameworks_opt_com.google.android.git frameworks/opt/com.google.android
95. git clone https://github.com/android/platform_external_elfcopy.git external/elfcopy
96. git clone https://github.com/android/platform_frameworks_policies_base.git frameworks/policies/base
97. git clone https://github.com/android/platform_packages_apps_updater.git packages/apps/updater
98. git clone https://github.com/android/platform_external_opencore.git external/opencore

http://chatgpt.dhexx.cn/article/QdjRPdTm.shtml

相关文章

Android源码下载编译(TI)

0 前言 通过《Android源码下载 & 编译&#xff08;高通&#xff09;》的方法下载的源码是包含有kernel目录的&#xff08;也就是包含Linux内核&#xff09;&#xff0c;然而&#xff0c;通过其它方法下载的源码可能并不包含kernel目录&#xff08;也就是不包含Linux内核&am…

安卓系统源码、内核下载

一、下载源码 以下载源码2.3.7版本为例 环境ubuntu14.04 1、安装git sudo apt-get install git git --version //查看版本 git config --global user.name "zhangsan" //设置用户名 git config --global user.email "zhangsan163.com" //设置邮箱 git…

AOSP安卓源码下载

Android源码下载 在国内想下载Android要么科学上网&#xff0c;要么使用国内搭建的镜像&#xff0c;有清华镜像&#xff0c;中科大的镜像网站。这里使用清华镜像网站镜像Android源码的下载清华镜像网站地址&#xff0c;为啥我要写这篇笔记嘞&#xff0c;虽然网上有很多这方便的…

安卓系统源码编译系列(一)——下载安卓系统源码教程

最近需要编译安卓系统&#xff0c;咨询了一个编译过安卓系统的朋友&#xff0c;说是下载源码就得下载两天&#xff0c;于是做好了长期抗战的准备&#xff0c;开始了下载安卓源码的旅程。在刚开始下载时&#xff0c;可以参照的内容只有官方教程&#xff0c;于是跟着官方教程一步…

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

源码及编译 步骤 1&#xff1a;创建一个空目录来存放源码&#xff1a; mkdir aosp cd aosp步骤 2&#xff1a;获取最新版本的 repo 并签出 android-8.1.0_r1 分支&#xff1a; repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r1其中&am…

Android源码下载编译(高通)

0 前言 本文介绍如何下载高通平台的Android源码&#xff0c;然后进行编译。 相关&#xff1a;《Android源码下载&编译&#xff08;TI&#xff09;》 1 安装工具 下载Android源码需要git&#xff0c;repo等工具&#xff0c;启动repo是Google写的一个专门用于下载Android源码…

Window下载Android源码

Android 10源码下载 想要研究Android 源码的同学可以用此方法进行下载。源码从清华大学开源软件镜像站&#xff08;https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/&#xff09;下载。 使用Linux的同学直接参照清华镜像站提供的使用帮助(https://mirrors.tuna.tsinghua.edu…

下载安卓源码

安卓内核源码下载教程 准备环境如何选择你想要下载的版本ubuntu环境配置 准备环境 Ubuntu 18.04 安装 最好是用这个版本或者高于这个版本的,低版本的有一些环境问题可能会让你很难受我使用的是VMware Workstation 16 ProPixel 3 XL、Pixel 3、Pixel 2 XL、Pixel 2、Pixel XL、…

Android13源码下载及全编译流程

一、源码下载 1.1、配置要求 官方推荐配置请参考&#xff1a;https://source.android.google.cn/docs/setup/start/requirements?hlzh-cn&#xff0c;重点有如下几项&#xff1a; 1.1.1、硬件配置要求 1、内存至少 16GB&#xff0c;实测建议至少 32G。 2、磁盘至少 250GB&am…

Java 工厂设计模式

简介 工厂设计模式在java中有大量的应用&#xff0c;如spring框架&#xff0c;这种类型的设计模式属于创建型模式。在工厂设计模式中&#xff0c;创建逻辑不会对客户端暴露&#xff0c;可以通过一个对外接口创建所需对象。 工厂模式使用场景 需要频繁创建对象且这些对象多处…

简单工厂设计模式

简单工厂设计模式 刚开始学设计模式,犹如刚睁开眼看世界的孩子,满眼都是惊奇,原来代码的世界可以如此的精彩纷呈.当然这些都是前辈智慧的结晶.简单工厂设计模式是接触的第一个设计模式,看完后更多的是不懂和迷糊.不过相信慢慢会懂得其精髓的. 简单工厂设计模式是创建型(就是把对…

Java工厂设计模式详解

前言 工厂设计模式在开发过程中有大量的运用&#xff0c;不管是spring框架&#xff0c;还是诸多的中间件&#xff0c;都有着工厂设计模式的体现 比如&#xff0c;手机生产工厂&#xff0c;当提供了相关生产手机的原材料&#xff0c;工厂就可以按要求生产出手机 工厂模式介绍 …

Android工厂设计模式(简单工厂,工厂方法,抽象工厂,BitmapFactory简单工厂分析,Retrofit抽象工厂分析)

文章目录 创建型设计模式(简单工厂&#xff0c;工厂方法&#xff0c;抽象工厂)一.简单工厂模式引出简单工厂模式 二.工厂方法模式三.抽象工厂模式 Android源码中用到的工厂模式举例一.BitmapFactory 源码工厂模式详解(简单工厂)二.Retrofit的工厂模式(抽象工厂) 创建型设计模式…

工厂设计模式有什么用?

工厂方法是非常古老且常用的设计模式。原因主要是一个系统要运转起来一定会涉及到对象的实例化过程&#xff0c;如果对象的实例化分散在各种逻辑代码之间&#xff0c;那么就会非常零乱、难以维护&#xff0c;bug自然也多。 工厂方法的出现解决的就是对象创建的问题&#xff0c…

Java中的工厂设计模式

引出工厂模式 package www.java.test;interface Computer{void printComputer(); } class MacbookPro implements Computer{Overridepublic void printComputer() {System.out.println("This is a MacbookPro");} } class SurfaceBook implements Computer{Override…

Java工厂设计模式

工厂设计模式 一、面向对象的设计原则1.1 OCP&#xff08;开闭原则&#xff0c;Open-Closed Principle&#xff09;1.2 DIP&#xff08;依赖倒转原则&#xff0c;Dependence Inversion Principle&#xff09;1.3 LOD&#xff08;迪米特法则&#xff0c;Law Of Demeter&#xff…

设计模式—工厂设计模式

工厂设计模式 1.概述2.简单工厂模式2.1 结构2.2 实现2.3 优缺点2.4 扩展 3.工厂方法模式3.1 概述3.2 结构3.3 实现3.4 优缺点 4.抽象工厂模式4.1 概述4.2 结构4.3 实现4.4 优缺点4.5 应用场景 5.扩展模式5.1 第一步&#xff1a;定义配置文件5.2 改写工厂类 6.JDK源码解析—Coll…

工厂设计模式 - 详解

介绍 工厂模式是Java中最常用的设计模式之一&#xff0c;这种类型的设计模式数据创建型模式。 主要就是负责创建对象的&#xff0c;当我们使用new创建对象的时候会导致对该对象的耦合性很严重&#xff0c;当我们需要修改的时候需要对所有new的对象进行修改&#xff0c;违反了软…

【iOS】—— 工厂设计模式

工厂设计模式 文章目录 工厂设计模式设计模式概念设计模式七大准则开闭原则单⼀职责原则里氏替换原则依赖倒转原则接口隔离原则迪米特法则合成复用原则 类族模式简单工厂模式优点缺点主要作用示例文件分类实现效果&#xff1a; 工厂方法模式优点缺点主要作用&#xff1a;示例&a…

【设计模式】工厂模式(Factory Pattern)

1. 概述 工厂模式&#xff08;Factory Pattern&#xff09;是最常用的设计模式之一&#xff0c;它属于创建类型的设计模式。它提供了一种创建对象的最佳方式&#xff0c;在工厂模式中&#xff0c;我们在创建对象时不会对客户端暴露创建逻辑&#xff0c;并且是通过一个共同的接…