Ubuntu18.04編譯android9.0實踐

背景

編譯android的源碼有很多的價值。
1 自己手頭有最全的代碼,不用去網站上做源碼搜索工作。
2 學習源碼。
3 代碼設計實現適配源碼框架結構。

環境

使用的Ubuntu18.04,編譯Android P(Android9.0)源碼。goog渠道下載源碼太慢,使用了清華的鏡像,P源碼的size達到了120G,包括編譯生成的size預測接近100G,因此一共給P源碼文件預留了250G的size。

依賴安裝

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
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 libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache

安裝過程中libesd0-dev安裝失敗,修改安裝源文件

vim /etc/apt/sources.list
#for install libesd0-dev in aosp build
deb http://us.archive.ubuntu.com/ubuntu/ xenial main universe
deb-src http://us.archive.ubuntu.com/ubuntu/ xenial main universe

# 保存後執行下面幾行
sudo apt-get update
sudo apt-get install libesd0-dev

JDK

可配置的Android Studio安裝目錄下的路徑:xxx/androidstudio/jre/

開始編譯

直接make
出於學習目的,沒有配置直接編譯的,輸出默認的genric。
漫長等待…

問題

[run_soong_ui] Error 1

這個錯誤會有很多的原因,列出其中一個具體問題和解決方法。
錯誤:

[  0% 1/56523] //external/libpng:libpng link libpng.so [linux_glibc]
FAILED: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_shared/libpng.so 
prebuilts/clang/host/linux-x86/clang-4691093/bin/clang++  @out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_shared/libpng.so.rsp out/soong/.intermediates/external/compiler-rt/libcompiler_rt-extras/linux_glibc_x86_64_static/libcompiler_rt-extras.a out/soong/.intermediates/external/zlib/libz/linux_glibc_x86_64_shared/libz-host.so out/soong/.intermediates/external/libcxx/libc++/linux_glibc_x86_64_shared/libc++.so  -o out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_shared/libpng.so -shared -Wl,-soname,libpng.so -target x86_64-linux-gnu -Bprebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin  -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--no-undefined-version --gcc-toolchain=prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8 --sysroot prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot -m64 -Bprebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/lib/gcc/x86_64-linux/4.8 -Lprebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/lib/gcc/x86_64-linux/4.8 -Lprebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/lib64 -ldl -lpthread -lm -lrt -Wl,-rpath,\$ORIGIN/../lib64 -Wl,-rpath,\$ORIGIN/lib64  -nodefaultlibs -lgcc_s -lgcc -lc -lgcc_s -lgcc
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/png.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/pngerror.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/pngget.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/pngmem.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/pngpread.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/pngread.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/pngrio.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/pngrtran.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/pngrutil.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/pngset.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/pngtrans.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/pngwio.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/pngwrite.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/pngwtran.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/pngwutil.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/intel/intel_init.o: file is empty
prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld: error: out/soong/.intermediates/external/libpng/libpng/linux_glibc_x86_64_static/obj/external/libpng/intel/filter_sse2_intrinsics.o: file is empty
clang-6.0: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
10:50:07 ninja failed with: exit status 1
build/make/core/main.mk:21: recipe for target 'run_soong_ui' failed
make: *** [run_soong_ui] Error 1

解決:
添加環境變量

vim .bashrc

# 在文件中添加
#aosp setup
export PATH=~/bin:$PATH
export USE_CCACHE=1
export LC_ALL=C

#保存文件後,執行下面一行
source .bashrc

error:VNDK library: libpower’s ABI has EXTENDING CHANGES

解決

vim build/make/target/board/genric/BoardConfig.mk

# 找到下面一行
BOARD_VNDK_VERSION := current
# 去掉current,變爲
BOARD_VNDK_VERSION :=
# 接着在這行後面添加下面一行
BOARD_VNDK_RUNTIME_DISABLE := true

結束

解決問題後輸入make編譯從頭開始編譯,但編譯器會計算略過已經編譯好的文件。
遇到問題google。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章