之前把公司的开发环境由Ubuntu Kylin 换成了Arch Linux。而Arch 下由于种种问题公司的代码一直编只是去。搞定了之后也一直忘了写下来,希望能给相同在Arch 下做Android 开发的另类一点帮助吧。这里所编译的Android 版本号基于Google 的Android 5.1。

安装基本依赖

首先在文件/etc/pacman.conf中打开你的multilib repo

[multilib]
Include = /etc/pacman.d/mirrorlist

然后强制更新一下本地repo

sudo pacman -Syy

然后安装编译所须要的依赖

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

另外你还须要手动设置几个软连接

/usr/lib/libtinfo.so -> /usr/lib/libncursesw.so
/usr/lib/libtinfo.so.5 -> /usr/lib/libncursesw.so
/usr/lib/libtinfo.so.6 -> /usr/lib/libncursesw.so
/usr/lib/libncurses.so.5 -> /usr/lib/libncursesw.so
/usr/lib/libncurses.so.6 -> /usr/lib/libncursesw.so

Python2 虚拟环境

由于Google 的repo脚本须要Python2 环境。而Arch Linux 中默认使用Python3,所以须要能够非全局地切换到Python2 环境。这个能够通过包python-virtualenvwrapper搞定。

首先安装这个包

sudo pacman -S python-virtualenvwrapper

由于Google 的envsetup.sh脚本必须由bash 解释,所以须要事先切换到bash,当然假设你默认使用bash 就不须要切换。兴许会測试一下使用zsh 的效果

bash

然后创建一个python2 虚拟环境,前两行的设置环境变量最好写入你的shell 配置文件

export WORKON_HOME=~/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=$(which python3)
source /usr/bin/virtualenvwrapper.sh
mkvirtualenv -p $(which python2) python2

之后我们就进入了python2 虚拟环境。值得注意的是python-virtualenvwrapper能够创建python2 虚拟环境,可是必须依赖于python3 才干运行。假设你以后再想切换到python2 环境,仅仅须要在确保环境变量正确的情况下运行source内建指令和workon函数就能够了。

最后不要忘记清空LC_ALL环境变量以让LC*变量生效。否则repo会毫不留情的崩掉

export LC_ALL=''

在创建的python2 虚拟环境中。如今Google 的repo脚本应该能够正确运行,能够同步代码到本地了。

假设你的repo仍然崩溃,多半是你在把开发环境迁移到Arch 之前是用过repo,假设是这样那么运行以下的语句然后再次開始你的sync 操作

rm ~/.repopickle_.gitconfig

一条错误规则

一个很坑人的地方就是,Google 很久之前就写错了一条Makefile 规则。

8 月下旬提前拿到了Android M 预览版的源代码,然而发现这条错误规则仍然存在。

在低版本号的GNU Make 上,这条规则被其它规则所覆盖,代码能够顺利编译,然而由于Arch Linux 的滚动升级特性,高版本号的GNU Make 已经能够正确使用这条错误的规则。导致编译中断。你须要改动chipram/Makefile,改动方法例如以下

diff --git a/Makefile b/Makefile
index 3017572..59a32df 100644
--- a/Makefile
+++ b/Makefile
@@ -230,7 +230,7 @@ $(SPLOBJDIR)%.o: $(SRCTREE)/nand_spl/%.c
$(CC) $(CFLAGS) -mlittle-endian -DCONFIG_NAND_SPL -c -o $@ $< $(SPLOBJDIR)%.o: $(SRCTREE)/nand_spl/board/$(VENDOR)/$(SOC)/%.S
- $(CC) $(CFLAGS) -mlittle-endian -DCONFIG_NAND_SPL -c -o $@ $<
+ $(CC) $(AFLAGS) -mlittle-endian -DCONFIG_NAND_SPL -c -o $@ $< $(SPLOBJDIR)%.o: $(SRCTREE)/arch/$(ARCH)/lib/%.S
$(CC) $(AFLAGS) -mlittle-endian -DCONFIG_NAND_SPL -c -o $@ $<

代码的编译

在运行编译之前,须要再次设置LC_ALL以覆盖LC*变量,否则编译開始不了多久你就会栽一个跟头

export LC_ALL=C

然后就是编译Android 代码的标准步骤了

source ./build/envsetup.sh
lunch
make update-api droid otapackage -j8

高速设置函数

最后提供一个高速切换到Android 编译环境的函数android_env,与之相配的另一个repo函数。将这个两个函数写入你的shell 配置文件(比如~/.zshrc) 中就可以,之后你能够使用指令

android_env

高速切换到编译环境。适合默认shell 为zsh 的用户。这两个函数能够在这里得到。

另外一些杂七杂八的问题是公司自研部分的问题,包含Makefile 写错FLAG(编译參数)等各种毛病,就不在这里写了。

