1. 程式人生 > >Android實戰技巧之四十 Android5 1 1原始碼編譯與燒寫

Android實戰技巧之四十 Android5 1 1原始碼編譯與燒寫

                     

購買Nexus手機的朋友大多是為了自己修改系統玩,再加上其較高的價效比,在開發者中還是廣受歡迎的。我的5太子被我升級到了6.0預覽版,玩的正嗨,捨不得換回到5.1時代了。不過鑑於距6.0原始碼釋出還有段日子,5.1的原始碼編譯與燒寫仍是主流,下面就記錄了整個過程(持續了很長時間,我們要有耐心)。

搭建開發環境

系統推薦Ubuntu 14.04
1.openjdk is needed

$ sudo apt-get update$ sudo apt-get install openjdk-7-jdk
  • 1
  • 2

set it the default java version

$ sudo update-alternatives --config java$ sudo
update-alternatives --config javac
  • 1
  • 2

2.required package

sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zlib1g-dev:i386 zip
  • 1

遇到問題:

$ sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zlib1g-dev:i386 zip[sudo] password for linc: Reading package lists... DoneBuilding dependency tree       Reading state information... Donemake is
already the newest version.zip is already the newest version.git is already the newest version.git set to manually installed.libxml2-utils is already the newest version.libxml2-utils set to manually installed.Some packages could not be installed. This may mean that you haverequested an impossible situation or
if you are using the unstabledistribution that some required packages have not yet been createdor been moved out of Incoming.The following information may help to resolve the situation:The following packages have unmet dependencies: g++-multilib : Depends: gcc-multilib (>= 4:4.8.2-1ubuntu6) but it is not going to be installedE: Unable to correct problems, you have held broken packages
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

按照如下步驟即可:

$ sudo apt-get install g++-multilib$ sudo apt-get install  bison git gperf libxml2-utils make python-networkx zlib1g-dev:i386 zip
  • 1
  • 2

gcc為必須

$ sudo apt-get install gcc$ gcc -vThread model: posixgcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

repo

$ mkdir ~/bin$ PATH=~/bin:$PATH$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo$ chmod a+x ~/bin/repo
  • 1
  • 2
  • 3
  • 4
  • 5

check sh1 sum:

$ sha1sum repo b8bd1804f432ecf1bab730949c82b93b0fc5fede  repo
  • 1
  • 2
  • 3

For version 1.21, the SHA-1 checksum for repo is b8bd1804f432ecf1bab730949c82b93b0fc5fede

repo init

針對Nexus5的5.1.1的初始化如下:

LMY48I  android-5.1.1_r9    Lollipop    Nexus 4, Nexus 5, Nexus 6, Nexus 7 (flo), Nexus 9 (volantis/volantisg), Nexus 10
  • 1
$ repo init -u https://android.googlesource.com/platform/manifest -b android-5.1.1_r9Your identity is: linc <[email protected].com>If you want to change this, please re-run 'repo init' with --config-nameTesting colorized output (for 'repo diff', 'repo status'):  black    red      green    yellow   blue     magenta   cyan     white   bold     dim      ul       reverse repo has been initialized in /home/linc/source-android/android-source
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

repo sync

$ repo sync
  • 1

一個晚上兩個白天,終於下載完成,程式碼達34G.

Setting up ccache

Put the following in your .bashrc (or equivalent):

export USE_CCACHE=1
  • 1

run the command:

prebuilts/misc/linux-x86/ccache/ccache -M 50G
  • 1

Building the System

1.Set up environment

$ source build/envsetup.sh
  • 1

or

$ . build/envsetup.sh
  • 1

2.Choose a Target

$ 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. aosp_manta-userdebug     8. aosp_flo-userdebug     9. aosp_deb-userdebug     10. full_fugu-userdebug     11. aosp_fugu-userdebug     12. aosp_tilapia-userdebug     13. aosp_grouper-userdebug     14. aosp_mako-userdebug     15. aosp_hammerhead-userdebug     16. aosp_flounder-userdebug     17. aosp_shamu-userdebug     18. mini_emulator_x86-userdebug     19. mini_emulator_arm64-userdebug     20. mini_emulator_x86_64-userdebug     21. mini_emulator_mips-userdebug     22. m_e_arm-userdebugWhich would you like? [aosp_arm-eng] 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

Nexus5就選擇了15,如果只是用於模擬器就選擇1好了。
3.build

make -j4
  • 1

如果遇到等待其他任務完成的錯誤,是多執行緒衝突,就直接make好了。
4.error
1)

