热门标签 | 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源码就导入完毕了,你可以开始打断点看源码了!!
推荐阅读
  • 在将 Android Studio 从 3.0 升级到 3.1 版本后,遇到项目无法正常编译的问题,具体错误信息为:org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDemoProductDebugResources'。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • 使用 MATLAB 将高光谱数据集转换为伪彩色 CIE 图像
    本文介绍了一种方法,通过 MATLAB 将高光谱数据集的每个维度的图像转换为伪彩色 CIE 图像。用户只需指定波段即可完成转换。 ... [详细]
  • 本文通过分析一个具体的案例,探讨了64位Linux系统对32位应用程序的兼容性问题。案例涉及OpenVPN客户端在64位系统上的异常行为,通过逐步排查和代码测试,最终定位到了与TUN/TAP设备相关的系统调用兼容性问题。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 本文详细介绍了如何在 Vue CLI 3.0 和 2.0 中配置 proxy 来解决开发环境下的跨域问题,包括具体的配置项和使用场景。 ... [详细]
  • protobuf 使用心得:解析与编码陷阱
    本文记录了一次在广告系统中使用protobuf进行数据交换时遇到的问题及其解决过程。通过这次经历,我们将探讨protobuf的特性和编码机制,帮助开发者避免类似的陷阱。 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • 深入理解云计算与大数据技术
    本文详细探讨了云计算与大数据技术的关键知识点,包括大数据处理平台、社会网络大数据、城市大数据、工业大数据、教育大数据、数据开放与共享的应用,以及搜索引擎与Web挖掘、推荐技术的研究及应用。文章还涵盖了云计算的基础概念、特点和服务类型分类。 ... [详细]
  • Logging all MySQL queries into the Slow Log
    MySQLoptionallylogsslowqueriesintotheSlowQueryLog–orjustSlowLog,asfriendscallit.However,Thereareseveralreasonstologallqueries.Thislistisnotexhaustive:Belowyoucanfindthevariablestochange,astheyshouldbewritteninth ... [详细]
  • 计算机学报精选论文概览(2020-2022)
    本文汇总了2020年至2022年间《计算机学报》上发表的若干重要论文,旨在为即将投稿的研究者提供参考。 ... [详细]
  • 使用QT构建基础串口辅助工具
    本文详细介绍了如何利用QT框架创建一个简易的串口助手应用程序,包括项目的建立、界面设计与编程实现、运行测试以及最终的应用程序打包。 ... [详细]
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社区 版权所有