Android學習系列(38)--Android源碼下載和編譯

來源:互聯網
上載者:User

前面多篇文章介紹到如何下載和編譯Android或者CM源碼,不過一直都是放在《拓展系列》裡。
隨著學習的深入,android源碼是非常有參考和學習價值,強烈推薦大家都去下載,編譯,學習,所以把它提到《學習系列》專講一章基礎篇。
剛裝了UBUNTU14.04,所以嘗試在新環境下編譯一下android源碼。
因為和諧原因,我臨時買了個VPN,推薦一下(還算穩定):http://a.wy002.com/34750

1、參考連結(官方):
環境:http://source.android.com/source/initializing.html
下載:http://source.android.com/source/downloading.html
編譯:http://source.android.com/source/building-running.html

2、Ubuntu14.04(x64)+ OpenJDK7
最新的代碼用預設的openjdk7就可以編譯通過,反而用jdk6無法編譯。
安裝openjdk7:

$ sudo apt-get update$ sudo apt-get install openjdk-7-jdk$ sudo update-alternatives --config java$ sudo update-alternatives --config javac

安裝其他組件:

$ sudo apt-get install git gnupg flex bison gperf build-essential \  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \  libgl1-mesa-dev g++-multilib mingw32 tofrodos \  python-markdown libxml2-utils xsltproc zlib1g-dev:i386$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

我這裡安裝很快(我配置了163的mirror),一切順利。

3、連上VPN
直接參考這個VPN官方說明:
https://www.51jsq.org/setting/ubuntu.shtml

4、安裝repo

$ mkdir ~/bin$ PATH=~/bin:$PATH$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo$ chmod a+x ~/bin/repo

為了方便,你可以繼續配置一下repo:
在.bashrc中添加:

alias repo='~/bin/repo'

5、開始下載

$ mkdir android$ cd android$ repo init -u https://android.googlesource.com/platform/manifest //下載最新

上面是初始化(init)repo版本庫,真正的下載:

$ repo sync

也許是我命好,翻牆之後,下載一切順利,沒有以前碰到的和網上說的的一大堆問題,唯一的一個尷尬的問題,下載的過程中經常斷。
早上醒來的時候斷了,繼續repo sync,下班回來一看,斷了,repo sync ...
大概斷斷續續的花了2天2夜在今天晚上加班回來下載好了。
提醒一下,如果你下載出錯了,請務必仔細看看是什麼錯誤,不是一味的repo sync,我這次這麼順利簡直“不科學”~
下載好了!!!!

6、開始編譯
初始化一些參數和變數:

$ source build/envsetup.sh

定義裝置類型,我們使用模擬器(aosp_arm-eng):

/*xxx@ubuntu:~/Data/android$ lunch You're building on LinuxLunch menu... pick a combo:     1. aosp_arm-eng     2. aosp_arm64-eng     3. aosp_mips-eng     4. aosp_mips64-eng     5. aosp_x86-eng     6. aosp_x86_64-eng     7. vbox_x86-eng     8. aosp_hammerhead-userdebug     9. aosp_mako-userdebug     10. aosp_manta-userdebug     11. aosp_tilapia-userdebug     12. aosp_grouper-userdebug     13. aosp_deb-userdebug10、小結     14. aosp_flo-userdebug     15. mini_armv7a_neon-userdebug     16. mini_mips-userdebug     17. mini_x86-userdebugWhich would you like? [aosp_arm-eng] 1============================================PLATFORM_VERSION_CODENAME=RELPLATFORM_VERSION=4.4.3.2.1.000.000TARGET_PRODUCT=aosp_armTARGET_BUILD_VARIANT=engTARGET_BUILD_TYPE=releaseTARGET_BUILD_APPS=TARGET_ARCH=armTARGET_2ND_ARCH=TARGET_ARCH_VARIANT=armv7-aTARGET_CPU_VARIANT=genericHOST_ARCH=x86HOST_OS=linuxHOST_OS_EXTRA=Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14.04-trustyHOST_BUILD_TYPE=releaseBUILD_ID=OPENMASTEROUT_DIR=out============================================*/