No private recovery resources for TARGET_DEVICE hammerheadhost C++: bcc <= frameworks/compile/libbcc/tools/bcc/Main.cppclang++: error: unable to execute command: Executable "as" doesn't exist!clang++: error: assembler command failed with exit code 1 (use -v to see invocation)make: *** [out/host/linux-x86/obj32/EXECUTABLES/bcc_intermediates/Main.o] Error 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

try make clean.這是沒有安裝gcc的後果。

build successfully

#### make completed successfully (05:53:54 (hh:mm:ss)) ####
  • 1

目錄結構如下:

out/target/product/hammerhead$ du -sh *4.0K    android-info.txt8.8M    boot.img4.0K    cache14M cache.img64K clean_steps.mk172K    data4.0K    fake_packages81M gen64K installed-files.txt8.1M    kernel16G obj4.0K    previous_build_config.mk700K    ramdisk.img1.4M    ramdisk-recovery.img2.2M    recovery9.5M    recovery.img1.3M    root2.9G    symbols288M    system307M    system.img135M    userdata.img
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

Flash device

To flash a device, you will need to use fastboot, which should be included in your path after a successful build. Place the device in fastboot mode either manually by holding the appropriate key combination at boot, or from the shell with

$ adb reboot bootloader
  • 1

Once the device is in fastboot mode, run

$ fastboot flashall -w
  • 1

The -w option wipes the /data partition on the device; this is useful for your first time flashing a particular device but is otherwise unnecessary.

For more information about building for and running on actual hardware, see Running Builds.

Flash emulator

1.build generic img
lunch 1即可,然後正常make。

make completed successfully (05:02:47 (hh:mm:ss))

2.啟動模擬器

~/source-android/android-source/out/target/product/generic$ emulator -sysdir ~/source-android/android-source/out/target/product/generic -system system.img emulator: WARNING: system partition size adjusted to match image file (550 MB > 200 MB)emulator: WARNING: data partition size adjusted to match image file (550 MB > 200 MB)Creating filesystem with parameters:    Size: 69206016    Block size: 4096    Blocks per group: 32768    Inodes per group: 4224    Inode size: 256    Journal blocks: 1024    Label:     Blocks: 16896    Block groups: 1    Reserved block group size: 7Created filesystem with 11/4224 inodes and 1302/16896 blocks
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

模擬器順利啟動,與真機的區別有很多,比如開機畫面不同,Home的UI和操控都有所不同。具體原因敬請期待。

           

相關推薦

