想春节在家用Nexus 5的手机编译aosp的模块继续测试玩,但是我不想下载和编译整个系统。
准备——操作系统
下载Ubuntu 14.04.5 x86_64的镜像并安装。
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
安装OpenJDK 7(Android 6.0使用)
安装OpenJDK 8(暂时用不到)
没有OpenJDK8可下载,直接使用
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo update-alternatives --config java
sudo update-alternatives --config javac
配置git
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
获取源码
用清华的源下载源码会比较方便。
# ANDROID_SOURCE="https://android.googlesource.com"
export ANDROID_SOURCE="https://aosp.tuna.tsinghua.edu.cn"
# 额,墙
export REPO_URL="https://aosp.tuna.tsinghua.edu.cn/android/git-repo"
repo init -u ${ANDROID_SOURCE}/platform/manifest -b android-6.0.1_r77 --no-clone-bundle
下载源码,比如我想测试bionic。
export REPO_SYNC="repo sync --no-clone-bundle"
# 编译用的命令
${REPO_SYNC} build
# device
${REPO_SYNC} device/lge/hammerhead
${REPO_SYNC} frameworks/native
# 工具链
${REPO_SYNC} prebuilts/sdk # build依赖current
${REPO_SYNC} prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8 #llvm host编译需要
${REPO_SYNC} prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9
${REPO_SYNC} prebuilts/clang/linux-x86/host/3.6 # llvm编译需要
${REPO_SYNC} prebuilts/ndk # ndk源码编译需要
${REPO_SYNC} prebuilts/misc
# bionic依赖(LLVM系列)
${REPO_SYNC} external/llvm
${REPO_SYNC} external/compiler-rt
${REPO_SYNC} external/libcxx
${REPO_SYNC} external/libcxxabi
# 虽然可通过去除bionic-benchmarks避免依赖,但是zipalign还是逃不掉
${REPO_SYNC} frameworks/base
# bionic unit test依赖
${REPO_SYNC} system/core
${REPO_SYNC} system/extras
${REPO_SYNC} external/tinyxml2
${REPO_SYNC} external/gtest
${REPO_SYNC} external/jemalloc
${REPO_SYNC} external/elfutils
${REPO_SYNC} external/icu
${REPO_SYNC} external/safe-iop
${REPO_SYNC} external/zopfli
${REPO_SYNC} external/zlib
${REPO_SYNC} external/junit # frameworks/base依赖
${REPO_SYNC} libcore # system/core依赖
${REPO_SYNC} libnativehelper # system/core依赖
${REPO_SYNC} bionic
. ./build/envsetup.sh
lunch aosp_hammerhead-userdebug
cd bionic
mma
遇到问题1
PRODUCT_COPY_FILES device/generic/goldfish/data/etc/apns-conf.xml:system/etc/apns-conf.xml ignored.
find: `bootable/recovery/res-xhdpi': No such file or directory
No private recovery resources for TARGET_DEVICE hammerhead
make: *** No rule to make target `out/target/common/obj/PACKAGING/public_api.txt', needed by `out/target/common/obj/PACKAGING/checkpublicapi-last-timestamp'. Stop.
进入需要编译的目录,选择mma,可以知道原因。一般是缺少某个依赖导致。
遇到问题2
make: *** No rule to make target `out/host/linux-x86/bin/FileCheck', needed by `out/target/product/hammerhead/obj/STATIC_LIBRARIES/bionic-compile-time-tests-g++_intermediates/fortify_compilation_test.o'. Stop.
解决方法:${REPO_SYNC} external/llvm
遇到问题3
external/libcxx/include/__config:23:10: fatal error: 'unistd.h' file not found
#include
^
解决方法:${REPO_SYNC} prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8
遇到问题4
make: *** No rule to make target `out/target/product/hammerhead/obj/SHARED_LIBRARIES/libpagemap_intermediates/export_includes', needed by `out/target/product/hammerhead/obj/EXECUTABLES/bionic-unit-tests_intermediates/import_includes'. Stop.
解决方法:${REPO_SYNC} system/extras
遇到问题5
make: *** No rule to make target `out/target/product/hammerhead/obj/STATIC_LIBRARIES/libtinyxml2_intermediates/export_includes', needed by `out/target/product/hammerhead/obj/EXECUTABLES/bionic-unit-tests_intermediates/import_includes'. Stop.
解决方法:${REPO_SYNC} external/tinyxml2
遇到问题6
make: *** No rule to make target `out/target/product/hammerhead/obj/STATIC_LIBRARIES/liblog_intermediates/export_includes', needed by `out/target/product/hammerhead/obj/EXECUTABLES/bionic-unit-tests_intermediates/import_includes'. Stop.
解决方法:${REPO_SYNC} system/core
遇到问题7
make: *** No rule to make target `out/target/product/hammerhead/obj/STATIC_LIBRARIES/libgtest_intermediates/export_includes', needed by `out/target/product/hammerhead/obj/EXECUTABLES/bionic-unit-tests_intermediates/import_includes'. Stop.
解决方法:${REPO_SYNC} external/gtest
遇到问题8
/bin/bash: prebuilts/misc/linux-x86/relocation_packer/relocation_packer: No such file or directory
make: *** [out/target/product/hammerhead/obj/SHARED_LIBRARIES/libdl_intermediates/PACKED/libdl.so] Error 127
解决方法:${REPO_SYNC} prebuilts/misc
遇到问题9
make: *** No rule to make target `out/target/product/hammerhead/obj/STATIC_LIBRARIES/libjemalloc_intermediates/export_includes', needed by `out/target/product/hammerhead/obj/SHARED_LIBRARIES/libc_intermediates/import_includes'. Stop.
解决方法:${REPO_SYNC} external/jemalloc
遇到问题10
make: *** No rule to make target `out/host/linux-x86/obj/STATIC_LIBRARIES/libelf_intermediates/export_includes', needed by `out/host/linux-x86/obj/STATIC_LIBRARIES/lib_relocation_packer_intermediates/import_includes'. Stop.
解决方法:${REPO_SYNC} external/elfutils
遇到问题11
make: *** No rule to make target `out/host/linux-x86/obj/STATIC_LIBRARIES/libandroidfw_intermediates/export_includes', needed by `out/host/linux-x86/obj/EXECUTABLES/zipalign_intermediates/import_includes'. Stop.
解决方法:${REPO_SYNC} frameworks/base
遇到问题12
make: *** No rule to make target `external/junit/Common.mk'. Stop.
解决方法:${REPO_SYNC} external/junit
遇到问题13
make: *** No rule to make target `libcore/Docs.mk'. Stop.
解决方法:${REPO_SYNC} libcore
遇到问题14
make: *** No rule to make target `external/icu/icu4j/adjust_icudt_path.mk'. Stop.
解决方法:${REPO_SYNC} external/icu
遇到问题15
host C++: libutils <= system/core/libutils/CallStack.cpp
system/core/libutils/CallStack.cpp:23:10: fatal error: 'UniquePtr.h' file not found
#include
^
解决方法:${REPO_SYNC} libnativehelper
遇到问题16
system/core/libutils/VectorImpl.cpp:24:10: fatal error: 'safe_iop.h' file not found
#include
^
解决方法:${REPO_SYNC} external/safe-iop
遇到问题17
make: *** No rule to make target `out/host/linux-x86/obj/STATIC_LIBRARIES/libzopfli_intermediates/export_includes', needed by `out/host/linux-x86/obj/EXECUTABLES/zipalign_intermediates/import_includes'. Stop.
解决方法: ${REPO_SYNC} external/zopfli
遇到问题18
make: *** No rule to make target `out/target/product/hammerhead/obj/STATIC_LIBRARIES/libz_intermediates/export_includes', needed by `out/target/product/hammerhead/obj/EXECUTABLES/linker_intermediates/import_includes'. Stop.
解决方法: ${REPO_SYNC} external/zlib
OK~
Nexus 5
TWRP
SuperSU
root方法:su
remount方法:
mount -o remount,rw /system