由于国外的大神时间不是很充足,编译的rec也是英语版的,用的不是官方的kernel,导致偶尔会花屏,我就想着自己来尝试下编译一个。以IUNIU2为例

目前为止已经英语版的成功了,最近在忙着考虑汉化的问题。一点一点学吧。
说实话,在编译rec的时候参考了很多教程,有的由于不一样,有的由于过于久远,导致走了很多弯路。
官方的教程不是很详细,还是英语的,编译出来真是困难啊!
现在记录下来,希望对自己对其他人都与帮助吧。
第一步,准备编译环境

首先linux环境是少不了的

说实话编译的时候建议使用比较稳定的系统,像archlinux的就算啦,不稳定,很多包也不好安装,容易冲突。
我折腾来折腾去最后使用了ubuntu14.04麒麟版,方便快捷。
不建议使用虚拟机,一是比较卡,二是源码比较大,虚拟机性能还是不如双系统好。

需要安装必要的工具

sudo apt-get install bison build-essential curl flex git gnupg gperf libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev openjdk-7-jdk

等着自动安装完成就好啦。文件有100多m吧。下载还是挺快的。
网上有的还有这句话

export USE_CCACHE=1

这个应该是加速用的,反正我没设置。也是挺快的。

为同步源码做准备工作

创建路径

mkdir -p ~/rom/bin
mkdir ~/rom/omni

第一个是放repo,第二个是放源码的,twrp建议使用omni,而且omni同步下来自动就带twrp啦
下载repo,这个有可能会被墙哦!

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/rom/bin/repo

然后改权限,允许执行,直接777就好啦。

chmod 777 ~/rom/bin/repo

添加环境变量

把bin这个目录添加到环境变量里面来。因为后面的同步都不是在bin目录下同步的。

sudo vim ~/.bashrc
export PATH=~/rom/bin:$PATH

添加好后source下,要不然找不到。

source ~/.bashrc
echo $PATH  #看看有没有生效

同步源码

注意这个同步过程会比较慢,不要着急。一共10多G,占用20多G吧
如果你配置过git了,就忽视这句话就好啦,否则先设置下,省得出错。

git config --global user.email xxxxx@qq.com
git config --global user.name hundred

以上这两句配置过得请忽视
接下来选择分支,我选的5.1,无所谓。
注意执行前先切换到omni目录下

cd ~/rom/omni
repo init -u git://github.com/omnirom/android.git -b android-5.1

这就把分支弄好啦。
开始下载,这个慢慢等。这个j后面的数字看电脑以及网络情况。

repo sync -j16

如果有什么事中断了同步,在omni下再执行

repo sync -j16

就可以啦
如果发现太慢,在omni下有个.repo文件夹,里面有manifest.xml
将里面fetch后面的https改成http要稍微好点。
到目前为止,前期准备工作就准备完了。这一块是比较好理解的,大部分教程到目前为止也都是一样的。
第二步,开始编译
第一步,写这几个mk文件。当时我就是一直在这失败。
网上的很多教程都是基于cm的,第一步都是
准备个boot.img或者recovery.img,然后执行

make otatools

说生成相应的文件,接下来各种编译。
可是现在是基于omni的,根本没有这些东西,一编译就会报错。
在omni下需要自己创建。
首先,在device目录下创建厂商名/设备型号名
例如我的device/IUNI/U810.
文件里面有几个mk文件,自己看着改,也可以从网上找对应的别人做好的。可以在别人做好的上面适当的改改。
把我的传到github上了
注意这几个mk文件是重点,如果出错肯定会编译失败。
当时我编译的时候有几个地方经常出问题,贴出来吧。
主要都是集中在BoardConfig.mk以及omni_U810.mk文件
由于官方没有开源,所以要从官方解出来kernel二进制文件以及dt.img文件。
需要在BoardConfig.mk添加

BOARD_MKBOOTIMG_ARGS := --dt device/IUNI/U810/dt.img --kernel_offset 0x0008000 --ramdisk_offset 0x01000000 --tags_offset 0x0000100
TARGET_PREBUILT_KERNEL := device/IUNI/U810/kernel

