专栏首页sickwormUbuntu Touch环境搭建

Ubuntu Touch环境搭建

最近搞了一下Nexus 5的MultiRom Manger,体验了一把Ubuntu Touch和Android L,总体感觉还不错,不过Android L的NFC驱动还有问题,Ubuntu Touch优化还不足,画面有点卡,而且无法关背光。于是萌生了参与Ubuntu Touch驱动开发的念头,也算是把工作当成一种兴趣吧。

Ubuntu Touch for Nexus 5是非官方的,官方的只有Nexus 4,7,10。我们从MultiRom Manager可以直接下载到for Nexus 5的最新版本。

鉴于中文博客中并没有相关教程,只能参照 Ubuntu Touch 环境搭建的官方文档:

https://wiki.ubuntu.com/Touch/Building

以下记录我搭建Ubuntu Touch的过程(跟着上面的wiki走)。

Building Ubuntu Touch Android pieces from source Whether you want to build Ubuntu Touch for the currently supported Nexus devices or want to port it to a new target, you need to set up your working environment to build Android from source. This setup is more or less the same whether you are building AOSP or a project based on it such as CyanogenMod, SEAndroid or Ubuntu Touch. If you are new to building Android sources you may want to check out this document and others in the Getting Started section on the Google documentation site, as it covers the basics and terminology of AOSP building. While Ubuntu Touch uses some helper scripts as detailed below, if will nonetheless be helpful to understand what is going on under the hood especially if you want to work on this part of the project. http://source.android.com/source/initializing.html For Ubuntu Touch, you can find all the needed Android git repositories at https://code-review.phablet.ubuntu.com/#/admin/projects/. This is basically a mirror of AOSP 4.4.2_r1, but containing only the needed low level services used by Android (e.g. no Dalvik at all). For any Android related project on our git server, you’ll find a branch named phablet-4.4.2_r1. This branch contains a static known git HEAD and the required changes needed for Ubuntu, including our custom Android manifest.

从源码编译Ubuntu Touch的Android部分

无论你想编译现在已经支持的Nexus设备,还是想为一个新设备移植Ubuntu Touch,你都需要的搭建编译环境来编译Android源码。该教程大致和你编译AOSP(Android Open Source Project)或者基于AOSP的项目是一样的,如CyanogenMod,SeAndroid或者Ubuntu Touch。

如果你是第一次编译Android源码,你可能需要下面这个文档,和Google文档网站Getting Started章节上的其他相关文档,文档讲解了AOSP编译的基础和一些术语。在下面的环节中Ubuntu Touch会使用一些辅助脚本。如果你打算在项目上做相关开发,通过浏览这些文档你会更明白接下来的每一步是在做什么。

http://source.android.com/source/initializing.html

你可以在https://code-review.phablet.ubuntu.com/#/admin/projects/找到所有搭建Ubuntu Touch需要的Android git repositories(repo是一个多git项目管理工具,这个东西在天朝不稳定的网络中显得非常难用)。这是一个基于AOSP 4.4.2_r1的镜像,但只包含了低层Android运行所需要的服务(例如没有Dalvik)。

在我们的git服务器上任意一个Android相关的项目,你都会找到一个叫phablet-4.4.2_r1的分支,这个分支包含了一个git HEAD和包括custom Android manifest(Ubuntu Touch的repo的Manifest,包含了所有Ubuntu Touch的基础git项目)等对于Ubuntu需要修改的代码。(这段不太明白想说什么)

该段只是介绍,没有需要执行的部分。