Android實戰技巧 Android5 1 1原始碼編譯

                     購買Nexus手機的朋友大多是為了自己修改系統玩,再加上其較高的價效比,在開發者中還是廣受歡迎的。我的5太子被我升級到了6.0預覽版,玩的正嗨,捨不得換回到5.1時代了。不過鑑於距6.0原始碼釋出還有段日子,5.1的原始碼編譯與燒寫仍是主流,下面就記錄了整個過程(持續

Android實戰技巧Android5.1.1原始碼編譯

購買Nexus手機的朋友大多是為了自己修改系統玩,再加上其較高的價效比,在開發者中還是廣受歡迎的。我的5太子被我升級到了6.0預覽版,玩的正嗨,捨不得換回到5.1時代了。不過鑑於距6.0原始碼釋出還有段日子,5.1的原始碼編譯與燒寫仍是主流,下面就記錄了整個過程

Android實戰技巧九:Usb通訊USB Host

零 USB背景知識 USB是一種資料通訊方式,也是一種資料匯流排,而且是最複雜的匯流排之一。 硬體上,它是用插頭連線。一邊是公頭(plug),一邊是母頭(receptacle)。例如,PC上的插座就是母頭,USB裝置使用公頭與PC連線。 目前USB硬體介面

Android實戰技巧:橫豎屏切換

這幾年一直在做手機上和電視盒的App,幾乎沒有考慮過橫豎屏切換的問題。電視盒好說,橫屏不變,你要是給它設計個豎屏人家也沒機會使;而手機上的應用就不好說了,有些介面你設計了橫豎屏相容可能是為了表示你的功能強大。但是按照慣例,或許也是設計師圖省事,我們只是做一個方案

Android實戰技巧八:Handler使用中可能引發的內存泄漏

sha 指向 ons har 引用 destroy 對象 from weak 問題描寫敘述 曾幾何時,我們用原來的辦法使用Handler時會有以下一段溫馨的提示: This Handler class should be static or le

Android實戰技巧五 瞭解native activity

                     1.native activity的意義很多人覺得Android的Fwk提供的支援足夠好了,既然Google不推薦用Ndk開發為什麼又放寬Ndk的限制而推出可以無Java開發Android App呢?我的理解是不同的技術實現會有其適合的場景。 Ndk的適用場景官方給出

Android實戰技巧五:瞭解native activity

1.native activity的意義 很多人覺得Android的Fwk提供的支援足夠好了,既然Google不推薦用Ndk開發為什麼又放寬Ndk的限制而推出可以無Java開發Android App呢?我的理解是不同的技術實現會有其適合的場景。 Ndk的適用

Android實戰技巧一:Android原型設計工具探索

移動開發者、移動產品經理和互動設計師在有了產品的想法後會做出一系列的草圖,然後反覆推敲改進,直到自己滿意。這個草圖就是原型設計,是產品設計初期很重要的工作,它是產品的雛形,之後會以此為原型進行開發。 當移動網際網路熱度增加後,一些主打移動原型設計的工具如雨後春

Android實戰技巧七:圖片的Base64編解碼

通常用Base64這種編解碼方式將二進位制資料轉換成可見的字串格式,就是我們常說的大串,10塊錢一串的那種,^_^。 Android的android.util包下直接提供了一個功能十分完備的Base64類供我們使用,下面就演示一下如何將一張圖片進行Base64

Android實戰技巧八:啟動另一個App/apk中的Activity

Android提供了在一個App中啟動另一個App中的Activity的能力,這使我們的程式很容易就可以呼叫其他程式的功能,從而就豐富了我們App的功能。比如在微信中傳送一個位置資訊,對方可以點選這個位置資訊啟動騰訊地圖並導航。這個場景在現實中作用很大,尤其是朋

Android實戰技巧七 Linux下的模擬器硬體加速

                     Intel提供了一個叫HAXM的虛擬硬體加速技術,全稱為:Intel Hardware Accelerated Execution Manager. 只要你的CPU是intel的產品並且支援VT(virtualization Technology)就可以使用HAXM技

Android實戰技巧六 PreferenceActivity使用詳解

                一、寫作前面當我們做應用的時候,需要使用者配置一些資訊,而這就是通常所說的應用設定。對於Android系統來說,系統本身的設定帶來的使用者體驗和習慣已經深入人心,在我們的應用中同樣用到類似的設定頁,那麼使用者使用起來就會更加親切和方便。是嗎?那我們應該怎麼做到呢?這就要靠本文的

Android實戰技巧九:最新Android開發環境(Eclipse+ADT+Android 5.0)

一、一切由執行時錯誤引起dalvikvm Could not find class '引用包.類', referenced from method... 其實在編譯時也會見到如下錯誤:       [dx]        [dx] trouble processing:   

Android問題集錦一:getActionBar為null的解決以及ActionBar的Back鍵

我們用getActionBar獲得ActionBar例項,將其隱藏或做其他操作。 ActionBar actionBar = getActionBar(); 不過我這樣做了,但是actionBar是null。 問題是由Activity基類引起的,當使用Ap

Android實戰簡易教程-第二六槍(基於ViewPager實現微信頁面切換效果)

stat addview data android tid des viewpage 聊天 == 1.頭部布局文件top.xml:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and

Java經典編程題50道

println static 英文字母 mat () else for ole math 將幾個字符串排序(按英文字母的順序)。 public class Example40 { public static void main(String[] args) {

Java經典編程題50道

str 都是 for ++ class 一份 number print else 海灘上有若幹個一堆桃子,五只猴子來分。第一只猴子把這堆桃子平均分為五份,多了一個,這只猴子把多的一個扔入海中,拿走了一份。 第二只猴子把剩下的桃子又平均分成五份,又多了一個,它同樣把多的一個扔

Java經典編程題50道

pri [] nbsp 以及 四十二 stat print pub string 809*??=800*??+9*??+1,其中??代表的兩位數,8*??的結果為兩位數,9*??的結果為3位數。求??代表的兩位數,以及809*??後的結果。 public class Ex

Java經典編程題50道

int 實現 println ati 四十六 兩個 java str amp 編程實現兩個字符串的連接。 public class Example46 { public static void main(String[] args) { addStri

易寶典——玩轉O365中的EXO服務 創建就地電子數據展示搜索

雲計算 Office 365 微軟 郵件 就地電子數據展示 就地電子數據展示是靠就地電子數據展示搜索,將符合條件(例如關鍵字、開始日期和結束日期、發件人地址和收件人地址以及郵件類型等。)的郵件搜索出來用於展示。因此,在使用就地電子數據展示之前,必須為其創建就地電子數據展示搜索。一、怎樣創