定義好了後,開始編譯(是最新的4.4.3的版本):

/*xxx@ubuntu:~/Data/android$ make -j8============================================PLATFORM_VERSION_CODENAME=RELPLATFORM_VERSION=4.4.3.2.1.000.000TARGET_PRODUCT=aosp_armTARGET_BUILD_VARIANT=engTARGET_BUILD_TYPE=releaseTARGET_BUILD_APPS=TARGET_ARCH=armTARGET_2ND_ARCH=TARGET_ARCH_VARIANT=armv7-aTARGET_CPU_VARIANT=genericHOST_ARCH=x86HOST_OS=linuxHOST_OS_EXTRA=Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14.04-trustyHOST_BUILD_TYPE=releaseBUILD_ID=OPENMASTEROUT_DIR=out============================================including ./abi/cpp/Android.mk ...including ./art/Android.mk ...including ./bionic/Android.mk ...including ./bootable/diskinstaller/Android.mk ...including ./bootable/recovery/Android.mk ...including ./build/libs/host/Android.mk ...including ./build/target/board/Android.mk ...including ./build/tools/Android.mk ...including ./cts/Android.mk ...// ... ...Installed 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_contexts// ... ...+ ENABLE_SPARSE_IMAGE=+ '[' out/target/product/generic/system = -s ']'+ '[' 6 -ne 5 -a 6 -ne 6 ']'+ SRC_DIR=out/target/product/generic/system+ '[' '!' -d out/target/product/generic/system ']'+ OUTPUT_FILE=out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img+ EXT_VARIANT=ext4+ MOUNT_POINT=system+ SIZE=576716800+ FC=out/target/product/generic/root/file_contexts+ case $EXT_VARIANT in+ '[' -z system ']'+ '[' -z 576716800 ']'+ '[' -n out/target/product/generic/root/file_contexts ']'+ FCOPT='-S out/target/product/generic/root/file_contexts'+ MAKE_EXT4FS_CMD='make_ext4fs  -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/system'+ echo make_ext4fs -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/systemmake_ext4fs -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/system+ make_ext4fs -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 1295/35200 inodes and 100299/140800 blocks+ '[' 0 -ne 0 ']'Install system fs image: out/target/product/generic/system.imgout/target/product/generic/system.img+ maxsize=588791808 blocksize=2112 total=576716800 reserve=5947392*/

編譯完成。

7、運行模擬器
在前面 souce build/envsetup.sh中已經添加emulator命令了:

$ emulator

就能跑起一個模擬器了:

8、修改和編譯系統應用代碼
我們修改一下系統應用Mms的標題:

使用mm命令編譯:

