自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Framework學習之下載AOSP源碼編譯詳解

移動開發(fā) Android
Android 官方聲明 AOSP 歷來是在 Ubuntu LTS 版本中進行開發(fā)和測試。所以為了避免任何其他不必要的麻煩,請使用 Ubuntu 及其他基于 Ubuntu 的發(fā)行版

一.準備工作

Android 官方聲明 AOSP 歷來是在 Ubuntu LTS 版本中進行開發(fā)和測試。所以為了避免任何其他不必要的麻煩,請使用 Ubuntu 及其他基于 Ubuntu 的發(fā)行版

最低環(huán)境要求:

  • Ubuntu 14.04+
  • JDK1.8+
  • python3
  • GNU make
  • git

二.下載Aosp源碼

1.安裝GIT

首先需要安裝Git,因為源碼是用Git管理的。

sudo apt-get install git

接下來創(chuàng)建一個bin文件夾,并加入到PATH中,有點像Windows的環(huán)境變量。

mkdir ~/bin
PATH=~/bin:$PATH
然后初始化Git,郵箱和姓名。
git config --global user.email "xxx@gmail.com"
git config --global user.name "xxx"

2.安裝Python環(huán)境

sudo apt-get install python

3.安裝repo及配置

repo 是一個python 腳本(所以我們上面要配置Python環(huán)境),因為Android源碼包含數(shù)百個git庫,簡化幫助管理git Android版本庫的工具。

(1)安裝curl下載的庫:

sudo apt-get install curl

(2)下載repo并設置可以運行權限。

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo

(3)添加下載源

google 的AOSP 的話,因為FQ和數(shù)據(jù)量太大,且需要需要翻墻影響速度,因此優(yōu)先考慮國內的鏡像(本文使用的是清華的源)。

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

4.初始化及同步源碼

(1)創(chuàng)建文件夾

創(chuàng)建一個AOSP文件夾,cdd到文件夾里面去待會兒需要把源碼下載到這里:

mkdir aosp
cd aosp

(2)初始化Aosp倉庫

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

(3)初始化并指定版本

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.0.0_r36

AOSP對應關系查看地址: 對應關系

(4)開始同步源碼

repo sync -j4
-j表示并發(fā)數(shù).

因為Android的源碼越來越大,repo sync失敗的概率也越來越高。所以我們可以避開使用repo sync的方式,而采用下載預下載包的方式來實現(xiàn)下載源碼

5.預下載包的方式

1. 下載預下載包

在windows或者Linux上面通過迅雷下載https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar #下載初始化包

2. 解壓預下載包

tar xf aosp-latest.tar
cd AOSP->解壓得到的 AOSP 工程目錄,這時 ls 的話什么也看不到,因為只有一個隱藏的 .repo 目錄

3. 查看分支

cd .repo/manifests 
git branch -a

4. 在aosp目錄選擇需要同步的版本

repo init -b android-9.0.0_r55
repo sync # 正常同步一遍即可得到完整目錄
或者直接在aosp目錄設置好你要同步的分支:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.0.0_r36
repo sync # 正常同步一遍即可得到完整目錄
如果僅加載具體模塊:
repo sync platform/prebuilts/clang/host/darwin-x86

5.防止下載源碼執(zhí)行腳本卡死

通過自定義Shell腳本啟動源碼下載可以有效防止,同步源碼時腳本被卡死的問題。

(1)在AOSP文件夾中新建down.sh文件

#!/bin/bash
echo “======= start repo sync =======
cd ~/Desktop/AOSP
repo sync -j4
while [ $? == 1 ]; do
echo “====== sync failed! re-sync again =====
sleep 3
repo sync -j4

(2)執(zhí)行down.sh文件

sh down.sh

