编译Android 5.1.1源码

来源:互联网 发布:关键词数据库 编辑:程序博客网 时间:2024/06/06 02:19

源码获取

清华大学的服务器,不用翻墙,很好。

https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

* [新tag]           android-sdk-4.4.2_r1.0.1 -> android-sdk-4.4.2_r1.0.1 * [新tag]           android-wear-5.0.0_r1 -> android-wear-5.0.0_r1 * [新tag]           android-wear-5.1.0_r1 -> android-wear-5.1.0_r1 * [新tag]           android-wear-5.1.1_r1 -> android-wear-5.1.1_r1Fetching projects: 100% (412/412), done.  Checking out files: 100% (1179/1179), done.Checking out files: 100% (44267/44267), done. files:   4% (1835/44267)   Checking out files: 100% (6683/6683), done.out files:  43% (2891/6683)   Checking out files: 100% (556/556), done.g out files:  16% (91/556)   Checking out files: 100% (50822/50822), done. Checking out files: 100% (10083/10083), done.t files:  13% (1348/10083)   Checking out files: 100% (4307/4307), done.out files:   1% (64/4307)   Checking out files: 100% (1132/1132), done.out files:  40% (455/1132)   Checking out files: 100% (3494/3494), done.out files:  11% (403/3494)   Checking out files: 100% (7954/7954), done.Checking out files: 100% (11685/11685), done.ut files:   1% (215/11685)   Checking out files: 100% (383/383), done.ng out files:  12% (46/383)   Checking out files: 100% (406/406), done.ng out files:  19% (81/406)   Checking out files: 100% (2570/2570), done. out files:  16% (423/2570)   Checking out files: 100% (21973/21973), done.Checking out files: 100% (374/374), done.ng out files:  18% (71/374)   Checking out files: 100% (1690/1690), done. out files:  29% (503/1690)   Checking out files: 100% (376/376), done.ng out files:  12% (46/376)   Checking out files: 100% (171/171), done.Checking out files: 100% (181/181), done.ng out files:  44% (81/181)   Checking out files: 100% (378/378), done.ng out files:   9% (36/378)   Checking out files: 100% (181/181), done.ng out files:  35% (65/181)   Checking out files: 100% (2407/2407), done.Checking out files: 100% (177/177), done.ng out files:  42% (76/177)   Checking out files: 100% (182/182), done.Checking out files: 100% (50299/50299), done.ut files:   1% (721/50299)   Checking out files: 100% (4383/4383), done.Checking out files: 100% (28/28), done.king out files:  28% (8/28)   Checking out files: 100% (182/182), done.Checking out files: 100% (1256/1256), done.Syncing work tree: 100% (412/412), done.  

源码编译

编译的基本命令:

. build/envsetup.sh lunchmake -j8

很明显,第一次编译会遇到各种各样的问题,通过搜索引擎找到答案,需要先安装某些软件,于是把一口气这几个装完

sudo apt-get install lib32z1-devsudo apt-get install bisonsudo apt-get install libswitch-perl sudo apt-get install gperfsudo apt-get install libxml2-utilssudo apt-get install gcc-4.6-multilib 


这个问题:

unset NDK_ROOT

including ./external/webp/Android.mk ...including ./external/webrtc/Android.mk ...build/core/base_rules.mk:134: *** external/webrtc/src/system_wrappers/source: MODULE.TARGET.STATIC_LIBRARIES.libwebrtc_system_wrappers already defined by external/webrtc/src/system_wrappers/source。 停止。

然后就能够继续往下编译了,编译出了userdata.img,ramdisk.img,可是到了最后的一步,挂掉了:

external/chromium_org/third_party/WebKit/Source/wtf/PassRefPtr.h:57: error: undefined reference to 'blink::RenderWidget::deref()'external/chromium_org/third_party/WebKit/Source/wtf/PassRefPtr.h:57: error: undefined reference to 'blink::RenderWidget::deref()'external/chromium_org/third_party/WebKit/Source/wtf/PassRefPtr.h:57: error: undefined reference to 'blink::RenderWidget::deref()'external/chromium_org/third_party/WebKit/Source/wtf/PassRefPtr.h:57: error: undefined reference to 'blink::RenderWidget::deref()'external/chromium_org/third_party/WebKit/Source/core/frame/FrameView.cpp:1955: error: undefined reference to 'blink::RenderWidget::updateWidgetPosition()'external/chromium_org/third_party/WebKit/Source/core/frame/FrameView.cpp:1060: error: undefined reference to 'blink::RenderWidget::updateWidgetPosition()'external/chromium_org/third_party/WebKit/Source/core/frame/FrameView.cpp:1063: error: undefined reference to 'blink::RenderWidget::widgetPositionsUpdated()'external/chromium_org/third_party/WebKit/Source/core/frame/FrameView.cpp:339: error: undefined reference to 'blink::TextAutosizer::updatePageInfoInAllFrames()'external/chromium_org/third_party/WebKit/Source/core/frame/FrameView.cpp:896: error: undefined reference to 'blink::RenderView::shouldDoFullPaintInvalidationForNextLayout() const'external/chromium_org/third_party/WebKit/Source/core/frame/FrameView.cpp:1689: error: undefined reference to 'blink::TextAutosizer::updatePageInfoInAllFrames()'external/chromium_org/third_party/WebKit/Source/core/frame/FrameView.cpp:974: error: undefined reference to 'blink::RenderView::invalidateTreeIfNeeded(blink::PaintInvalidationState const&)'collect2: error: ld returned 1 exit statusmake: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libwebviewchromium_intermediates/LINKED/libwebviewchromium.so] 错误 1

这个问题是链接时找不到RenderView相关的东东,很是奇怪,搜索引擎上也找不到答案......

琢磨了半天,决定把Webkit相关的东东全部移除掉,这样至少能编译出系统,顶多就是和浏览器相关的用不了....

于是在下面的这三个目录中:

yanchen@yanchen:~/Dev/android50/external$ ls chromiumchromium-libpac/ chromium_org/    chromium-trace/
分别执行下面的命令去掉mk文件:

find -name "Android.mk" | xargs -i mv "{}" "{}_bak"

再次编译,卡在了webview.apk上:

including ./system/netd/server/Android.mk ...including ./system/security/keystore-engine/Android.mk ...including ./system/security/keystore/Android.mk ...including ./system/security/softkeymaster/Android.mk ...including ./system/vold/Android.mk ...including ./tools/external/fat32lib/Android.mk ...make: *** 没有规则可以创建“out/target/product/generic/system/app/webview/webview.apk”需要的目标“out/target/product/generic/system/lib/libwebviewchromium.so”。 停止。

于是切换到frameworks/webview目录下,再此执行上面的命令,去掉mk文件:

yanchen@yanchen:~/Dev/android50/frameworks/webview$ find -name "Android.mk" | xargs -i mv "{}" "{}_bak"

再次编译,终于成功了:

including ./tools/external/fat32lib/Android.mk ...build/tools/generate-notice-files.py  out/target/product/generic/obj/NOTICE.txt  out/target/product/generic/obj/NOTICE.html "Notices for files contained in the filesystem images in this directory:" out/target/product/generic/obj/NOTICE_FILES/srcCombining NOTICE files into HTMLCombining NOTICE files into textInstalled file list: out/target/product/generic/installed-files.txtTarget system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.imgRunning:  mkuserimg.sh out/target/product/generic/system out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img ext4 system 576716800 out/target/product/generic/root/file_contextsmake_ext4fs -T -1 -S out/target/product/generic/root/file_contexts -l 576716800 -a system out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img out/target/product/generic/systemCreating filesystem with parameters:    Size: 576716800    Block size: 4096    Blocks per group: 32768    Inodes per group: 7040    Inode size: 256    Journal blocks: 2200    Label:     Blocks: 140800    Block groups: 5    Reserved block group size: 39Created filesystem with 1461/35200 inodes and 102199/140800 blocksInstall system fs image: out/target/product/generic/system.imgout/target/product/generic/system.img+ maxsize=588791808 blocksize=2112 total=576716800 reserve=5947392#### make completed successfully (01:14 (mm:ss)) ####

编译完后启动模拟器:



遇到的问题2:

target Java: bouncycastle (out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/classes)javac: 目标发行版 1.5 与默认的源发行版 1.7 冲突make: *** [out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/classes-full-debug.jar] 错误 41

这是java版本不兼容,重新设置以下java path可解决:

source /etc/profile_make_android4.4

profile_make_android4.4的内容:

#export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64export JAVA_HOME=/home/yanchen/Dev/jdk6/jdk1.6.0_43export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATHexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH


如何刷到手机:

我的是Nexus 5,先下载3个驱动:

https://developers.google.com/android/nexus/drivers#hammerhead

解压放到源码根目录,分别执行这3个sh文件。

然后再次make,速度会很快。

编译完成后,进入out/target/product/hammerhead,执行:

sudo fastboot -w flashall


0 0
原创粉丝点击