接上期文章安装完Manjaro操作系统后,我们的主要目的还是编译Android源代码,现在就进行在Manjaro操作系统上进行Android6.0源码编译,好吧,声明目前这是地球上,第3篇关于在Arch系列操作系统的中文介绍。
内容分为1)安装编译库 2)配置编译环境 3)编译
开始前,由于Manjaro最新版本已经切换成了zsh,但Android只认Bash,所以我们首先把开发环境切到Bash
1 |
$bash |
1 下载相关软件
1.1 安装各种编译依赖库
1 2 3 4 5 6 7 8 9 |
$sudo pacman -S base-devel bc curl git gnupg gperf jdk7-openjdk lib32-expat lib32-gcc-libs lib32-glib2 lib32-glibc lib32-glibc lib32-libdbus lib32-libffi lib32-libpng lib32-ncurses lib32-pcre lib32-readline lib32-zlib libpng libxml2 libxslt ncurses perl-switch readline schedtool sdl squashfs-tools unzip wxgtk zip zlib gcc-multilib flex bison python2-virtualenv rsync ncurses5-compat-libsAUR lib32-ncurses5-compat-libsAUR xml2 lzop pngcrush imagemagick $git clone https://aur.archlinux.org/ncurses5-compat-libs.git $cd ncurses5-compat-libs $gpg --recv-keys 702353E0F7E48EDB $makepkg -s -i $cd .. $git clone https://aur.archlinux.org/lib32-ncurses5-compat-libs.git $cd lib32-ncurses5-compat-libs $makepkg -s -i |
1.2 配置jdk
.bashrc里边配置加上
1 2 3 4 |
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk/ export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH |
1.3 配置Python
改python环境
方法1:改全局
1 2 |
ln -sf python -> python2.7* ln -sf python-config -> python2.7-config* |
方法2:只改项目局面,使用python3模拟出python2环境,这个方式非常特别。
在.bashrc里边加上
1 2 |
export WORKON_HOME=~/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=$(which python3) |
然后使用的时候
1 2 3 |
$source /usr/bin/virtualenvwrapper.sh----第一次使用 $mkvirtualenv -p $(which python2) python2----每一次在项目目录前使用 $workon python2----每一次在项目目录前使用 |
如果是用repo下载的代码,要接方法2如下设置
新建目录${项目路径}/venv/lib/python2.7/
使用在项目根目录下执行
1 |
$ln -s /usr/lib/python2.7/* ${项目路径}venv/lib/python2.7/ |
在.bashrc 中加export LC_ALL=”
然后用repo下载代码–这个是默认google的方法,网上有清华的镜像方法
1 2 |
$ repo init -u https://android.googlesource.com/platform/manifest -b master $ repo sync -j4 |
如果repo崩溃,删除文件rm ~/.repopickle_.gitconfig
1.4 .bash环境配置文件添加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS="@im=fcitx" export WORKON_HOME=~/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=$(which python3) #此项目如果使用repo下载,下载前要设置LC_ALL='',然后编译前再设置回LC_ALL=C export LC_ALL=C export USE_CCACHE=1 export JAVA_HOME=/usr/lib/jvm/java-7-openjdk/ export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH export LANG='en_US.UTF-8' unset PERL_MM_OPT |
2 配置编译环境
在高Linux版本上,要修改源码的三个地方,
2.1 修改 build/core/clang/HOST_x86_common.mk
加上 -B$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG)/x86_64-linux/bin \
-no-integrated-as //此句7.0以下要加
1 2 3 4 5 6 7 8 9 10 11 12 |
diff --git a/core/clang/HOST_x86_common.mk b/core/clang/HOST_x86_common.mk index 0241cb6..77547b7 100644 --- a/core/clang/HOST_x86_common.mk +++ b/core/clang/HOST_x86_common.mk @@ -8,6 +8,7 @@ ifeq ($(HOST_OS),linux) CLANG_CONFIG_x86_LINUX_HOST_EXTRA_ASFLAGS := \ --gcc-toolchain=$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG) \ --sysroot=$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG)/sysroot \ + -B$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG)/x86_64-linux/bin \ + -no-integrated-as CLANG_CONFIG_x86_LINUX_HOST_EXTRA_CFLAGS := \ |
2.2 修改 art/build/Android.common_build.mk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#关闭高版本的clang编译器,会把项目编译错误 # Host. ART_HOST_CLANG := false ifneq ($(WITHOUT_HOST_CLANG),true) # By default, host builds use clang for better warnings. ART_HOST_CLANG := true endif 改为 # Host. ART_HOST_CLANG := false ifeq ($(WITHOUT_HOST_CLANG),false) # By default, host builds use clang for better warnings. ART_HOST_CLANG := true endif |
2.3 使用系统的运行库替换android的运行库
1 |
$ cp /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/x86_64-linux/bin/ld |
3 编译
1 2 3 4 5 6 7 8 |
$bash //一定要在bash下进行 $prebuilts/misc/linux-x86/ccache/ccache -M 50G $mkvirtualenv -p $(which python2) python2 $workon python2 //开始前要进入pyhon2的虚拟空间 $source build/envsetup.sh $lunch aosp_arm-eng $make -j8 $emulator |
Enjoy~
Ps: