`
貌似掉线
  • 浏览: 260411 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

从github上下载android源码(已附脚本)

阅读更多
老早前就想下载android代码学习学习了,无奈android官方文档提供的方法,经尝试后发现完全不适合我,因为一旦中途断开就要重新下载,否则什么代码都看不到。而且不知道提供的那个网址被墙了还是怎样,经常连不上。换了android.googlesource.com还是差不多,代码一样下不下来。
不过经过一番努力还是有结果的,发现github有个项目是做了android.googlesource.com中android源码的镜像的,而从github上下载代码则稳定很多,速度也很快,地址为:
https://github.com/android
我试着从上面下载了其中一部分,发现很快就下载下来了。不过上面有近一百个地址,要是让我一个一个下,然后再进行分类,移到相应的文件夹,我一定会疯的,这不是我的性格。作为一个优秀的程序员,懒惰就是最大的优点。
在这种情况下,当然是写一个脚本来下载代码了,这个脚本的关键代码就是:
git clone --depth=1 $2 $1

其中参数1是下载到本地的路径,参数2是git地址。
接下来就是要解析https://github.com/android 这个页面,得到所有git地址了。
查看源代码,发现每一个git地址都在网页源代码的一个叫“repolist-name”的CSS类中,如下所示:
  <h3 class="repolist-name">
    <a href="/android/platform_frameworks_base">platform_frameworks_base</a>
  </h3>

一共有98个。在这个标签里面,
<a href="/android/platform_frameworks_base">platform_frameworks_base</a>

是我们要提取的内容,href属性的值前面加上“http://github.com”,后面加上“.git”就是我们要的git地址,而platform_frameworks_base中的下划线转换成斜杠“/”,就是我们在本地对应的路径。
接下来建一个java工程,解析这个网页并将这两个地址输出到文本中,以方便我们的脚本编写。
解析html用jsoup库,然后输出到文本,也懒得自己再去操作输出流什么的了,用apache中的common-io包。
这里我一共写了两个类,一个是Main.java用来解析,一个是JavaBean,即GithubUrl类,代码如下:
/*
 * @(#)Main.java                       Project:GetAndroidSource
 * Date:2013-9-1
 *
 * Copyright (c) 2013 CFuture09, Institute of Software, 
 * Guangdong Ocean University, Zhanjiang, GuangDong, China.
 * All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.sinaapp.msdxblog.getandroidsource;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * @author Geek_Soledad <a target="_blank" href=
 *         "http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=XTAuOSVzPDM5LzI0OR0sLHM_MjA"
 *         style="text-decoration:none;"><img src=
 *         "http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_01.png"
 *         /></a>
 */
public class Main {

        private static final String GITHUB_URL = "https://github.com";
        private static final String GITHUB_ANDROID_URL = "https://github.com/android";

        public static void main(String[] args) {
                List<GithubUrl> urls = getGithubUrl();
                System.out.println("repolists: " + urls.size());
                try {
                        FileUtils.writeLines(new File("E:\\gitclone.txt"), urls);
                        System.out.println("write to E:\\gitclone.txt finish");
                } catch (IOException e) {
                        e.printStackTrace();
                }
        }

        private static List<GithubUrl> getGithubUrl() {
                Document doc = null;
                try {
                        doc = Jsoup.connect(GITHUB_ANDROID_URL).get();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                if (doc == null) {
                        return null;
                }
                List<GithubUrl> urls = new ArrayList<GithubUrl>();
                Elements repolists = doc.getElementsByClass("repolist-name");
                for (Element repolist : repolists) {
                        Elements hrefs = repolist.select("a[href]");
                        if (hrefs.isEmpty()) {
                                System.out.println("it is empth");
                                continue;
                        }
                        if (hrefs.size() > 1) {
                                System.out.println(hrefs.text() + ":" + hrefs.size());
                        }
                        Element e = hrefs.first();
                        System.out.println(e.html() + ":" + e.text() + "---" + e.attr("href"));
                        urls.add(new GithubUrl(e.text().replaceAll("_", "/"), GITHUB_URL + e.attr("href")));
                }
                return urls;
        }

}

/*
 * @(#)GithubUrl.java                  Project:GetAndroidSource
 * Date:2013-9-1
 *
 * Copyright (c) 2013 CFuture09, Institute of Software, 
 * Guangdong Ocean University, Zhanjiang, GuangDong, China.
 * All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.sinaapp.msdxblog.getandroidsource;

/**
 * @author Geek_Soledad <a target="_blank" href=
 *         "http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=XTAuOSVzPDM5LzI0OR0sLHM_MjA"
 *         style="text-decoration:none;"><img src=
 *         "http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_01.png"
 *         /></a>
 */
public class GithubUrl {

        private String title;
        private String href;

        public GithubUrl(String title, String href) {
                super();
                this.title = title;
                this.href = href;
        }

        public String getTitle() {
                return title;
        }

        public void setTitle(String title) {
                this.title = title;
        }

        public String getHref() {
                return href;
        }

        public void setHref(String href) {
                this.href = href;
        }

        @Override
        public String toString() {
                return String.format("cloneit %s %s.git", title, href);
        }

}

上面的GithubUrl.java中,重写了toString,是因为我在脚本了定义了一个cloneit的函数用来从指定的地址下载代码到指定的目录中,这样输出的话我到时可以直接粘贴到脚本中。不过刚才发现上面的代码要略微修改一下,虽然没什么错误。
今天就先写到这里,因为是在公司电脑里写,而脚本在我家里的电脑,所以脚本在下一篇再贴上来吧。而上面的java工程我托管到了code.google.com中,可以通过svn下载,命令如下:
svn checkout http://msdx-java-code.googlecode.com/svn/trunk/GetAndroidSource



本来想在另一篇日志附上脚本的,但觉得内容不多,就决定改一下这篇文章,把脚本附在下面了。
脚本的主要代码如下:
#!/bin/bash

#sudo dpkg-reconfigure dash

#根本目录
#$1为保存的地址,$2为下载地址
function cloneit()
{
    if [ -d $1 ]; then
        echo -e "\033[0;38;40m $2 has been git clone \033[0m"
        echo "git pull --depth 1 $1"
        cd $1
        git pull --depth 1
        cd -
    else 
        echo -e "\033[0;31;40m git clone $2 $1 \033[0m"
        git clone --depth=1 $2 $1  
    fi  
    echo finish $(date) $1
}

#下载路径
cloneit platform/frameworks/base https://github.com/android/platform_frameworks_
base.git
cloneit platform/build https://github.com/android/platform_build.git

其中在cloneit函数里面,先判断文件夹是否存在,如果存在就使用git pull更新代码,否则就使用git clone下载代码。
完整脚本下载地址:http://www.vdisk.cn/down/index/14777400
1
1
分享到:
评论

相关推荐

    从github下载Android源码的脚本

    该压缩包包含两个脚本:一个bash脚本负责从github.com/android抓取页面,并调用python脚本,解析抓取下来的每个页面,输出git clone命令。 具体过程参考:...

    windows中下载android源码的方法 附下载脚本

    首先,我们需要理解Android源码是托管在Google的Git服务器上,通过GitHub或Android开源项目(AOSP)官方网站获取。下载源码的最常用工具是repo,它是一个Python脚本,用于管理和同步多个Git仓库。在开始之前,请确保你...

    关于一些安卓源码无法在自己的AndroidStudio中无法运行的解决方法

    在学习Android开发的过程中,很多开发者会选择从GitHub等平台下载现成的项目代码来进行学习或者二次开发。但是,在尝试使用Android Studio打开这些项目时,往往会遇到无法运行的情况。这种情况通常是由于项目配置与...

    windows环境下载android源码批量下载 java版本

    下载Android源码需要Git工具,因为AOSP源码是托管在Google的Git仓库——GitHub和Android Gerrit上。Java版本的批量下载工具通常会利用Git的命令行接口来交互式地操作这些仓库。你需要先在Windows上安装Git,确保它...

    android源码下载.pdf

    本文将详细讲解如何在Windows平台上下载Android源码的步骤,帮助初学者顺利获取Android的源代码。 1. **前期准备** - 首先,你需要下载适用于Windows的Git工具。你可以从`http://code.google.com/p/msysgit/`获取...

    android源码下载

    Android源码下载是Android开发人员深入理解系统工作原理和进行定制化开发的重要步骤。源码提供了Android操作系统的底层实现,包括Linux内核、HAL层、框架层以及应用程序接口。了解如何下载Android源码对于开发者来说...

    windows下android 源码下载方法

    在Windows环境下下载Android源码可能对许多开发者来说是一项挑战,因为通常这涉及到使用Linux命令行工具和Git。本文将详细讲解如何在Windows操作系统下获取Android的源代码。 首先,了解Android源码是至关重要的,...

    android 8.1 源码下载(27)

    Android源码的学习是一个长期过程,可以从以下几个方面入手: - 分析Android运行时环境(ART)和Dalvik虚拟机。 - 研究系统服务如何启动和通信。 - 探索权限管理和安全模型。 - 学习UI框架如视图系统和动画机制...

    github最新版spring源码gradle构建20141121

    2014年11月21日的GitHub上发布的Spring源码版本,可能是Spring 4.x系列的一个更新,因为Spring 5是在2017年发布的。Gradle是一种强大的构建自动化工具,它在Java生态系统中逐渐取代了Maven,因为其更灵活的构建脚本...

    vlc-android-1.9.0_vlc_github_android开发_doublex4o_player_

    4. **源码开放**:作为开源项目,VLC的源代码可以在GitHub上获取,开发者可以查看、学习和贡献代码,增强了软件的透明度和可定制性。 5. **网络流播放**:除了本地文件,VLC还支持HTTP、RTSP、MMS等协议的网络流...

    android4.4源码下载

    Android开源项目(AOSP)拥有一个活跃的开发者社区,你可以在论坛、邮件列表和GitHub上找到帮助和讨论。此外,Android开发者文档提供了丰富的教程和参考资料,帮助你理解和使用源代码。 8. **定制化开发**: 对于...

    Ubuntu系统下Android源码编译.pdf

    首先,要进行Android源码编译,必须确保Ubuntu系统已安装了基础的开发工具。这通常包括GCC编译器、Git版本控制系统、Java Development Kit (JDK) 和Android SDK。JDK是Android应用程序的基础,因为Android的构建工具...

    Android今日资讯新闻APP源码.zip_APP_android_app源码_资讯app

    12. **持续集成/持续部署(CI/CD)**: 如果项目包含Gradle脚本,可能已经配置了GitHub Actions、Jenkins或Travis CI等服务,实现自动化构建和部署。 以上只是对“Android今日资讯新闻APP源码”可能涉及的一些关键技术...

    open_source_android_apps:在Github上查找Android应用的源代码并将其与Google Play上的目录条目进行匹配-Android app source code

    该脚本有助于在Github上查找Android应用,并将其与Google Play上的条目进行匹配。 来自GitHub和Google Play的信息被组合在一起,以构建一个开放源代码应用程序,其源代码和版本控制数据的连接数据集。 所有Android...

    Android 英语单词记忆程序源码_单词_学习_android_英语_

    在Android平台上,开发一款英语单词记忆程序是一种常见的实践,它可以帮助用户有效提升英语词汇量,增强记忆技巧。本文将深入探讨这款名为“Android 英语单词记忆程序”的源码,揭示其背后的编程技术和教育理念。 ...

    android 源码地址

    通常情况下,获取Android源码最安全、最可靠的方式是从Google官方的GitHub仓库或者通过其官方提供的AOSP (Android Open Source Project)镜像网站下载。因此,在此我们将主要围绕官方渠道获取并理解Android源码进行...

    Android源码下载

    ### Android源码下载知识点 #### 一、概述 在深入探讨如何下载Android源代码之前,我们首先了解一下背景信息。Android是全球最受欢迎的移动操作系统之一,它基于Linux内核,并采用了Java语言作为主要开发语言。...

    ffmpeg源码编译脚本

    从FFmpeg的官方Git仓库(https://git.ffmpeg.org/ffmpeg.git)获取最新版本的源码,或者通过GitHub等镜像站点下载。 4. **配置步骤**: - 解压源码包。 - 进入源码目录,运行`autoreconf -fiv`更新配置脚本。 -...

    Android 终端上可以使用的完全版本wget

    1. 获取wget源代码:首先,你需要从wget的官方网站或者GitHub仓库下载最新源代码。 2. 配置Android交叉编译环境:安装NDK(Native Development Kit),它是Android SDK的一部分,用于在本地机器上构建原生C/C++代码...

    基于android的应用开发源码-输入法开发.rar

    "基于Android的应用开发源码-输入法开发.rar" 是一个与Android应用开发相关的资源,特别聚焦在输入法的实现上。输入法是Android系统中一个关键组件,它允许用户在设备上输入文本,无论是通过键盘、语音还是其他交互...

Global site tag (gtag.js) - Google Analytics