热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

下载AOSPandroid源码(最小最快下载方式,跳过编译直接导入AndroidStudio)Ubuntu16.04

(时间:2017年2月20日状态:依然是菜鸟)首先,谢谢这些大爷的博客帮助我这个菜鸟,贴出链接。使用AndroidStudio导入源码利用AndroidStudio阅读Androi

(时间:2017年/2月/20日 状态:依然是菜鸟)
首先,谢谢这些大爷的博客帮助我这个菜鸟,贴出链接。
使用Android Studio导入源码
利用 Android Studio 阅读 Android 源码
idegen:一个角落里的法器
下载阅读android源码笔记
如何使用Android Studio开发/调试Android源码
Android Studio导入Android源码
使用Android studio阅读Android源码
mac 上的android源码下载编译查看
Dev Env Note Url 7
Android Sync 同步 源码问题解决方案
自己动手编译Android源码(超详细)
[Android编译(二)] 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机](http://blog.csdn.net/fuchaosz/article/details/52473660)
Ubuntu 16.04 LTS 下编译 CM 源码
Tips of “repo sync” ofAndroid
Build LineageOS/CM/AOSP on Ubuntu
Ubuntu16.04编译android6.0源代码
Repo: Tips & TricksLearn about the repo tool , manifests and local manifests and 5 important tips !

基本上该试的都试过了,下面都是“取其精华去其糟粕”的结果。

总步骤简介:

总步骤一(准备编译环境)
总步骤二(下载源码的三种方式)(只看frameworks/base源码的,直接到第二种下载方式)
总步骤三(免编译将源码导入Android studio)

总步骤一:准备环境

英文好的大爷可以直接去安卓官网 Requirements | Android Open Source Project
我是在Ubuntu 16.04下进行的一些列操作。

安装OPEN JDK、启用默认jdk为open jdk

  1. 官网介绍说,7.0到主分支用open jdk8,俺就装open jdk8

    《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

    在Terminal输入命令行

sudo apt-get update
sudo apt-get install openjdk-8-jdk

  1. 如果你还还装了oracle jdk,需要将open jdk切换为默认jdk。

sudo update-alternatives --config java
sudo update-alternatives --config javac

安装编译需要的依赖包(就看看代码不编译的朋友,直接跳过,直接看下代码方式(二)或(三))

  1. 安卓官网只说了Ubuntu 14.04需要的依赖包,如下图。
    《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》
  2. 然而这个博客说盲目相信官网就too young too simple了,下面是Ubuntu 16.04需要的依赖包。

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache

一行一行输入就行。

有些依赖包安装失败的解决办法

  1. 无法获取安装包

    《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

    图中显示libxml2-utils_2.9.4-1+deb.sury.org~xenial+2_amd64.deb 找不到,无法直接安装。解决方法

  • 直接google搜索 libxml2-utils_2.9.4-1+deb.sury.org~xenial+2_amd64.deb 下载对应的deb文件
  • 使用命令

cd downloads //进入deb包所在目录
sudo dpkg -i --ignore-depends=libxml2-utils libxml2-utils_2.9.4-1+deb.sury.org-xenial+2_amd64.deb

进行强制安装,问题解决

  1. 安装包与已经安装的包冲突
    再次遇到不能安装依赖库的问题,不过这次不是获取不到包,而是与已经安装的包冲突,卸载那个包就行了

    《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

    如图,说zconf.h已经在zlib1g-dev包里面了,安装lib32z1-dev失败

  • 卸载zlib1g-dev:i386

sudo apt remove zlib1g-dev:i386

  • 重新执行安装lib32z1-dev命令

cd downloads
sudo dpkg -i --ignore-depends=lib32z1-dev lib32z1-dev.deb
总步骤二:下载源码

下载源码方式(一),官方方法,最慢,直接看方式(二)吧

repo是啥?

  • 就我目前的理解而言,就是简化git操作的一个工具集合,因为aosp是个超大的项目,整个project下面又有N多个小project,如果只用git命令来操作,输命令就够烦的了,所以谷歌弄了个repo,估计一条repo命令执行了N多的git命令。

下载安装repo

  1. 确保在你的home下面又bin目录,并且把bin目录添加到PATH环境变量中。

mkdir ~/bin
PATH=~/bin:$PATH

  1. 下载repo工具,并确保工具可以被执行

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

谷歌AOSP官网的Installing Repo

初始化repo客户端

  1. 创建一个文件夹来放源码文件,然后进入该文件夹,名字随便取

mkdir WORKING_DIRECTORY //我写了mkdir aosp,初始化repo客户端的操作都保持在这个目录下
cd WORKING_DIRECTORY

  1. 下载认证(不认证的话,下着下着就断开,谷歌用来防止恶意下载的)
  2. 注册谷歌账户Google account,一般都有吧。。。。
  3. 设置git默认用户名和邮箱,名字就是谷歌账户名(有个帖子说名字随便,谷歌官网也没说到底是不是谷歌账户名),邮箱就必须是谷歌账户Gmail.com的邮箱了。

git config --global user.name "Your Name"
git config --global user.email "you@example.com"

  1. 用强制认证的方式进行repo init操作
    谷歌AOSP官网 Initializing a Repo client

- [the password generator](https://android.googlesource.com/new-password) 进入后登录自己谷歌账户,生成密码,我也不知道怎么解释,照做就是了。进入后如下图所示:

《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

生成的三行代码一次copy进Terminal执行就行了。

- 确定要下载的Android版本

从官网看Source Code Tags and Builds看自己想下哪个版本,Branch一栏就是需要用到的版本号了。

《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

- 以强制认证的方式访问并初始化repo

这个URL比正常的URL多了一个/a,官网非强制认证的URL是这样的:https://android.googlesource.com/platform/manifest
下面是我们要用到的,其中的-b代表branch,就是上一步你自己调的最顺眼的版本号。我挑了个android-7.1.1_r46

repo init -u https://android.googlesource.com/a/platform/manifest -b android-7.1.1_r46

如果初始化成功,在aosp文件夹下,CTRL+H显示隐藏文件应该有.repo文件夹,有就成功了。

开始下载源码

  1. 直接repo sync会失败,由于你懂得原因,需要breakwa1l,建议自己买个服务器自己上SS,然后在Terminal里的命令行是不会通过SS联网的,使用SS + ProxyChains的组合可以让命令行里执行的命令也走SS,具体ProxyChains各位怎么安装使用,自己搜吧。

proxychains repo sync //proxychains保证repo sync命令走SS,可以访问谷歌服务器

但是还是会因为各种原因导致下载终端,简单执行上面这个命令不可行,看下面一步。

  1. 用这个博文里的脚本自动下载,(下面的我直接COPY他的博文的)
    由于下载过程中还会遇到各种各样的问题,所以我们需要创建一个自动下载脚本,确保出错了之后会自动执行repo sync,在aosp文件夹下创建一个脚本down.sh,(自己在aosp文件夹创建down.sh文件,然后用编辑器打开,copy代码进去保存就行)代码如下:

#!/bin/bash
repo sync -j8
while [ $? = 1 ]; do
echo “======sync failed, re-sync again======”
sleep 3
repo sync -j8
done

因为要FANQIANG,在repo sync前加上proxychains,改成如下所示

#!/bin/bash
proxychains repo sync -j8
while [ $? = 1 ]; do
echo “======sync failed, re-sync again======”
sleep 3
proxychains repo sync -j8
done

然后命令行执行,就是开始刚创建的脚本了,等吧,5-6个小时总会下完的。(注意:Terminal要在aosp文件夹下)

chmod a+x down.sh
./down.sh
这个方式下载太磨时间了,别用了。



下载源码的方式(二),清华 / 科大方案,速度爆表

从清华服务器下载repo并安装

清华repo镜像

  1. 确保在你的home下面又bin目录,并且把bin目录添加到PATH环境变量中。

mkdir ~/bin
PATH=~/bin:$PATH

  1. 从清华镜像下载repo工具,并确保工具可以被执行

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo

  1. 让repo工具自己通过清华镜像更新“repo工具本身”,好TM拗口。。
  • repo的运行过程中会尝试访问官方的git源更新自己,如果想使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc文件里面。
  • 新手:如何打开这个文件?
    答:在HOME文件夹下,CTRL+H显示隐藏文件,搜索.bashrc就行。打开后复制下面的地址并保存文件。

《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

下载源码

  1. 如果是搞开发的估计会用最新的代码,那么直接下载最新的压缩包
    下载初始化包并解压(相当于直接把下载方式(一)中repo sync操作下载的文件打成压缩包直接从国内地址下载了,速度超快,我这儿速度有4m/s)
  • 清华镜像下载地址: https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
  • 下载后解压就行,解压出来文件夹名称是aosp,只有一个.repo文件夹,就是仓库,代码都在里面
  • 导出代码

    cd aosp
    repo sync -l // -l就是只导出代码到本地,不通过网络更新代码
    repo sync -n // -n就是只通过网络更新代码啦
    repo sync //正常同步

  1. 如果像我这种小白,只想看看某个版本代码
  • 从aosp官网的源码列表选则自己要下的版本号,我依然选择:android-7.1.1_r46

  • 新建一个文件夹aosp,然后进入

    cd aosp
    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.1.1_r46

  • 如果只是想看frameworks/base的代码
    虽然是国内镜像,但依然会出错停止,所以我们还是需要创建一个自动下载脚本,确保出错了之后会自动执行repo sync,在aosp文件夹下创建一个脚本down.sh,(自己在aosp文件夹创建down.sh文件,然后用编辑器打开,copy代码进去保存就行)代码如下,这个-j 8可以自己改,你的CPU总线程数*2:

#!/bin/bash
repo sync -j 8
while [ $? = 1 ]; do
echo “======sync failed, re-sync again======”
sleep 3
repo sync -j 8
done

把上面的的两行repo sync -j 8替换成下面的语句

repo sync platform/development platform/frameworks/base platform/packages/apps/Calculator -j 8

  • repo sync命令后面可以指定要同步的project,上面这行命令就是指定啦3个project
    打开.repo/manifest.xml,可以看到project的名字和路径,我们要看的frameworks/base下的代码的project名字如图所示,那就在repo sync后面指定就好啦。

    《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》
    这个development必须要下载,用于生成导入android studio的配置文件
    《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》 如果要看packages/apps目录下的内置app的源码,也可以选择下载,上面我们下载的是Calculator,你想下载哪个就指定哪一个就可以啦
    《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

  • 想要同步整个AOSP,sync后不用指定project

    #!/bin/bash
    repo sync -j 8
    while [ $? = 1 ]; do
    echo “======sync failed, re-sync again======”
    sleep 3
    repo sync -j 8
    done

    然后命令行执行,就开始下载啦。(注意:Terminal要在aosp文件夹下)

    chmod a+x down.sh
    ./down.sh



下载源码的方式(三),直接下载国内网友打包好的单独源码文件

为啥

  1. aosp文件夹下的.repo文件是仓库
  2. 除了.repo文件夹以外的文件才是真正需要的源码文件
  3. .repo超级大
  4. 别人打包的都是下载完成后删除.repo的压缩包,我把android-7.1.1_r46所有代码压缩了一下,9个G左右,还没上传,但网上有很多,各位自己搜搜看。虽然9个G比下载方式(二)的初始化包的24G要小很多,但是呢,百度网盘太坑爹,速度很慢,在我这儿反而下清华镜像的24G初始化包更快。
  5. 找到一个哥们分享的从1.6到7.1.1的所有源码压缩包 http://pan.baidu.com/s/1ngsZs

关于repo的一些技巧:

  1. 从自己已经下载的AOSP切换到国内清华源
  2. 如果repo sync失败该怎么做 Android Sync 同步 源码问题解决方案
总步骤三:编译源码(其实并不需要编译)并导入Android Studio

文章开头贴出的N个博客都说道了下面三种方式。

  1. (编译得10多个小时,神经病啊,不干,只说下面两种)编译所有源码 — 生成idegen.jar — 执行idegen.sh生成android.ipr/android.iml — Android sutdio导入
  2. 只下载某一部分代码 — 下载别人分享的idegen.jar — 执行idegen.sh生成android.ipr/android.iml — Android sutdio导入
  3. 编译idegen生成属于自己本地这套代码的idegen.jar — 执行idegen.sh生成android.ipr/android.iml — Android sutdio导入

用idegen生成Android Studio导入用的配置文件

  1. 如果你自己下啦完整的AOSP,那么cd aosp 进入源码根目录,然后执行下面的命令

source build/envsetup.sh
make idegen //生成idegen.jar

  1. 如果只下载啦frameworks/base或其他部分代码,用别人的idegen.jar也行
    也可以下载idegen.jar移动到/out/host/linux-x86/framework/目录下,没有目录用下面命令

mkdir -p ./out/host/linux-x86/framework

《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》 idegen.jar 目录

  1. 使用idegen.jar来生成配置文件
    在aosp目录下,执行下面命令,生成ide导入所需的.ipr/.iml文件

development/tools/idegen/idegen.sh

成功之后就会产生两个用于IDE(Android Studio)导入的文件,如下图所示

《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

  1. 导入前,IDE需要设置大内存
    ANDROID_STUDIO_HOME/bin/studio64.vmoptions
    中设置

-Xms1280m
-Xmx1280m

  1. 修改android.iml,排除不想导入的部分,加快导入速度
    (将自己不用的代码去掉)
    就像下面摘取的android.iml文件1887行开始的这些一样(不导入的写成exclude):















也可以通过Android Studio的Project Stucture 打开左侧Modules,然后将右侧Sources中一些目录Excluded掉。

  1. 然后就直接Android studio —- 打开存在的工程 — 选择aosp文件夹下生成的那个Android.ipr文件导入就行了。

    《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

导入后 配置Android Studio

设置AOSP工程的JDK跳转到当前AOSP源码文件中已经存在的.java文件,而非我们之前安装的JDK。

为啥?
下载的aosp源码中已经包含了用到的所有jdk.java文件,不需要依赖我们安装的openjdk

  • 设置工程目录样式为Project

    《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

  • 选择Project Structure

    《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

  • project structure — SDKs — 左上角“+”号新建JDK — 取个名字叫1.8(No Libraries) — 删除Classpath和Sourcepath下的所有东西(右边“-”号删除)

    《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

  • 设置sdk依赖新建的“1.8(No Libraries)”

    《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

解决代码调试时跳转到.class文件而非源码中的.java文件
  • 打开Project Structure—Modules—Dependencies

    《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

  • 选择第一个.jar包,然后下拉倒最下面,按SHIFT选择到之前,点击右侧的下移图标

    《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

    点两次,把最下面两个(分别对应源码文件和没有指向本地JDK的SDK)依赖移动到最上面点击OK,然后代码调试就会先找源码中的.java了,而非下面的一堆.jar。

    《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》
    (大部分博客都说删除其他的依赖,只剩下上图中的前两个,但是我这么做后,源码文件打开会看到一片红,R文件找不到等等,所以我的做法是不删除任何jar包,直接把和API Platform移动到其他jar包之前,让studio先从源码文件夹找.java文件)

让Android studio把当前工程看成Android工程,让aosp工程可以进行DEBUG调试,同样在Project Structure中设置

《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

点击“+”号,选择Android-APK — 点击ok就行了

External file changes sync may be slow 怎么解决

《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

直接按照其给定的解决方法来解决就行。

《下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android Studio) Ubuntu 16.04》

至此,AOSP源码就导入完毕了,你可以开始打断点看源码了!!
推荐阅读
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 本文介绍了在Android Studio中使用命令行build gradle的方法,并解决了一些常见问题,包括手动配置gradle环境变量和解决External Native Build Issues的方法。同时提供了相关参考文章链接。 ... [详细]
  • Scarp框架需求获取网页的url下载网页内容(Downloader下载器)定位元素位置,获取特定的信息(Spiders蜘蛛)存储信息(ItemPipeline,一条一条从管里走) ... [详细]
  • 如何在服务器screate.aspx文件执行_如何在windows环境下,用Goland IDE编译go的linux可执行文件...
    欢迎关注我的头条号:Wooola,专注于Java、Golang、微服务架构,致力于每天分享原创文章、快乐编码和开源技术。前言最近楼主做了一 ... [详细]
  • #12.2RAC之Grid安装----##创建操作系统用户```shell创建用户组usrsbingroupaddoinstallusrsb ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • [DesktopEntry]NameIntelliJIdeaEDUExechomeshundevelopidea-IE-203.5981.183binidea.shIconhome ... [详细]
  • 如何使用Python selenium实现淘宝抢单机器人
    这篇文章将为大家详细讲解有关如何使用Pythonselenium实现淘宝抢单机器人,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章 ... [详细]
author-avatar
koglum
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有