TARGET_RECOVERY_FSTAB := device/IUNI/U810/fstab.qcom

并且omni_U810.mk要加进来

PRODUCT_COPY_FILES += \
    device/IUNI/U810/kernel:kernel \
    device/IUNI/U810/dt.img:dt.img
PRODUCT_COPY_FILES += device/IUNI/U810/twrp.fstab:recovery/root/etc/twrp.fstab

注意在你的device目录下加个verdorsetp.sh的文件,用来在lunch的时候检测到你的设备。
内容这样就好

add_lunch_combo omni_U810-eng

把这几个文件弄好后就可以编译了。

开始编译

首先执行

source build/envsetup.sh

1

source

这个是初始化编译环境,不执行下面的会出错或者是找不到命令。
执行lunch选择你的机型

lunch

lunch

编译rec

make recoveryimage -j16

mkrec

这个数字看电脑啦。
在编译的过程中会出现很多note、warning之类的,还会提示没有那个文件,有phone/java以及dummy,不用管。我编译差不多四五分钟吧。
如果没有出现什么问题的话就会在out/target/product/U810(你自己的型号)下面生成rec了,刷入体验就好啦。
如果你改动了你的mk文件,一定要记得

make clean

mkclean

要不然改动可能不会生效。
以上就是编译的主要过程,看着并不复杂,只有自己亲自失败几次才能成功编译,理解错误的原因。不要气馁。
接下来说说我编译的时候没怎么注意的几个问题。
1.最好安装sdk并配置环境变量。
因为有的时候出错的话可以使用logcat进行查看。
我好几次都是编译成功,结果就卡在第一屏,怎么都进不去rec,adb devices也显示的rec状态。
然后换了个kernel以及dt.img就成功了。
2.注意boardconfig的TW_THEME或者是设置上分辨率。
当时我就是这儿一直出错。由于omni火默认自动检测,不像cm有otatools,一直提示找不到,编译失败。
我当时还想着不能吧,内核没解开怎么就出错!就是两个方式不完全一样了!
3.提示没有对应的omni_U810,这个看看你的device目录起得名称以及其他调用的对不对。
综上,这个还是得自己多多练习。
编译rec就到此结束吧!
学会了汉化再开帖子说汉化!
---------------------------update on Feb,1,2016---------------------------
前几天汉化好了想着更新下,结果这几天各种事导致没有时间来更新,由于twrp现在相对以前版本变化太大,导致汉化方式也变化了,在看以前的就有点老了。实际很简答,就不另开帖说啦。
以前的话需要把汉字的字形码之类的映射为一个个的十六进制码,有点像数码管的ABCD那种控制,现在在twrp里面有个truetype.c文件,根据我的理解应该是可以识别ttf字体文件然后造字显示在屏幕上,所以汉化只修改主题应该就好了,不需要再动minui文件夹里面的内容了。
对于twrp打开文件夹有汉字仍然显示不出来的问题,我理解是font_10x18.h这几个头文件里没有汉字的字形码,导致无法识别,内容传递到主题的ui.xml之前就是乱码的,没有相应的编码,会无法识别。
如果要显示的话需要添加字形码到头文件,不过这个根据xiaolu,suky,syhost等好几个大神在github上的源码仍然没看懂,总是会失败,就放弃这个了。反正主题上的很多内容都加载出来了。
现在recovery的基本编译是差不多会一点了,不得不感谢各个开源项目。这篇文章也应该到此结束了。
这几天想着学编译rom的,不过估计太难,不一定会。慢慢学吧。
参考资料:
1.http://bbs.gfan.com/forum.php?mod=viewthread&tid=7871172
2.http://www.romzh.com/course/2015/10/1381.html
3.http://forum.xda-developers.com/showthread.php?p=32965365
4.感谢外国ferhat大神为u2的付出!

教程来自:编译twrprecovery教程

标签:安卓, 编译

你的评论