Set up your development environment At this moment we’re using the Android code base provided by Android AOSP. Everything we take from Android is just C/C++, so you’ll notice that your Android build environment will be way smaller than when comparing to the traditional Android builds. For development you can run any 64-bit Desktop version of Ubuntu between 12.04 LTS and 13.04. It’s not strictly necessary, but it’s helpful to install ccache. (http://source.android.com/source/initializing.html#ccache in the general Android Setup guide should help with this.) Additional packages which are used to build the host tools:

  • <span id="line-1" class="anchor">$ sudo apt-get install git gnupg flex bison gperf build-essential <span id="line-2" class="anchor"> zip bzr curl libc6-dev libncurses5-dev:i386 x11proto-core-dev <span id="line-3" class="anchor"> libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 <span id="line-4" class="anchor"> libgl1-mesa-dev g++-multilib mingw32 tofrodos <span id="line-5" class="anchor"> python-markdown libxml2-utils xsltproc zlib1g-dev:i386 schedtool</span></span></span></span></span> 1 <span id="line-1" class="anchor">$ sudo apt-get install git gnupg flex bison gperf build-essential <span id="line-2" class="anchor"> zip bzr curl libc6-dev libncurses5-dev:i386 x11proto-core-dev <span id="line-3" class="anchor"> libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 <span id="line-4" class="anchor"> libgl1-mesa-dev g++-multilib mingw32 tofrodos <span id="line-5" class="anchor"> python-markdown libxml2-utils xsltproc zlib1g-dev:i386 schedtool</span></span></span></span></span>

On Utopic (and maybe other) the 4.8 version of g++ is needed:

  • <span id="line-1-1" class="anchor">$ sudo apt-get install g++-4.8-multilib</span> 1 <span id="line-1-1" class="anchor">$ sudo apt-get install g++-4.8-multilib</span>

Before 14.04 Trusty you’ll also need to set up the tools PPA. Then you need to install phablet-tools:

  • <span id="line-1-2" class="anchor">$ sudo apt-get install phablet-tools</span> 1 <span id="line-1-2" class="anchor">$ sudo apt-get install phablet-tools</span>

This will also install the repo tool, used to sync the Android repositories. Learn more about the repo tool. If you already have a repo tool in your $PATH from previous android development, be sure to remove it or make sure it’s after the system repo command in the path. To check that the right repo command is used, you can issue $ which repo. This should return /usr/bin/repo. You can check out the source code using the repo and git tools already familiar to Android ROM developers, as described here https://wiki.ubuntu.com/Touch/AndroidDevel Alternately, all the Android code can be downloaded using the phablet-dev-bootstrap tool provided by the phablet-tools package installed in the previous step. This tool is a Python wrapper around repo and used to also check out bzr repositories before all code was managed by repo and git. For the purposes of getting the source code for development it is no longer needed. To get the code setup run:

  • <span id="line-1-3" class="anchor">phablet-dev-bootstrap [target_directory]</span> 1 <span id="line-1-3" class="anchor">phablet-dev-bootstrap [target_directory]</span>

If for some reason the sync ends midway, you can continue the sync with the -c switch, so the command would be:

  • <span id="line-1-4" class="anchor">phablet-dev-bootstrap -c [target_directory]</span> 1 <span id="line-1-4" class="anchor">phablet-dev-bootstrap -c [target_directory]</span>

Alternatively, if you are just building an image for an already supported device, you can specify the -v switch:

  • <span id="line-1-5" class="anchor">phablet-dev-bootstrap -v [device codenames] [target_directory]</span> 1 <span id="line-1-5" class="anchor">phablet-dev-bootstrap -v [device codenames] [target_directory]</span>

The phablet-dev-bootstrap command will automatically use the repo tool with the Ubuntu Touch Preview custom manifest to download all the git repositories and needed data. Be aware that this step takes a long time and requires at least 15GB (plus 2-3GB for the binary output).

搭建你的编译环境

我们将使用Android基础组件(基于Android AOSP)来编译。

我们只会用到Android中的C/C++代码,所以你会发现你的编译环境会比传统的Android编译环境要小。

你可以使用Ubuntu 12.04LTS到13.04的64位桌面版来开发Ubuntu Touch。(博主使用Mint 14.04,基于Ubuntu 14.04)

我们可以安装ccache(ccache会加快Android编译速度),但不是必需的。(http://source.android.com/source/initializing.html#ccache Android配置向导会指导你如何安装)

我们还需要这些安装包来编译主机上的编译工具:

$ <span style="color: #0000ff;">sudo</span> apt-get <span style="color: #0000ff;">install</span> git gnupg flex bison gperf build-<span style="color: #000000;">essential </span><span style="color: #0000ff;">zip</span> bzr curl libc6-dev libncurses5-dev:i386 x11proto-core-<span style="color: #000000;">dev libx11</span>-dev:i386 libreadline6-dev:i386 libgl1-mesa-<span style="color: #000000;">glx:i386 libgl1</span>-mesa-dev g++-<span style="color: #000000;">multilib mingw32 tofrodos python</span>-markdown libxml2-utils xsltproc zlib1g-dev:i386 schedtool

1

$ <span style="color: #0000ff;">sudo</span> apt-get <span style="color: #0000ff;">install</span> git gnupg flex bison gperf build-<span style="color: #000000;">essential  </span><span style="color: #0000ff;">zip</span> bzr curl libc6-dev libncurses5-dev:i386 x11proto-core-<span style="color: #000000;">dev  libx11</span>-dev:i386 libreadline6-dev:i386 libgl1-mesa-<span style="color: #000000;">glx:i386  libgl1</span>-mesa-dev g++-<span style="color: #000000;">multilib mingw32 tofrodos  python</span>-markdown libxml2-utils xsltproc zlib1g-dev:i386 schedtool

在Utopic(Ubuntu 14.10)(或者其他)中,还需要安装g—4.8

$ <span style="color: #0000ff;">sudo</span> apt-get <span style="color: #0000ff;">install</span> g++-<span style="color: #800080;">4.8</span>-multilib

1

$ <span style="color: #0000ff;">sudo</span> apt-get <span style="color: #0000ff;">install</span> g++-<span style="color: #800080;">4.8</span>-multilib

在Ubuntu 14.04稳定前你还需要安装PPA工具。(只需要把“Add PPAs (pre Trusty only)”那一步执行就ok了。)

然后安装phablet-tools:

$ <span style="color: #0000ff;">sudo</span> apt-get <span style="color: #0000ff;">install</span> phablet-tools

1

$ <span style="color: #0000ff;">sudo</span> apt-get <span style="color: #0000ff;">install</span> phablet-tools

这会安装repo工具,repo用于同步Android的repositories。 点击了解repo工具。如果你已经有了repo工具且已经在之前的Android开发中把执行路径加入到$PATH中了,请把repo删除,或保证在$PATH中repo的路径在系统的repo command的路径(如/bin/repo)之后。你可以使用$ which repo验证repo路径是否正确。如果正确,会返回/usr/bin/repo。

(这段还没弄清楚什么意思,因为我还没编译过,应该保证是/usr/bin/repo就可以了。到时候回来补充)

然后使用repo和git(只需要安装git,不需要实际执行,repo会调用git工具),从以下网址获取Android源码。这一步对于Android Rom开发者应该很熟悉。

https://wiki.ubuntu.com/Touch/AndroidDevel

(此链接会另写一篇文章,下载源码的工作都在这个链接中)

使用之前步骤已经安装了的phablet-dev-bootstrap,就可以一个个项目地下载所有的Android代码(大概可有640多个)。这个工具使用Python将repo封装了起来。在所有的代码被repo和git管理之前,这个工具也可以用于下载bzr repositories(和repo相似的一个管理工具)的工程。不过只用于获取开发用的源码的话,已经不需要这个功能了。

接下来让代码跑起来:

phablet-dev-bootstrap [target_directory]

1

phablet-dev-bootstrap [target_directory]

如果发生某些错误导致sync中途停止了,你可以使用-c参数继续同步:

phablet-dev-bootstrap -c [target_directory]

1

phablet-dev-bootstrap -c [target_directory]

如果你只是编译一个已经被支持的设备的烧录文件,你可以使用-v参数:

phablet-dev-bootstrap -v [device codenames] [target_directory]

1

phablet-dev-bootstrap -v [device codenames] [target_directory]

phablet-dev-bootstrap命令会使用repo工具自动下载manifest(项目列表)然后下载所有的git项目和需要的数据。注意这个步骤要很长的时间,而且需要至少15GB(加上2-3GB的二进制文件输出)的空间。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Launcher3自定义壁纸旋转后拉伸无法恢复

    描述:将自定义图片设置成壁纸后,横屏显示时,旋转为竖屏,图片由于分辨率过小,会拉伸;再旋转为横屏,拉伸不恢复。

    sickworm
  • Settings点击Location(位置)后右上角的开关button不会消失

    前几天又遇到一个源码的bug。在10寸平板上,进入设置界面,点击Location(位置)项,右上角Title处会显示一个开关button,用来开关定位服务。但点...

    sickworm
  • 【Android XML】Android XML 转 Java Code 系列之 style(3)

    最近一个月把代码重构了一遍, 感觉舒服多了, 但总体开发进度没有变化.. 今天聊聊把style属性转换成Java代码的办法

    sickworm
  • bootstrap 标签与徽章

    <span class="label label-default">默认标签</span> <span class="label label-primary"...

    用户5760343
  • 手机H5页面(文字滚动、适配各种屏幕、jQuery ajax包含cookie)

    从入门到进错门
  • TortoiseSVN客户端使用的2个配置问题

    软件开发中,都需要涉及到代码管理工具。在Visual Studio中一般都是使用Team Foundation Server,简称TFS。团队中一般有一台服务器...

    八哥
  • JVM垃圾回收与一次线上内存泄露问题分析和解决过程

    内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

    猿天地
  • 腾讯技术开放日 | 保障视频连线画质清晰且流畅,腾讯会议有这些优化实践

    导读 | 腾讯会议自去年12月底推出,在疫情期间极速扩容,日活跃用户超过1000万。面对数量庞大的用户,以及他们背后网络、设备的多样性,该如何针对各个场景进行...

    腾讯音视频实验室
  • proxysql cluster 的搭建

    https://proxysql.com/blog/proxysql-cluster

    二狗不要跑
  • 学习前端 第5周 第4天

    Joel

扫码关注云+社区

领取腾讯云代金券