/*xxx@ubuntu:~/Data/android/packages/apps/Mms$ mm============================================PLATFORM_VERSION_CODENAME=RELPLATFORM_VERSION=4.4.3.2.1.000.000TARGET_PRODUCT=aosp_armTARGET_BUILD_VARIANT=engTARGET_BUILD_TYPE=releaseTARGET_BUILD_APPS=TARGET_ARCH=armTARGET_2ND_ARCH=TARGET_ARCH_VARIANT=armv7-aTARGET_CPU_VARIANT=genericHOST_ARCH=x86HOST_OS=linuxHOST_OS_EXTRA=Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14.04-trustyHOST_BUILD_TYPE=releaseBUILD_ID=OPENMASTEROUT_DIR=out============================================make:進入目錄'/home/xxx/Data/android'target R.java/Manifest.java: Mms (out/target/common/obj/APPS/Mms_intermediates/src/R.stamp)warning: string 'menu_insert_smiley' has no default translation.target Java: Mms (out/target/common/obj/APPS/Mms_intermediates/classes)注: 某些輸入檔案使用或覆蓋了已淘汰的 API。注: 有關詳細資料, 請使用 -Xlint:deprecation 重新編譯。注: 某些輸入檔案使用了未經檢查或不安全的操作。注: 有關詳細資料, 請使用 -Xlint:unchecked 重新編譯。Copying: out/target/common/obj/APPS/Mms_intermediates/classes-jarjar.jarCopying: out/target/common/obj/APPS/Mms_intermediates/emma_out/lib/classes-jarjar.jarCopying: out/target/common/obj/APPS/Mms_intermediates/classes.jarProguard: out/target/common/obj/APPS/Mms_intermediates/proguard.classes.jarProGuard, version 4.10Reading program jar [/home/xxx/Data/android/out/target/common/obj/APPS/Mms_intermediates/classes.jar]// ... ...target Dex: MmsCopying: out/target/common/obj/APPS/Mms_intermediates/classes.dextarget Package: Mms (out/target/product/generic/obj/APPS/Mms_intermediates/package.apk)nothing matches overlay file ic_contact_picture.png, for flavor ,,,,,,,,,,,,mdpi,,,,,,,libpng warning: iCCP: known incorrect sRGB profilelibpng warning: iCCP: known incorrect sRGB profilewarning: string 'menu_insert_smiley' has no default translation.warning: string 'menu_insert_smiley' is missing 19 required localizations: az_AZ en_AU en_CA en_GB en_IN en_NZ en_SG en_US eo_EU hy_AM ka_GE km_KH lo_LA mn_MN ne_NP si_LK zh_CN zh_HK zh_TWdex2oatd I 21424 21424 art/dex2oat/dex2oat.cc:1082] dex2oat: out/host/linux-x86/bin/dex2oatd --runtime-arg -Xms64m --runtime-arg -Xmx64m --boot-image=out/target/product/generic/dex_bootjars/system/framework/boot.art --dex-file=out/target/product/generic/obj/APPS/Mms_intermediates/package.apk --dex-location=/system/priv-app/Mms.apk --oat-file=out/target/product/generic/obj/APPS/Mms_intermediates/package.odex --android-root=out/target/product/generic/system --instruction-set=arm --instruction-set-features=defaultdex2oatd I 21424 21424 art/dex2oat/dex2oat.cc:252] dex2oat took 1.189425041s (threads: 8)Notice file: packages/apps/Mms/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/priv-app/Mms.apk.txtInstall: out/target/product/generic/system/priv-app/Mms.apkInstall: out/target/product/generic/system/priv-app/Mms.odex// ... ...Install: out/target/product/generic/data/app/MmsTests.apkInstall: out/target/product/generic/data/app/MmsTests.odexmake:離開目錄“/home/xxx/Data/android”*/

主要是產生了兩個檔案:
out/target/product/generic/system/priv-app/Mms.apk
out/target/product/generic/system/priv-app/Mms.odex

9、安裝到手機
因為是系統應用,為了重啟有效,使用push命令把兩個檔案push到模擬器中對應的位置:

// 注意現在一些核心的應用的位置由以前的system/app調整為了system/priv-app,不要push錯了/*xxx@ubuntu:~/Data/android$ adb push out/target/product/generic/system/priv-app/Mms.odex system/priv-app2893 KB/s (2085348 bytes in 0.703s)xxx@ubuntu:~/Data/android$ adb push out/target/product/generic/system/priv-app/Mms.apk system/priv-app3315 KB/s (1785258 bytes in 0.525s)*/

看下模擬器效果:

標題被替換了。
類似了,你可以修改framework,替換核心,不過有些需要重啟模擬器,有些需要重新編譯相關的所以模組,這裡只是簡單的介紹,以後有機會再細說。

10、小結
有了源碼,可以學習優秀的代碼,可以從曆史提交看看它們是如何改進的,可以定製自己的系統樣式,可以做的事情很多...

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.