AOSP編譯/代碼管理

此文章主要記錄git/gerrit配置;MTK2601 AOSP Android5.1的編譯以及應(yīng)用開發(fā)。

1、git/Gerrit:

vim ~/.gitconfig

[User]

email =【你的郵箱,通常是公司企業(yè)郵箱】

name = 【gerrit服務(wù)器賬戶名】

[color]

ui = auto

diff = auto

[core]

editor = vim

# 說明:review的配置和代碼樹的使用有關(guān)聯(lián),所以一定保證正確

[review "Gerrit服務(wù)器地址,例如110.110.110.110:9090"]

username =【Gerrit賬戶名】

#然后ssh-keygen生成的publickey復(fù)制到gerrit服務(wù)器

#next:

vim?? ~/.ssh/config

Host 【gerrit服務(wù)器IP】

KexAlgorithms +diffie-hellman-group1-sha1

Port 29418

User 【Gerrit賬戶名】

2、repo以及代碼樹編譯:

repo文件根據(jù)Google官方提供的大可自己修改。

從頭獲取整個(gè)代碼樹:

repo init -u ssh://IP地址:29418/repo/manifests -b android_watch_master

repo sync

等待代碼下載完畢。

編譯Android源碼:

1)Android5.1需要安裝openjdk7:

sudo add-apt-repositoryppa:openjdk-r/ppa

sudo apt-getupdate

sudo apt-getinstall openjdk-7-jdk

切換Java環(huán)境到j(luò)dk7.

其次,安裝依賴:

---------------------------------------------------------------------------------------------------------------

sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib

sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386

sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev

sudo apt-get install git-core gnupg flex bison gperf build-essential

sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib

sudo apt-get install libc6-dev-i386

sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev

sudo apt-get install lib32z-dev ccache

sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4

---------------------------------------------------------------------------------------------------------------

2)在 .bashrc文件末尾添加:export USE_CCACHE = 1

為了提高編譯效率,設(shè)置編譯器高速緩存:

prebuilts/misc/linux-x86/ccache/ccache-M50G

編譯步驟:

... 自己的配置 ...

source build/envstep.sh

lunch

make -j8

... 編譯成功 ...

3)如果有一下錯(cuò)誤:

/home/elinksoft/code/8163/alps/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/bin/../lib/gcc/x86_64-linux/4.6/../../../../x86_64-linux/bin/ld: error: out/host/linux-x86/obj32/STATIC_LIBRARIES/libcompiler_rt_intermediates/libcompiler_rt.a(eprintf.o): unsupported reloc 43 against global symbol stderr

external/compiler-rt/lib/builtins/eprintf.c:32: error: unsupported reloc 43

collect2: ld returned 1 exit status

build/core/host_shared_library_internal.mk:44: recipe for target 'out/host/linux-x86/obj32/lib/libcompiler_rt.so' failed

make: *** [out/host/linux-x86/obj32/lib/libcompiler_rt.so] Error 1

make: *** Waiting for unfinished jobs....

host C++: libnativehelper_32 <= libnativehelper/JNIHelp.cpp

make: *** wait: No child processes.? Stop.

解決:

in file /art/build/Android.common_build.mk, find out:

# Host.

ART_HOST_CLANG := false

ifneq ($(WITHOUT_HOST_CLANG),true)

# By default, host builds use clang for better warnings.

ART_HOST_CLANG := true

endif

change to :

# Host.

ART_HOST_CLANG := false

ifeq ($(WITHOUT_HOST_CLANG),false)

# By default, host builds use clang for better warnings.

ART_HOST_CLANG := true

endif

If it still not works,try this in your android root path:

cp /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld

4、System App

1)常用命令

croot、jgrep、cgrep、resgrep

mm -B

repo sync . -cj4

repo upload .

repo branch

git reset

repo abandon 0722

repo sync . -c

repo start 0722 --all

2)提交代碼樹review發(fā)現(xiàn)問題或者測(cè)試出現(xiàn)問題:

Cherry Pick到本地,gerrit上有命令可以直接復(fù)制使用;

修改后git commit --amend

repo upload .

3)導(dǎo)入aosp所有代碼到Android Studio:

前提是代碼樹已經(jīng)build成功;在代碼樹根目錄下執(zhí)行:

mmm development/tools/idegen/????? #這行命令的意思是編譯idegen這個(gè)模塊項(xiàng)目,然后生成idegen.jar文件

development/tools/idegen/idegen.sh??? #這行命令的意思是在根目錄生成對(duì)應(yīng)的android.ipr、android.iml IEDA工程配置文件

有了如上的這些操作以后,我們打開Android Studio,然后選擇打開一個(gè)現(xiàn)有的Android Studio項(xiàng)目,然后選擇打開源碼根目錄下的android.ipr文件

4)編寫Android.mk文件

make file比較復(fù)雜無法一一詳細(xì)說明,可以查閱其他資料;Android.mk編寫完成后,在對(duì)應(yīng)目錄下執(zhí)行mm -B即可模塊編譯。

配合第(5)步的說明即可輕松開發(fā)app

5)系統(tǒng)工程無法在AS Build 通過,但是可以鏈接文件到AS:

使用 ln -s 把文件鏈接到Android? Studio工程目錄下(model/src/main/java等目錄)

最后就是adb常用命令,比較多就不寫了。

6)aosp下查找文件內(nèi)容常用命令

mv * .[^.]* repo_root/

grep BOOT_COMPLETED . -rsn|grep -v xml|grep -v txt|grep -v html

find -name? "filename"

find . -name 'gradle-wrapper.properties' -exec grep "bin" {} +;

sed -i s/MySystemService/System/g `grep MySystemService -rl ./`

adb ?shell ?pm list ?packages;adb shell ?pm path+ 包名,例如:adb shell pm path com.cmsz.account;adb pull+安裝包路徑?

備注:博客收藏http://blog.csdn.net/wdaming1986

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容