1. 如何针对特定机型,编译cwm recovery
你必须使用32位或64位Ubuntu系统,关于如何建立编译环境和同步源码的指导,请自己查找有关指导的文章。
1,
安装所需要的包
2,
建立编译的环境,并同步CWM所需的源码,CyanogenMod源码中附带CWM源码
CWM
5
-
Gingerbread
CWM
6
-
Jellybean
3,
下面我们进入真正的编译阶段,确保你已经使用“repo
sync
”命令同步了最新的源码
进入源码的目录
放出以下命令:
make
-j4
otatools
3.5,
如果你的机型不被CM10官方支持,请执行这一步
在你的手机终端上执行以下命令,
mp_image
boot
/sdcard/boot.img
这将boot镜像导出到你手机的sdcard,复制该镜像至你的home目录下
为一款新设备编译android源码,需要建立相应的配置文件和makefile文件,这通常比较麻烦,如果仅仅编译recovery镜像,会容易的多。在android源码根目录下(假设已运行envsetup.sh),运行以下命令(使用适当的名称取代命令中的名称)
build/tools/device/mkvendor.sh
device_manufacturer_name
device_name
/your/path/to/the/boot.img
例如,你拥有Samsung
Galaxy
Ace这款设备,你应该使用以下这条命令
build/tools/device/mkvendor.sh
Samsung
cooper
~/boot.img
Please
note
that
Cooper
is
the
device
name.
Only
use
"~/boot.img"
if
you
have
the
boot
image
in
your
home
directory.
Or
else
please
specify
the
correct
path.
如果所有都工作正常,你将看到"Done!"这样的确认信息。mkvendor.sh脚本也将在你的android源码树中创建以下目录:
manufacturer_name/device_name
4,
现在你已经拥有相关的配置文件
在源码目录下,在terminal终端下键入以下命令
.
build/envsetup.sh
这一步将为你建立编译环境
现在使用这条命令
lunch
full_device_name-eng
这将为你的设备建立起build
system。用文件管理器或IDE打开目录,你应该拥有以下文件:
AndroidBoard.mk,
AndroidProcts.mk,
BoardConfig.mk,
device_.mk,
kernel,
system.prop,
recovery.fstab,
和
vendorsetup.sh
对你感兴趣的应该是recovery.fstab和kernel这两个文件,kernel这个文件是你之前从boot.img文件中提取出的。recovery.fstab将适用于大部分拥有
mtd,
emmc,或者其他分区的设备。如果没有,recovery.fstab将需要优化以支持加载这些点。例如
/sdcard被加载至/dev/block/mmcblk1p1,
你需要将下面这段加入到你的BoardConfig.mk文件中
/sdcard
vfat
/dev/block/mmcblk1p1
一旦recovery.fstab已经适当的装载,你可以开始下一步了
5,
现在,我们开始编译Recovery
make
-j4
recoveryimage
这个命令用于编译recovery镜像
你能使用这个命令
make
-j4
recoveryzip
用于建立一个临时的recovery.zip刷机包在你真实的设备上测试
你编译好的recovery可以在"your_source_directory/OUT/target/proct/device/recovery.img"目录下找到。而.zip刷机包可以在相同目录下的utilities文件夹下找到。
如果各项测试正常,就可以有一个成功的recovery
一旦你编译通过了recovery,通知"koush",在Github上,他就能根据你的编译文件发放官方版的CWM
Recovery,并使Rom
Manager提供相应的支持。
小贴士:
如果你想编译CWM6,使用以下命令同步jellybean分支源码
repo
init
-u
git://github.com/CyanogenMod/android.git
-b
jellybean
repo
sync
如果你改变了BoardConfig.mk文件,在编译期间运行"make
clobber",否则你做的更改就不会生效。
2. 编译android 源码需要sdk环境吗
下面是android学习手册,可以查看编译源码,360手机助手中下载,
编译环境:ubuntu9.10,widnows平台目前不被支持。
1)安装必要的软件环境
$ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
官方推荐的就是上面这些,如果在编译过程中发现某些命令找不到,就apt-get它。可能需要的包还有:
$ sudo apt-get install make
$ sudo apt-get install gcc
$ sudo apt-get install g++
$ sudo apt-get install libc6-dev
$ sudo apt-get install patch
$ sudo apt-get install texinfo
$ sudo apt-get install zlib1g-dev
$ sudo apt-get install valgrind
$ sudo apt-get install python2.5(或者更高版本)
需要注意的是,官方文档说如果用sun-java6-jdk可出问题,得要用sun-java5- jdk。经测试发现,如果仅仅make(make不包括make sdk),用sun-java6-jdk是没有问题的。而make sdk,就会有问题,严格来说是在make doc出问题,它需要的javadoc版本为1.5。
因此,我们安装完sun-java6-jdk后最好再安装sun-java5-jdk,或者只安装sun-java5-jdk。这里sun-java6-jdk和sun-java5-jdk都安装,并只修改javadoc.1.gz和javadoc。因为只有这两个是make sdk用到的。这样的话,除了javadoc工具是用1.5版本,其它均用1.6版本:
$ sudo apt-get install sun-java6-jdk
修改javadoc的link:
$ cd /etc/alternatives
$ sudo rm javadoc.1.gz
$ sudo ln -s /usr/lib/jvm/java-1.5.0-sun/man/man1/javadoc.1.gz javadoc.1.gz
$ sudo rm javadoc
$ sudo ln -s /usr/lib/jvm/java-1.5.0-sun/bin/javadoc javadoc
2)设置环境变量
$ emacs ~/.bashrc
在.bashrc中新增或整合PATH变量,如下:
#java 程序开发/运行的一些环境变量
JAVA_HOME=/usr/lib/jvm/java-6-sun
JRE_HOME=${JAVA_HOME}/jre
export ANDROID_JAVA_HOME=$JAVA_HOME
export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export JAVA_HOME;
export JRE_HOME;
export CLASSPATH;
HOME_BIN=~/bin/
export PATH=${PATH}:${JAVA_PATH}:${HOME_BIN};
保存后,同步更新:
source ~/.bashrc
3)安装repo(用来更新android源码)
创建~/bin目录,用来存放repo程序,如下:
$ cd ~
$ mkdir bin
并加到环境变量PATH中,在第2步中已经加入。
下载repo脚本并使其可执行:
$ curlhttp://android.git.kernel.org/repo>~/bin/repo
$ chmod a+x ~/bin/repo
4)初始化repo
repo是android对git的一个封装,简化了一些git的操作。
创建工程目录:
$ mkdir android
$ cd android
repo初始化:
$ repo init -u git://android.git.kernel.org/platform/manifest.git
在此过程中需要输入名字和email地址。初始化成功后,会显示:
repo initialized in /android
在~/android下会有一个.repo的隐藏目录。
5)同步源代码
$ repo sync
这一步要很久很久。
6)编译android源码,并得到~/android/out目录
$ cd ~/andoird
$ make
这一过程很久。
7)在模拟器上运行编译好的android
编译好android之后,emulator在~/android/out/host/linux-x86/bin下,ramdisk.img,system.img和userdata.img则在~/android/out/target/proct/generic下。
$ cd ~/android/out/host/linux-x86/bin
增加环境变量
$ emacs ~/.bashrc
在.bashrc中新增环境变量,如下
#java 程序开发/运行的一些环境变量
export ANDROID_PRODUCT_OUT=~/android/out/target/proct/generic
ANDROID_PRODUCT_OUT_BIN=~/android/out/host/linux-x86/bin
export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_PRODUCT_OUT};
最后,同步这些变化:
$ source ~/.bashrc
$ cd ~/android/out/target/proct/generic
$ emulator -system system.img -data userdata.img -ramdisk ramdisk.img
最后进入android桌面,就说明成功了。
8)编译模块
android中的一个应用程序可以单独编译,编译后要重新生成system.img。
在源码目录下执行
$ . build/envsetup.sh (.后面有空格)
就多出一些命令:
- croot: Changes directory to the top of the tree.
- m: Makes from the top of the tree.
- mm: Builds all of the moles in the current directory.
- mmm: Builds all of the moles in the supplied directories.
- cgrep: Greps on all local C/C++ files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir: Go to the directory containing a file.
可以加—help查看用法。
我们可以使用mmm来编译指定目录的模块,如编译联系人:
$ mmm packages/apps/Contacts/
编完之后生成两个文件:
out/target/proct/generic/data/app/ContactsTests.apk
out/target/proct/generic/system/app/Contacts.apk
可以使用
$ make snod
重新生成system.img,再运行模拟器。
9)编译SDK
直接执行make是不包括make sdk的。make sdk用来生成SDK,这样,我们就可以用与源码同步的SDK来开发android了。
a)修改/frameworks/base/include/utils/Asset.h
‘UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024’ 改为 ‘UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024’
原因是eclipse编译工程需要大于1.3M的buffer;
b)编译ADT
由于本人不使用eclipse,所以没有进行这步;
c)执行make sdk
注意,这里需要的javadoc版本为1.5,所以你需要在步骤1中同时安装sun-java5-jdk
$ make sdk
编译很慢。编译后生成的SDK存放在out/host/linux-x86/sdk/,此目录下有android-sdk_eng.xxx_linux- x86.zip和android-sdk_eng.xxx_linux-x86目录。android-sdk_eng.xxx_linux-x86就是 SDK目录。
实际上,当用mmm命令编译模块时,一样会把SDK的输出文件清除,因此,最好把android-sdk_eng.xxx_linux-x86移出来。
此后的应用开发,就在该SDK上进行,所以把7)对于~/.bashrc的修改注释掉,增加如下一行:
export PATH=${PATH}:~/android/out/host/linux-x86/sdk/android-sdk_eng.xxx_linux-x86/tools
注意要把xxx换成真实的路径;
d)关于环境变量、android工具的选择
目前的android工具有:
A、我们从网上下载的Android SDK,如果你下载过的话( tools下有许多android工具,lib/images下有img映像)
B、我们用make sdk编译出来的SDK( tools下也有许多android工具,lib/images下有img映像)
C、我们用make编译出来的out目录( tools下也有许多android工具,lib/images下有img映像)
那么我们应该用那些工具和img呢?
首先,我们一般不会用A选项的工具和img,因为一般来说它比较旧,也源码不同步。其次,也不会用C选项的工具和img,因为这些工具和img没有经过SDK的归类处理,会有工具和配置找不到的情况;事实上,make sdk产生的很多工具和img,在make编译出来out目录的时候,已经编译产生了,make sdk只是做了而已。
e)安装、配置ADT
略过;
f)创建Android Virtual Device
编译出来的SDK是没有AVD(Android Virtual Device)的,我们可以通过android工具查看:
$ android list
创建AVD:
$ android create avd -t 1 -n myavd
可以android –help来查看上面命令选项的用法。创建中有一些选项,默认就行了。
再执行android list,可以看到AVD存放的位置。
以后每次运行emulator都要加-avd myavd或@myavd选项:
$ emulator -avd myavd
10)编译linux内核映像
a)准备交叉编译工具链
android代码树中有一个prebuilt项目,包含了我们编译内核所需的交叉编译工具。
b)设定环境变量
$ emacs ~/.bashrc
增加如下两行:
export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin
export ARCH=arm
保存后,同步变化:
$ source ~/.bashrc
c)获得合适的内核源代码
$ cd ~/android
获得内核源代码仓库
$ git clone git://android.git.kernel.org/kernel/common.git kernel
$ cd kernel
$ git branch
显示
* android-2.6.27
说明你现在在android-2.6.27这个分支上,也是kernel/common.git的默认主分支。
显示所有head分支:
$ git branch -a
显示
* android-2.6.27
remotes/origin/HEAD -> origin/android-2.6.27
remotes/origin/android-2.6.25
remotes/origin/android-2.6.27
remotes/origin/android-2.6.29
remotes/origin/android-goldfish-2.6.27
remotes/origin/android-goldfish-2.6.29
我们选取最新的android-goldfish-2.6.29,其中goldfish是android的模拟器模拟的CPU。
$ git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29
$ git branch
显示
android-2.6.27
* android-goldfish-2.6.29
我们已经工作在android-goldfish-2.6.29分支上了。
d)设定交叉编译参数
打开kernel目录下的Makefile文件,把CROSS_COMPILE指向刚才下载的prebuilt中的arm-eabi编译器.
CROSS_COMPILE ?= arm-eabi-
把
LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,
$(call ld-option, -Wl$(comma)–build-id,))
这一行注释掉,并且添加一个空的LDFLAGS_BUILD_ID定义,如下:
LDFLAGS_BUILD_ID =
e)编译内核映像
$ cd ~/android/kernel
$ make goldfish_defconfig
$ make
f)测试生成的内核映像
$ emulator -avd myavd -kernel ~/android/kernel/arch/arm/boot/zImage
3. 如何编译android手机源码
编译android系统源码准备工作:
下载android源码
在windows上用gitbash ,git clone 下载代码
在linux上这样下载
创建~/bin目录,用来存放repo程序,如下:
$ cd ~
$ mkdir bin
初始化repo
repo是android对git的一个封装,简化了一些git的操作。
创建工程目录:
$ mkdir android
$ cd android
下载repo脚本并使其可执行:
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo
repo初始化:
$ repo init -u git://android.git.kernel.org/platform/manifest.git
在此过程中需要输入名字和email地址。初始化成功后,会显示:
repo initialized in /android
在~/android下会有一个.repo的隐藏目录。
5)同步源代码
$ repo sync
这一步要很久很久。
安装linux系统,推荐ubuntu,图形界面
安装编译需要的支持包
$ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
安装java6.0
$ sudo apt-get install sun-java6-jdk
配置java环境
sudo gedit ~/.bashrc
末尾加上
JAVA_HOME=/usr/lib/jvm/java-6-sun
JRE_HOME=${JAVA_HOME}/jre
export ANDROID_JAVA_HOME=$JAVA_HOME
export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export JAVA_HOME;
export JRE_HOME;
export CLASSPATH;
HOME_BIN=~/bin/
export PATH=${PATH}:${JAVA_PATH}:${HOME_BIN};
sudo source ~/.bashrc
是环境变量生效
编译android源码,并得到~/android/out目录
$ cd ~/andoird
$ make
这一过程很久。
这就编译结束了
4. 怎么把.repo缓存区的代码弄成本地的可读文件呢
那是git库 ,你需要安装一个git就能对他读写和提取
git是纯命令的,你安装完git后再装个git的gui就容易多了。
5. 如何把CyanogenMod 移植到到自己的android设备上
工欲善其事,必先利其器
1、基础环境
使用的环境:ubuntu 11.04环境,测试的Android机器 华为:C8500。
官方文档列出开发需要下列的软件包以及下载来源:
Python 2.5 -- 2.7, python.org.
GNU Make 3.81 -- 3.82, gnu.org
JDK 6 if you wish to build Gingerbread or newer; JDK 5 for Froyo or older. You can download both from java.sun.com.这里安装的是JDK6
Git 1.7 or newer. git-scm.com.
官方文档说11.10的运行以下的安装命令如下:
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \
libxml2-utils xsltproc
网上有一安装的指引给出另一个安装命令
$sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev sun-java6-jdk pngcrush schedtool
由于懒得逐个包去甄别,上述两条命令我都运行和安装了。
注意:sun-java6-jdk是无法安装的,可以自己下载
2、关于 USB 访问权限
Android的开发和调试使用的最主要连接设备的命令 adb和fastboot都需要使用USB连接,从文档上知道,Ubuntu下面USB的访问权限可能会出问题,解决的方法文档也列明了。
我的经验是如果访问不了连接的USB设备了,再查阅资料处理。为了以备以后查阅,记录下来如下:
针对摩托罗拉的设备,使用root文件创建/lib/udev/rules.d/11-android.rules,生成下列的配置到文件中。#号为注释符号,下列配置,第一行针对一种设备,第二行针对所有摩托罗拉设备。
#SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", ATTRS{idProct}=="41db",MODE="0666,OWNER="shallon"
SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", MODE="0666", OWNER="shallon" #All Motorola
其中的idVendor和idProct的值怎么来呢?用USB线连接设备,然后运行lsusb可以看到设备的这两个值,例如,下文显示摩托罗拉的ME811的相关配置值就是22b8和41db。
Bus 001 Device 082: ID 22b8:41db Motorola PCS Droid/Milestone (Debug mode)
Bus 001 Device 083: ID 046d:c018 Logitech, Inc. Optical Wheel Mouse
3、安装repo
repo是一种更好的用git的一种工具环境。下面命令中repo安装到用户home目录的bin目录下。
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
4、下载安装Android 源码
如果不打算编译Android源码,可以跳过。在WORKING_DIRECTORY上下载源代码,使用repo init命令指定下载源代码的版本,-b 参数指定版本号,如果不指定,则是最近的一个版本。
repo sync则是下载/同步代码的命令。
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
$ repo init -u https://android。googlesource。com/platform/manifest
$ repo init -u https://android。googlesource。com/platform/manifest -b android-4.0.1_r1
$ repo sync
4.a、下载 cyanogenmod 的源码可以生成自定义的 Android Rom
CyanogenMod 致力于生成第三方的非官方的 Android 的 Rom ,目前比较火爆的小米手机的MIUI就是CyanogenMod的衍生产品。下面的命令获取 gingerbread 的版本的源代码。如果不打算尝试这些工作可以跳过此步。
$ mkdir -p ~/cyanogenmod
$ repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
$ repo sync -j16
n这里是16,表示同时打开的网络链接数,开启多个网络连接来下载,用以提升的下载的速度。
5、下载开发编译用的Android SDK
参考的官方文档:http://developer。android。com/sdk/installing.html
5.1下载eclipse开发环境,推荐安装“Eclipse Classic”版本,介质下载的地址:http://www.eclipse.org/downloads/ 不用eclipse者可以略过
5.2下载Android SDK,介质安装的地址:http://developer。android。com/sdk/index.html
5.3下载安装eclipse 的ADT plug-in,ADT是 Android Development Tools的缩写。
5.4安装相关的工具包开发包。
安装的方法,可以从eclipse的IDE界面启动Android SDK Manager, Window > Android SDK Manager,或者在Android SDK的根目录运行android命令。
下列的开发包必须要安装:“SDK Tools”,“SDK Platform-tools”,“Android platforms(选择一个或者多个)”
6、测试Android SDK的主要开发工具
6.1 adb
使用USB线连接一台测试的Android设备,运行adb 的两个命令
~/android/sdk/android-sdk-linux/platform-tools$ ./adb devices
List of devices attached
0A3AABB70502A00A device
以及
~/android/sdk/android-sdk-linux/platform-tools$ ./adb shell 连接上设备,能够看到设备上的文件系统,证明adb的工具运作正常。
adb的工具很重要,主要用来调测设备。如果设备被“root”(系统被破解,开放了设备的管理员权限),连接上设备之后,能进行安装、删除软件,远程上传/下载文件,以及查看系统的日志等操作。如果设备没有“root”,则可以用的操作少很多。
6.2 fastboot
fastboot则是用来刷机的,主要用到的操作如下:
fastboot flash userdata userdata.img
fastboot flash system system.img
fastboot flash boot boot.img
fastboot reboot
6.3 SDK上的Android模拟器
~/android/sdk/android-sdk-linux/tools$ ./emulator ,显示命令存在,但是报错了,不要紧,这里运行一下只是看看是否正常安装了。
6. 如何用repo强制和远程代码同步
Android ROM开发经常使用repo sync。有时候有些project因为调试的原因做了一些改动,sync下来就和远程不同步了。
参考了repo的代码(.repo/repo/subcmds/sync.py)里有个参数:
p.add_option('-d', '--detach',
dest='detach_head', action='store_true',
help='detach projects back to manifest revision')
repo sync -d会将HEAD强制指向manifest的库,而忽略本地的改动。
所以比较安全的做法是
先确认本地改动没必要保存了,确认之前不妨用分支备份一下(git checkout -b backup_branch; git add -u; git commit)
或者用笨办法,直接用cp备份一下,然后:
<!-- lang: shell -->
repo sync -d
repo forall -c 'git reset --hard' # Remove all working directory (and staged) changes.
repo forall -c 'git clean -f -d' # Clean untracked files
这样,本地代码和远程服务器的代码就完全一致了。
7. 同步Android源码的时候,repo报错
在该仓库目录下,新建文件夹,进入该文件夹,执行如下命令:
1. touch Readme
2. git init
3. git add Readme
4. git commit -m 'initial commit' Readme
8. 自己可以编译安卓源码吗
用最新的Ubuntu 16.04,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:
sudo apt-get install git git config –global user.email “[email protected]” git config –global user.name “test”
其中[email protected]为你自己的邮箱.
简要说明
android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述.
源码下载
由于某墙的原因,这里我们采用国内的镜像源进行下载.
目前,可用的镜像源一般是科大和清华的,具体使用差不多,这里我选择清华大学镜像进行说明.(参考:科大源,清华源)
repo工具下载及安装
通过执行以下命令实现repo工具的下载和安装
mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo
补充说明
这里,我来简单的介绍下repo工具,我们知道AOSP项目由不同的子项目组成,为了方便进行管理,Google采用Git对AOSP项目进行多仓库管理.在聊repo工具之前,我先带你来聊聊多仓库项目:
我们有个非常庞大的项目Pre,该项目由很多个子项目R1,R2,...Rn等组成,为了方便管理和协同开发,我们为每个子项目创立自己的仓库,整个项目的结构如下:
这里写图片描述
执行完该命令后,再使用make命令继续编译.某些情况下,当你执行jack-admin kill-server时可能提示你命令不存在,此时去你去out/host/linux-x86/bin/目录下会发现不存在jack-admin文件.如果我是你,我就会重新repo sync下,然后从头来过.
错误三:使用emulator时,虚拟机停在黑屏界面,点击无任何响应.此时,可能是kerner内核问题,解决方法如下:
执行如下命令:
通过使用kernel-qemu-armv7内核 解决模拟器等待黑屏问题.而-partition-size 1024 则是解决警告: system partion siez adjusted to match image file (163 MB >66 MB)
如果你一开始编译的版本是aosp_arm-eng,使用上述命令仍然不能解决等待黑屏问题时,不妨编译aosp_arm64-eng试试.
结束吧
到现在为止,你已经了解了整个android编译的流程.除此之外,我也简单的说明android源码的多仓库管理机制.下面,不妨自己动手尝试一下.