三.AOSP源碼目錄結構

  • abi Application Binary Interface 應用程序二進制接口,abi相信同學們在SO庫調用上遇到過,如果不支持該平臺的話就說不ABI不支持
  • art Android Runtime 安卓運行時。這個會提前把字節(jié)碼編譯成二進制機器碼保存起來,執(zhí)行的時候加載速度比較快。Dalvik虛擬機則是在加載以后再去編譯的,所以速度上ART會比Dalvik快一點。犧牲空間來贏取時間
  • bionic 基礎庫,Android系統(tǒng)與Linux內核的橋梁。Bionic 音標為 bī??nik,翻譯為"仿生"
  • bootable 系統(tǒng)啟動引導相關程序
  • build 用于構建Android系統(tǒng)的工具,也就是用于編譯Android系統(tǒng)的
  • cts Compatibility Test Suite 兼容性測試
  • dalvik dalvik虛擬機,用于解析執(zhí)行dex文件的虛擬機
  • developers 開發(fā)者目錄
  • developerment 開發(fā)目錄,比如說應用,application就在里面了,apps
  • devices 設備相關的配置信息,什么索尼、HTC、自己的產品,就可以定義在這個目錄下了
  • docs 文檔
  • external 開源模組相關文件
  • frameworks 系統(tǒng)架構,Android的核心了
  • hardware hal層代碼,硬件抽象層
  • libcore 核心庫
  • libnativehelper native幫助庫,實現(xiàn)JNI的相關文件
  • ndk native development kit
  • out 輸出目錄,編譯以后生成的目錄,相關的產出就在這里了
  • packages 應用程序包。一些系統(tǒng)的應用就在這里了,比如說藍牙,Launcher,相機,撥號之類的。
  • pdk Plug-in Development Kit (PDK) is designed to help you build your own pattern projects
  • platform_testing 平臺測試
  • prebuilts x86/arm架構下預編譯的文件
  • sdk software development kit
  • system 底層系統(tǒng)文件
  • toolchain 工具鏈
  • tools 工具文件
  • Makefile mk文件,用于控制編譯

四.AOSP源碼整編

編譯AOSP源碼需要配置好JAVA環(huán)境.

1.安裝Java編譯環(huán)境

sudo apt-get update
sudo apt-get install openjdk-8-jdk

2.進入AOSP文件夾,進行編譯

(1)初始化編譯環(huán)境

source build/envsetup.sh

(2)刪除上一次編譯的結果,初次編譯可以不需要這一步

make clobber

(3)選擇與設備對應的編譯版本

lunch XX

選擇與設備對應的編譯版本.如:編譯開發(fā)工程師的版本lunch aosp_x86-eng,可以方便debug

編譯版本選擇

如果lunch命令沒有加對應的編譯版本則會有以下信息輸出:

You're building on Linux
Lunch 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. full_fugu-userdebug
8. aosp_fugu-userdebug
9. mini_emulator_arm64-userdebug
10. m_e_arm-userdebug
11. m_e_mips64-eng
12. m_e_mips-userdebug
13. mini_emulator_x86_64-userdebug
14. mini_emulator_x86-userdebug
15. aosp_dragon-userdebug
16. aosp_dragon-eng
17. aosp_marlin-userdebug
18. aosp_sailfish-userdebug
19. aosp_flounder-userdebug
20. aosp_angler-userdebug
21. aosp_bullhead-userdebug
22. hikey-userdebug
23. aosp_shamu-userdebug
Which would you like? [aosp_arm-eng]

這里需要選擇編譯目標的格式(選擇前面的序號,按回車即可),編譯目標的格式組成為BUILD-BUILDTYPE,比如aosp_arm-eng的BUILD為aosp_arm,BUILDTYPE為eng。 其中BUILD表示編譯出的鏡像可以運行在什么環(huán)境,aosp代表Android開源項目,arm表示系統(tǒng)是運行在arm架構的處理器上;

BUILDTYPE 指的是編譯類型,有以下三種:

  • user:用來正式發(fā)布到市場的版本,權限受限,如沒有 root 權限,不能 dedug,adb默認處于停用狀態(tài)。
  • userdebug:在user版本的基礎上開放了 root 權限和 debug 權限,adb默認處于啟用狀態(tài)。一般用于調試真機。
  • eng:開發(fā)工程師的版本,擁有最大的權限(root等),具有額外調試工具的開發(fā)配置。一般用于模擬器。
  • 如果你沒有Nexus設備,只想編譯完后運行在模擬器查看,那么BUILD可以選擇aosp_x86,BUILDTYPE選擇eng。

(4)開始編譯

make -j8

j后面數(shù)字幾就是多少線程,最多不超過你的cpu總線程,

編譯成功會顯示如下:

Creating filesystem with parameters:
Size: 2147483648
Block size: 4096
Blocks per group: 32768
Inodes per group: 8192
Inode size: 256
Journal blocks: 8192
Label: system
Blocks: 524288
Block groups: 16
Reserved block group size: 127
Created filesystem with 2216/131072 inodes and 199826/524288 blocks
[100% 7669/7669] Install system fs ima.../target/product/generic_x86/system.img
out/target/product/generic_x86/system.img+ maxsize=2192446080 blocksize=2112 total=2147483648 reserve=22146432
#### make completed successfully (01:24:41 (hh:mm:ss)) ####

會在源碼跟目錄out/target/product/angler目錄下生成鏡像文件:

  • system.img:系統(tǒng)鏡像
  • ramdisk.img:根文件系統(tǒng)鏡像
  • userdata.img:用戶數(shù)據(jù)鏡像
  • recovery.img:recovery鏡像
  • boot.img:啟動鏡像
  • vendor.img:驅動鏡像

