落花踏尽游何处,笑入胡姬酒肆中。这篇文章主要讲述Arch Linux 下Android 源代码的下载以及编译相关的知识,希望能为你提供帮助。
之前把公司的开发环境由Ubuntu Kylin 换成了Arch Linux。而Arch 下由于种种问题公司的代码一直编只是去。搞定了之后也一直忘了写下来,希望能给相同在Arch 下做android 开发的另类一点帮助吧。这里所编译的Android 版本号基于Google 的Android 5.1。
安装基本依赖【Arch Linux 下Android 源代码的下载以及编译】首先在文件/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 [email
protected] $<
$(SPLOBJDIR)%.o:$(SRCTREE)/nand_spl/board/$(VENDOR)/$(SOC)/%.S
-$(CC) $(CFLAGS) -mlittle-endian -DCONFIG_NAND_SPL -c -o [email
protected] $<
+$(CC) $(AFLAGS) -mlittle-endian -DCONFIG_NAND_SPL -c -o [email
protected] $<
$(SPLOBJDIR)%.o:$(SRCTREE)/arch/$(ARCH)/lib/%.S
$(CC) $(AFLAGS) -mlittle-endian -DCONFIG_NAND_SPL -c -o [email
protected] $<
代码的编译在运行编译之前,须要再次设置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 相比也算是一个优势吧。
文章图片
推荐阅读
- Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例
- 搞定Android模拟器,开启甜蜜之旅
- 功能强大的图片截取修剪神器(Android SimpleCropView及其实例代码重用简析(转))
- 2020-09-28 375次浏览原文Android平台上的Aplay与TinyAlsa移植使用
- [Android] 开发第六天
- call()和apply()的区别
- android 通过bitmapfactory得到图片真实像素的方法,以及没有得到真实像素的原因
- Unity3D 加密 Assembly-CSharp.dll (Android平台) 防止反编译
- AppFuse 3的乱码问题