(时间: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下进行的一些列操作。
官网介绍说,7.0到主分支用open jdk8,俺就装open jdk8
在Terminal输入命令行
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo update-alternatives --config java
sudo update-alternatives --config javac
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
一行一行输入就行。
无法获取安装包
图中显示libxml2-utils_2.9.4-1+deb.sury.org~xenial+2_amd64.deb 找不到,无法直接安装。解决方法
cd downloads //进入deb包所在目录
sudo dpkg -i --ignore-depends=libxml2-utils libxml2-utils_2.9.4-1+deb.sury.org-xenial+2_amd64.deb
进行强制安装,问题解决
安装包与已经安装的包冲突
再次遇到不能安装依赖库的问题,不过这次不是获取不到包,而是与已经安装的包冲突,卸载那个包就行了
如图,说zconf.h已经在zlib1g-dev包里面了,安装lib32z1-dev失败
sudo apt remove zlib1g-dev:i386
cd downloads
总步骤二:下载源码
sudo dpkg -i --ignore-depends=lib32z1-dev lib32z1-dev.deb
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
谷歌AOSP官网的Installing Repo
mkdir WORKING_DIRECTORY //我写了mkdir aosp,初始化repo客户端的操作都保持在这个目录下
cd WORKING_DIRECTORY
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
- [the password generator](https://android.googlesource.com/new-password) 进入后登录自己谷歌账户,生成密码,我也不知道怎么解释,照做就是了。进入后如下图所示:
生成的三行代码一次copy进Terminal执行就行了。
- 确定要下载的Android版本
从官网看Source Code Tags and Builds看自己想下哪个版本,Branch一栏就是需要用到的版本号了。
- 以强制认证的方式访问并初始化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文件夹,有就成功了。
proxychains repo sync //proxychains保证repo sync命令走SS,可以访问谷歌服务器
但是还是会因为各种原因导致下载终端,简单执行上面这个命令不可行,看下面一步。
#!/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镜像
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
下载方式(一)
中repo sync操作下载的文件打成压缩包直接从国内地址下载了,速度超快,我这儿速度有4m/s)cd aosp
repo sync -l // -l就是只导出代码到本地,不通过网络更新代码
repo sync -n // -n就是只通过网络更新代码啦
repo sync //正常同步
从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
后面指定就好啦。
这个development必须要下载,用于生成导入android studio的配置文件
如果要看packages/apps目录下的内置app的源码,也可以选择下载,上面我们下载的是Calculator
,你想下载哪个就指定哪一个就可以啦
想要同步整个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
下载方式(二)
的初始化包的24G要小很多,但是呢,百度网盘太坑爹,速度很慢,在我这儿反而下清华镜像的24G初始化包更快。source build/envsetup.sh
make idegen //生成idegen.jar
frameworks/base
或其他部分代码,用别人的idegen.jar也行/out/host/linux-x86/framework/
目录下,没有目录用下面命令mkdir -p ./out/host/linux-x86/framework
idegen.jar 目录
development/tools/idegen/idegen.sh
成功之后就会产生两个用于IDE(Android Studio)导入的文件,如下图所示
ANDROID_STUDIO_HOME/bin/studio64.vmoptions
-Xms1280m
-Xmx1280m
也可以通过Android Studio的Project Stucture 打开左侧Modules,然后将右侧Sources中一些目录Excluded掉。
然后就直接Android studio —- 打开存在的工程 — 选择aosp文件夹下生成的那个Android.ipr文件导入就行了。
为啥?
下载的aosp源码中已经包含了用到的所有jdk.java文件,不需要依赖我们安装的openjdk
设置工程目录样式为Project
选择Project Structure
project structure — SDKs — 左上角“+”号新建JDK — 取个名字叫1.8(No Libraries)
— 删除Classpath和Sourcepath下的所有东西(右边“-”号删除)
设置sdk依赖新建的“1.8(No Libraries)”
打开Project Structure—Modules—Dependencies
选择第一个.jar包,然后下拉倒最下面,按SHIFT选择到
点两次,把最下面两个(分别对应源码文件和没有指向本地JDK的SDK)依赖移动到最上面点击OK,然后代码调试就会先找源码中的.java了,而非下面的一堆.jar。
(大部分博客都说删除其他的依赖,只剩下上图中的前两个,但是我这么做后,源码文件打开会看到一片红,R文件找不到等等,所以我的做法是不删除任何jar包,直接把
点击“+”号,选择Android-APK — 点击ok就行了
直接按照其给定的解决方法来解决就行。
至此,AOSP源码就导入完毕了,你可以开始打断点看源码了!!