最終會在 out/target/product/generic_x86/目錄生成了三個重要的鏡像文件: system.img、userdata.img、ramdisk.img。大概介紹著三個鏡像文件:

  • system.img:系統(tǒng)鏡像,里面包含了Android系統(tǒng)主要的目錄和文件,通過init.c進行解析并mount掛載到/system目錄下。
  • userdata.img:用戶鏡像,是Android系統(tǒng)中存放用戶數(shù)據(jù)的,通過init.c進行解析并mount掛載到/data目錄下。
  • ramdisk.img:根文件系統(tǒng)鏡像,包含一些啟動Android系統(tǒng)的重要文件,比如init.rc。

3.編譯錯誤解決

(1)缺少libncurses.so.5

報錯信息:

error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

解決方式:

sudo apt-get update
for 32-bit binaries :
sudo apt-get install libncurses5:i386
for 64-bit binaries :
sudo apt-get install libncurses5

(2)缺少M4

報錯信息:

/bin/bash: m4: command not found

解決方式:

sudo apt-get install m4

(3)去除所有本地化設置

報錯信息:

FAILED: out/host/linux-x86/obj/EXECUTABLES/checkpolicy_intermediates/policy_scan.c

解決方法:

export LC_ALL=C
LC_ALL=C 是為了去除所有本地化的設置,讓命令能正確執(zhí)行, 但是不可以修改~/.bashrc,會導致終端內中文顯示為數(shù)字(應該是對應的編碼)

(4)xmllint的問題

報錯信息:

/bin/bash: xmllint: command not found

解決方案:

sudo apt-get  install libxml2-utils

(5)編譯內存不足

報錯信息

Try increasing heap size with java option '-Xmx<size>'錯誤

解決方案:

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
jack-admin kill-server
jack-admin start-server

五.運行模擬器

啟動模擬器

在編譯完成之后,就可以通過以下命令運行Android虛擬機了,由于之前已經(jīng)執(zhí)行過source和lunch命令了,可以直接運行:

source build/envsetup.sh
lunch aosp_x86-eng
emulator

就會啟動模擬器

六.AOSP源碼編譯某個單獨的模塊

上面的編譯我們都是對整個Android系統(tǒng)進行編譯的.如果我們要編譯系統(tǒng)的Settings應用模塊,這就屬于源碼單編某一個模塊.

在AOSP根目錄執(zhí)行:

source build/envsetup.sh
lunch aosp_x86-eng

進入Settings的目錄:

cd packages/apps/Settings

通過mm編譯當前目錄下的模塊,不編譯依賴模塊。

mm

編譯成功后會有提示生成文件的存放路徑。除了Settings.odex文件,還會在out/target/product/generic_x86/system/priv-app/Settings目錄下生成Settings.apk。

此外還有以下命令可以進行單編:

  • mmm:編譯指定目錄下的模塊,不編譯它所依賴的其它模塊。
  • mma:編譯當前目錄下的模塊及其依賴項。
  • mmma:編譯指定路徑下所有模塊,并且包含依賴。

如果對系統(tǒng)模塊的源碼進行修改,查看生成的APK文件,有兩種方式:

  • 通過adb push或者adb install 來安裝APK。
  • 使用make snod命令,重新生成 system.img,運行模擬器查看

圖片


責任編輯:武曉燕 來源: Android開發(fā)編程
相關推薦

2009-07-17 17:57:20

NPetShop iBATIS.Net

2009-11-30 16:38:30

Android

2012-02-23 11:06:18

JavaPlay FramewPlay!

2009-12-30 09:22:01

Ubuntu編譯

2023-03-09 11:02:40

linux編譯源碼

2023-07-05 15:31:43

燒錄工具鴻蒙

2011-06-20 17:33:58

Qt MeegoTouch Maemo

2011-08-23 13:56:12

MySQLConnection

2011-08-25 15:41:42

Lua源碼

2010-01-06 18:27:06

.Net Framew

2012-02-23 12:53:40

JavaPlay Framew

2011-06-13 14:15:02

2009-08-26 14:52:19

.NET Framew

2009-07-09 09:28:19

.Net Micro

2012-01-09 16:00:56

2010-01-05 16:20:46

.NET Framew

2010-01-05 09:35:07

.Net Framew

2010-01-05 18:09:07

.NET Framew

2021-09-02 15:23:33

鴻蒙HarmonyOS應用

2010-01-05 16:15:05

.NET Framew
點贊
收藏

51CTO技術棧公眾號