編輯:關於Android編程
在macOS 10.12上編譯Android 5.1:官方文檔雖然也有介紹,但是macOS平台上的編譯環境問題還存在很多坑。本文介紹下如何在在macOS 10.12 上編譯 Android 5.1源碼,導入源碼到Android Studio中,把系統燒錄到Nexus6手機中。
AOSP源碼需要一個支持大小寫敏感的文件系統,100G是至少要的。官網有詳細的介紹,這裡簡單列一下。
$ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
然後掛載這個分區:
$ hdiutil attach ~/android.dmg -mountpoint /Volumes/android;
Android的相關編譯只能是使用bash.
$ chsh -s /bin/bash
重啟終端。
1、這裡需要兩個Xcode,可以用命令切換需要使用的Xcode,會有不同的用處。
- 去AppStore下載最新的Xcode
- 到這裡下載5.1.1的Xcode
2、創建一個/Developer/SDK文件夾,從Xcode5.1.1中把MacOSX10.8.sdk從Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/復制到 /Developer/SDK中。
3、從Xcode5.1.1.dmg復制Xcode.app 到 /Developer目錄中。
4、從AppStore下載的最新版Xcode會默認放在/Applications目錄中
5、給兩個版本的Xcode都安裝command line tools
$ sudo xcode-select -switch /Developer/Xcode.app $ xcode-select --install $ sudo xcode-select -switch /Applications/Xcode.app $ xcode-select --install
編譯Android5.1需要jdk1.7,去官網下載.
如果有切換多個版本的jdk需求的話,可以使用jenv這個工具,參考在OS X中使用jEnv管理多個Java版本
1、安裝MacPorts,需要去官網下載對應版本的MacPorts
2、配置port命令環境變量
$ export PATH=/opt/local/bin:$PATH
3、下載依賴包
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
直接去google官方下載會很慢
1、首先下載 repo 工具。
$ mkdir ~/bin $ PATH=~/bin:$PATH $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo ## 如果上述 URL 不可訪問,可以用下面的: ## curl https://storage-googleapis.proxy.ustclug.org/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo
2、在之前創建的大小寫分區上建立一個工作目錄,之後源碼下載和編譯都在這裡進行。
$ mkdir WORKING_DIRECTORY $ cd WORKING_DIRECTORY
3、初始化倉庫
$ repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest ## 如果提示無法連接到 gerrit.googlesource.com,可以編輯 ~/bin/repo,把 REPO_URL 一行替換成下面的: ## REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
4、選擇某個特定的 Android 版本,我選擇的是android-5.1.1_r14,build號是LMY48M,等會用這個build號下載對應的驅動包,燒錄到nexus真機時會用到。
$ repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-5.1.1_r14
5、同步源碼樹
$ repo sync
源碼下載完後,如果沒有同步的需求的話,就可以把.repo目錄刪掉了,防止編譯時磁盤空間不夠用。
燒錄到真機時需要用到,默認只是用模擬器的話,可以跳過這步。
在https://developers.google.com/android/nexus/drivers中找到對應設備與源碼分支的硬件驅動。剛才選擇的源碼分支所對應的build碼是LMY48M,因此,就下載此代號的驅動程序即可。
下載得到的是三個tgz文件,我們只需依次解壓三個文件,得到的是三個shell腳本文件,我們先將其置於源碼根目錄中。
依次執行這3個腳本將在源碼根目錄中生成一個vendor文件夾。
在macOS中,默認限制的同時打開的文件數量很少,不能滿足編譯過程中的高並發需要,因此需要在shell中運行命令:
$ ulimit -S -n 1024
在源碼根目錄下調用下面的命令:
$ source build/envsetup.sh
因為我編譯後需要燒錄到Nexus6上,所以選擇aosp_shamu-userdebug
$ lunch aosp_shamu-userdebug
如果不需要燒錄到真機上的話,用默認的aosp_arm-eng類型就可以了。
因為本機CPU的內核是8核的,所以開16個線程加快編譯。
$ make -j16
編譯成功後,會有類似下面的日志:
#### make completed successfully (30:28:08 (hh:mm:ss)) ####
編譯成功的結果都在out目錄中。
如果lunch的是aosp_arm-eng類型,就可以用$ emulator命令刷到模擬器了。
為了方便查看源碼,可以把代碼導入到AS中。目前看來,只能支持Java的跳轉,對c++的支持不太好。
為了讓AS理解代碼的符號和源碼樹的結構,需要用如下命令生成一個android.ipr工程配置文件。
$ mmm development/tools/idegen/ $ development/tools/idegen/idegen.sh
大約需要十幾秒的時間,就能在源碼根目錄下生成android.ipr和android.iml了。
用AS打開android.ipr就能導入整個源碼了。
如果要支持跳轉的話,還需要做些配置
Nexus6手機在打開USB調試,連接電腦後允許調試這台手機,並且在設置中打開“允許 OEM 解鎖”。然後令手機進入recovery模式,在關機下,輸入如下命令即可:
$ adb reboot bootloader
執行如下命令刷機:
$ fastboot -w flashall
刷機成功後,手機會自動重啟,新鮮出爐的系統終於跑起來了。
刷機過程中也出現過變磚的情況,可以試一下這個教程,親測有效。
1 背景最近因為一些個人私事導致好久沒寫博客了,多事之年總算要過去了,突然沒了動力,所以趕緊先拿個最近項目中重構的一個小知識點充下數,老題重談。在我們App開發中大家可能
我們經常在做項目過程中遇到內存溢出的問題,同時面試中關於OOM的問題也常常出現。這裡,我將前輩們解決Andorid內存溢出的方法重新整理一番,方便自己以後使用。一、And
這篇文章主要介紹發送驗證碼和校驗驗證碼的功能,用到一個第三方平台Bmob,那Bmob是什麼呢?Bmob可以開發一個雲存儲的移動應用軟件,他提供了大量的標准的API接口,根
效果圖效果圖中我們實現了一個簡單的隨手指滑動的二階貝塞爾曲線,還有一個復雜點的,穿越所有已知點的貝塞爾曲線。學會使用貝塞爾曲線後可以實現例如QQ紅點滑動刪除啦,360動態