在远程 Ubuntu 上编译 Android 工程

最近 Android 工程越来越大了,Android Studio 编译起来越来越慢,编译的时候就电脑卡死,当然更换电脑应该是最好的办法啦,但是这个要实现起来是有困难的,所以想了下,得找另一台专门的机器来编译,这样就不至于卡死了。

准备工作

找机器 & 安装 Ubuntu

找了台专门的 PC 机,首选必须是 CPU 强劲点的,但是有时候你不一定有得选,那就这样吧。

打开 Ubuntu 的官网 发现最新已经到 16.04 了,那就它了,下载 Ubuntu Desktop 版本,然后通过 UltraISO 把 iso 镜像写入到 U 盘,制作成启动盘,接下来就可以从 U 盘启动然后安装 Ubuntu,具体怎么搞就不多说了,网上一搜一大把。

不过 Ubuntu 有很多个版本,如果想试试别的发行版的话,倒是可以参考 Ubuntu 的 wiki

Ubuntu 安装好了
Ubuntu 安装好了

安装 SVN 工具

因为我的代码还是托管在 SVN 服务器上面,所以 SVN 还是需要安装的,不过好在这个可以通过 apt 命令来安装:

sudo apt-get install subversion

安装 Android SDK & NDK

这个还是有点麻烦的,Android 的官网 是在 developer.android.com 这个域名下的,而这个域名被墙了,得翻墙。

不过在 2016 年底的 Google 开发者大会上宣布为开发者启用了 developers.google.cn、developer.android.google.cn、firebase.google.cn 这三个 CN 的域名,这意味着中国的开发者不用翻墙也可以访问 Android 官网啦,Android Studio 下载页面在这,Android Studio 下载后到设置里边打开 SDK 管理器里边,把工程编译所需要的 tools、Platform-tools、platform、build-tools、ndk、Support 库都下载好。

# 下载 android-studio 的 linux 版本
wget https://dl.google.com/dl/android/studio/ide-zips/2.2.3.0/android-studio-ide-145.3537739-linux.zip

# 解压
unzip android-studio-ide-145.3537739-linux.zip

# 启动 Android Studio
./{path}/android-studio/bin/studio.sh

然后再把 SDK、NDK 的路径加入到环境变量,就可以直接执行命令行调用。

安装 Gradle 编译工具

这一步其实是可选的,因为一般工程里边都会自带了 gradlew 的批处理工具,执行 gradlew build 会自动去下载对应版本的 Gradle,然后解压,然后使用下载的 gradle 去编译工程的,当然在网络情况一般的情况下,在第一次编译的时候会非常慢,还是自己手动安装需要的 Gradle 版本比较靠谱啦。

Android Studio 里边已经自带了 Gradle,把这个 Gradle 的路径直接配置到环境变量里边,也就可以是可以用的。

当然还有一种方式就是直接使用 apt 安装:

sudo apt-get install gradle

记得安装好 Gradle 后一定要看下版本,因为不同的 Android Gradle Plugin 对 Gradle 的版本是有要求的,具体可以看官网上的说明

The Android Gradle Plugin and Gradle 版本对应关系
The Android Gradle Plugin and Gradle 版本对应关系

至此远程 Ubuntu 的环境就搭建好了。接下来就要回到自己的机器上了。

Windows 平台安装 SSH 客户端

对于 Mac 和 Linux 平台是自带了 Bash 环境的,都安装了 SSH 客户端,直接 SSH 连上 Ubuntu 就可以操作了,但是对于 Windows 来讲还是建议需要安装一个 Cygwin,这样就可以模拟获得跟 Linux 上一样的 Shell 环境了。安装教程在这,就不多介绍了。

如果有 Git 需求的,其实可以直接安装 Git 客户端,这个自带了 Shell 环境,可以使用 SSH 命令的,就不需要再单独安装 Cygwin 或者 MinGW 了。

这里值得一提的是文件夹路径的问题,在 Bash 中跟 Windows 表示有点不一样,没有盘符的概念:

# Windows 路径
C:/Users/qiaobo/path

# Bash 中表示成
/C/Users/qiaobo/path

使用 Ubuntu 编译并安装

1. SSH 登录 Ubuntu

# qiaobo 是用户名,12.2.3.1 是 Ubuntu 的 IP 地址
# 22 是端口,一般来讲 22 是默认端口可以缺省
ssh qiaobo@12.2.3.1 -p 22
# 再输入密码就进去,如果是第一次会有一个是否信任对方地址的询问

2. SVN 拉取代码

mkdir svncode
cd svncode
svn checkout http://svn.example.com/code/trunk
# 在这里会要求输入账号跟密码

3. SVN 更新代码

并不是每次都需要去检出代码的,如果已经检出过了,那就只需要更新代码就好了:

cd trunk
svn update

4. 开始编译

# 编译 Release 版本
gradle assembleRelease

# 编译 Debug 版本
gradle assembleDebug

这里需要注意 gradle 版本,如果本地没有安装 gradle,或者 gradle 版本不对,那么就使用 ./gradlew 来替换 gradle 吧,当然这个需要在工程目录下面有 gradlew 脚本文件。不过需要注意的是执行 gradlew 脚本会先去下载对应的 gradle 版本,然后再运行 gradle,如果网速慢的话,得等很久。

5. 把编译结果 Copy 出来

这个时候需要再开启一个 Bash 窗口,执行 scp 命令把结果 apk 拷贝出来:

scp -P 22 qiaobo@12.2.3.1:/path/trunk/app/build/outputs/apk/app-debug.apk /localpath/

6. 本地安装 apk

adb install -r /localpath/app-debug.apk

好啦,至此整个编译过程就结束了,就不用担心自己的机器卡死了。