接上篇《Fedora27 上搭建android开发环境1-在笔记本上安装双显卡驱动》,笔记本上面已经安装好Linus大神常用的Linux版本Fedora27及双显卡驱动,现在我们来进行Fedora27上Android6.0的源代码编译过程。我之前找了网上所有的资料,只有Fedora 1X系列有人试过在Android 5.0以下的编译试验,当然现在已经不适用了,所以只能参考centos7的,虽然后面会有问题,当然有。。。但至少知道平台版本上相近(都是redHat家系列的嘛),安装哪些库,Fedora 1X系列的和27距离太远,已经无参考价值了。
整个编译过程基本上和Ubuntu上差不多,但过程有点奇怪,还是按下面步骤来讲:
1 下载源代码,2 编译环境准备,3 高版本Linux问题处理 4 编译
一 下载源代码
不浪费时间在用repo上面(有可能光下载源码会超过24小时,我就试过。。),直接下载百度云上去掉git文件的小型文件压缩包。
pan.baidu.com/s/1dE5Q8hF
二 编译环境的准备
1) JDK的安装
说实话,找了一下午的资料才找到相关的方法,安装Fedora低版本OpenJdk1.7这方面没任何资料,自已琢磨出来的,别人一般写的博客都是把OpenJDK换成OracleJDK,低向高安装,所以没有我想找的东西,ubuntu下面安装资料大把,操作也极方便,Fedora这方面完全没有。Feodra27 默认带openJDK1.8,软件库里自带1.8和1.9,然后1.7在这个高版本的Fedora的软件库上是没有的。没有就到各大学的镜像库去找,一样没有,Fedora低版本库早就被清掉了,只保存Fedora 26,27的版本,而26和27一样,最低只安装1.8,没有1.7。然后又跑到Centos哪边库找,好在在6.9版本的Centos哪里,找到了1.7。安装也是一个坑,开始一个劲地说当前版本不适合这个版本的Fedora.最后又找了一个多小时的资料,才发现是这么安装的,要加一个强制安装的参数!!!!好啰嗦完了,下面是方法
到这个大学的镜像网站下载jdk7的两个文件,一个运行,一个开发。
http://mirrors.ustc.edu.cn/centos/6.9/os/x86_64/Packages/
然后安装,一定要加–force –nodeps,无语的Fedora!!
1 2 3 4 |
#rpm -ivh java-1.7.0-openjdk-1.7.0.131-2.6.9.0.el6_8.x86_64.rpm java-1.7.0-openjdk-devel-1.7.0.131-2.6.9.0.el6_8.x86_64.rpm --force --nodeps 切换版本,从jdk8切回jdk7 #update-alternatives --config java #update-alternatives --config javac |
2) 设置环境变量
在.bashrc中加上下面语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#build openjdk option export SKIP_DEBUG_BUILD=false export SKIP_FASTDEBUG_BUILD=true export DEBUG_NAME=debug export LANG=C export ALLOW_DOWNLOADS=true export USE_PRECOMPILED_HEADER=true export BUILD_LANGTOOLS=true export BUILD_JAXP=true export BUILD_JAXWS=true export BUILD_CORBA=true export BUILD_HOSTPOT=true export BUILD_JDK=true BUILD_DEPLOY=false unset CLASSPATH unset JAVA_HOME |
3)配置编译环境
1 2 3 4 |
$sudo yum install -y gcc make libstdc++.i686 libstdc++-devel.i686 $sudo yum install -y zlib-devel openssl-devel perl cpio expat-devel gettext-devel $sudo yum install -y autoconf glibc.i686 glibc-devel.i686 zlib-devel.i686 libstdc++.i686 $sudo yum install -y libX11-devel.i686 ncurses-devel.i686 ncurses-libs.i686 gperf flex gcc-c++ bison patch |
三高版本Linux问题处理
代码编译前要进行的设置,不然编译到2个半小时,再重来,是件很“爽”的事。
1) 转移库
1 |
$sudo cp /usr/bin/ld.gold {andoroid6.0根目录}/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/x86_64-linux/bin/ld |
2)修改 build/core/clang/HOST_x86_common.mk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
加上 -B$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG)/x86_64-linux/bin \ 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 //这句,如果编译报错的话--就去掉,ubuntu16上可能要去掉也可以不用我没试过,deepin15是不要去掉的, //但Fedora27上面一定要去掉,因为编译到半夜出错了,最后只在一个老外的个人网站上才找到这个原因,而这个老外用的是ubuntu16。 CLANG_CONFIG_x86_LINUX_HOST_EXTRA_CFLAGS := \ |
3)修改 art/build/Android.common_build.mk
#关闭高版本的clang编译器,会把项目编译错误,高版本会走clang编译。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 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 |
四 编译
1 2 3 4 5 6 7 8 9 |
$cd {andoroid6.0根目录} $prebuilts/misc/linux-x86/ccache/ccache -M 50G $source build/envsetup.sh $lunch aosp_arm-eng 或者aosp_x86-eng (这两个产品的区别, aosp_arm-eng 优点:编译的时间比aosp_x86-eng短一个小时,占硬盘比aosp_x86-eng少1G,可以加载模拟器arm架构的内核源码编译出来的镜像,研究编译内核这方面网上公布出来的资料很丰富,适合framework和研究linux内核栈的网友使用 aosp_x86-eng 优点:就是一个字快,启动和运行快如闪电,缺点上面都说,编译时间长点,硬盘占得多点,关于x86架构内核源码编译的方法,网上公布少得可怜,适合不做内核的网友使用) $make -j8 //核数×2,快cpu的2小时,慢cpu的arm版本3.5小时,x86版本4.5小时 $emulator -GPU on //-GPU on是提供webview网页刷新之用,不调试浏览器的话不打开也可以,否则浏览器点击后会强关。 |
总结:在Fedora27上面编译其实和ubuntu16一样方便,除了安装旧版本opendjdk有点另类外,这主要是没人这么写过博客,资料和文件不好找。
ps:
在Fedora27上面,最好不要同时安装OpenJDK编译和Android源代码编译的两类库文件,选其一就可,我试过3次也就是重装了3次Fedora27:两者库全都安装上了,结果是再次重启Fedora系统的时候,Fedora当前账户的gnome-terminal命令行工具启动不起来了,要切到root用户下,把这个账户删除,再新建一个新账户,因为删除问题账户下.config文件夹都无效,很是无语。
好了,Enjoy~