顺便用Arch 作为开发环境事实上并没有什么不方便,滚动升级意味着工具链能够保持最新,高度可制定性也决定了系统做成一个轻量级的开发环境,同一时候优秀的包管理机制也很省心,和Ubuntu 相比也算是一个优势吧。

Arch Linux 下Android 源代码的下载以及编译的更多相关文章

  1. [转]Linux下阅读源代码:(g)vim+Taglist+ctags

      Linux下阅读源代码的方法很多,聪明人从标题应该就可以知道,需要(g)vim+Taglist+ctags.3者配合,真是珠联璧合,功力无限啊! vim/gvim什么是vim/gvim,如果看官连 ...

  2. AOSP ON MAKO(在NEXUS 4上刷ANDROID 4.4 源代码包-下载/配置/编译/刷机)

    AOSP ON MAKO(在NEXUS 4上刷ANDROID 4.4 源代码包-下载/配置/编译/刷机) 特别感谢google官方文档及AOSP源代码开放 參考链接: https://source.a ...

  3. Linux 下android环境的配置

    Linux 下android环境的配置 1. JDK下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads- ...

  4. 【转】Linux下Android ADB驱动安装详解

    原文网址:http://blog.csdn.net/zhenwenxian/article/details/5901350 Linux下Android ADB驱动安装详解 概述 最近由于内置的合作商比 ...

  5. Arch Linux下Visual Stdio Code在格式化C代码时报错

    libtinfo.so.5: cannot open shared object file: No such file or directory Arch Linux下Visual Stdio Cod ...

  6. 基于Linux下Iptables限制BT下载的研究

    基于Linux下Iptables限制BT下载的研究   摘要:     当前BT下载技术和软件飞速发展,给人们网上冲浪获取资源带来了极大的便利, 但同时BT占用大量的网络带宽等资源也给网络和网络管理员 ...

  7. android源码下载以及编译自己的ROM

    android源码下载以及编译自己的ROM 最近发现kernel.org被墙了,为什么这种网站也能被墙了? 要想下载源码的话,只能绕过去了.下面是我从网上搜索到的一些下载方法: =========== ...

  8. Linux下C程序的编辑,编译和运行以及调试

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  9. 在Linux下安装PHP过程中,编译时出现错误的解决办法

    在Linux下安装PHP过程中,编译时出现configure: error: libjpeg.(a|so) not found 错误的解决办法 configure: error: libjpeg.(a ...

随机推荐

  1. [bzoj1022][SHOI2008]小约翰的游戏John (反Nim游戏)

    Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取 的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不 ...

  2. sqlserver复制表数据到另一个表

    SQL Server中,如果目标表存在: insert into 目标表 select * from 原表; SQL Server中,,如果目标表不存在: select * into 目标表 from ...

  3. SQL server将某个字符串将按指定字符分解成子字符串(行转列)

    今天突然需要用到这样的方法,在网上找过很多,大体都写的很复杂,这个简单实用.转载自ChineseMoonGod的博客:https://www.cnblogs.com/ChineseMoonGod/p/ ...

  4. BGP路由属性详解

    Weight属性:cisco私有的BGP属性参数,它只适用于一台路由器中的路由,也就是不会传递给任何其他的路由器.他的取值范围为<0-65535>,这个数越大优先级越高,默认从邻居学到的路 ...

  5. hdu 4790 数学

    /* 题意:给你二个区间[a,b]和[c,d] 分别从中选一个数x和y使的(x+y)%p=m; 可以这样来求,先求出(0->b和0->d区间段的值)-(区间0->a-1和0-> ...

  6. bzoj3142[Hnoi2013]数列 组合

    Description 小 T最近在学着买股票,他得到内部消息:F公司的股票将会疯涨.股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为N.在疯涨的K天中小T观察 到:除第一天外每天的股价都 ...

  7. JPA框架下使用纯粹的原生SQL

    最近遇到一个需求,查询数据库中对应表的字段是动态的,项目使用的框架使用JPA+Spring Boot,JPA自带原生SQL支持的传入参数是强类型的,无法用于查询语句的字段更改,因为插入字符串的话带有单 ...

  8. 安装mysql时出现应用程序无法正常启动(0xc000007b)、初始化失败以及密码忘记怎样重置?

    https://blog.csdn.net/zztingfeng/article/details/80155624

  9. CodeForces 596C Wilbur and Points

    先对n个点分类,然后按题意要求构造,构造的时候判断这个点的右上方之前是否有点,判断可以用线段树来操作. #include<cstdio> #include<cstring> # ...

  10. AtCoder Regular Contest 091&092

    091E(构造) 题意: 给出n,a,b.你需要构造出一个长度为n的n的排列,其中最长上升子序列的长度为a,最长下降子序列的长度为b. n,a,,b<=3e5 分析: 我们可以构造出这样的数列, ...