文档章节

搭建 Android 云端构建环境

傅易
 傅易
发布于 2016/12/24 01:06
字数 885
阅读 257
收藏 1

基于业务需要,我们将 Android 的构建工作从工程师手里,转移到服务器上来进行。这是个很通用的行为,既可以使用自建的“构建服务器”,也可以选用比较潮流的“Docker 容器”来完成。

核心部分大概有如下三步:

  1. 搭建基础构建环境
  2. 编写构建脚本
  3. 输入、输出

假设我们白手起家,服务器既没有 JDK,也没有 Android SDK。

构建服务器的特点是没有 UI,脚本也无需交互,完全自动化,所以这需要一些技巧。我们选用 root 用户来操作,因为有些操作需要提权,又没必要切换用户——构建服务只做一件事。

我们先了解都需要什么,之后再考虑把他们合并成一个脚本文件。

首先使用自带的包管理器下载 JDK 和 wget、unzip 两个工具,其中 -qq 参数使其运行在静默模式,-y 参数使其自动接受所有选项。

如果是 Fedora / RedHat / CentOS / Amazon Linux,那么执行:

yum update -q && yum install -q -y wget unzip openjdk-8-jdk && yum clean -q all

如果是 Debian / Ubuntu,那么执行:

apt-get update -qq && apt-get upgrade -y -qq && apt-get install -qq -y wget unzip openjdk-8-jdk && apt-get clean -qq

第二步,下载 SDK 中的 tools.zip。

毋庸置疑,国内使用国内源(这里使用大连东软,其实还有其他源可用),国外使用谷歌源。

export ANDROID_HOME="/usr/local/android-sdk-linux"
export REPO_URL="http://mirrors.neusoft.edu.cn/android/repository"
# export REPO_URL="https://dl-ssl.google.com/android/repository"
export SDK_TOOLS_FILE="tools_r25.2.4-linux.zip"
wget -q --header="Accept-Encoding:gzip" "${REPO_URL}/${SDK_TOOLS_FILE}" -O tools.zip && unzip -q tools.zip -d ${ANDROID_HOME}/ && rm tools.zip
export PATH="$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools"

# 如果需要 NDK
export NDK_FILE="android-ndk-r13b-linux-x86_64.zip"
wget -q --header="Accept-Encoding:gzip" "${REPO_URL}/${NDK_FILE}" -O ndk.zip && unzip -q ndk.zip -d ${ANDROID_HOME}/ndk-bundle && rm ndk.zip

为什么在这个地方下载 NDK 而不是其他组件呢?因为 NDK 我没有使用下文所述的 SDK Manager 命令行下载成功,而它可以手动下载,使用也没问题。

第三步,安装、更新其他 SDK 组件。

我们要知道,tools 带了一个命令行工具 android,你可以通过 -h 参数查看帮助。我们通过 android 命令来安装、更新其他 SDK 组件。

如下所示:

android update sdk --no-ui --all --filter "component1,component2,..."

如果使用国内源,又是 HTTP 协议的话,要加上以下参数:

android update sdk --no-ui --all --filter "component1,component2,..." --no-https --proxy-host mirrors.neusoft.edu.cn --proxy-port 80

这步其实有个极坑的地方,每个需要许可证的组件下载前都要求你同意其许可证,而且当前的命令行工具还不提供 --accept-license(已在新版本计划中)。办法不少,我采用了一个比较笨的方法:

function update_sdk() {
    echo "y" | android update sdk --no-ui --all --filter $1
}
export SDK_COMPONENTS="tools,platform-tools,build-tools-23.0.3,android-23,extra-android-m2repository"
echo ${SDK_COMPONENTS} | xargs -d "," -I {} update_sdk {}
echo "32aac04e59953ba273920b346f1a1e809a2578a1\n8933bad161af4178b1185d1a37fbf41ea5269c55">${ANDROID_HOME}/licenses/android-sdk-license

这里最后一句的许可证散列值根据你使用的组件不同而不同,它们可以在开发者自己的 ${ANDROID_HOME}/licenses/android-sdk-license 文件里找到,放心使用。

参考文档:

如此一来,我们的构建环境就搭好了。我们来看如何使用它:

echo "sdk.dir=${ANDROID_HOME}\nndk.dir=${ANDROID_HOME}/ndk-bundle">local.properties
chmod +x gradlew
./gradlew <command>

然后,通过你自定义的手段,将必要的输入送进来,将构件送出去。

© 著作权归作者所有

傅易
粉丝 28
博文 111
码字总数 69348
作品 0
海淀
后端工程师
私信 提问
AndroidThings之基础二 设计理念

转载自:https://blog.csdn.net/tangxiaoyin/article/details/75273491 (PS:目前AndroidThings已经走向消费级别,发布正式版本1.0版,开发板推荐树莓派3B+) 前言 2012 年 6 月,由 IoT-GSI(...

qq_28831197
2018/05/09
0
0
[Android开发实践]搭建本地API服务器与HTTP请求调用

目的 在Android开发下,可以实现app对特定API服务器进行接口请求。 场景 现在很多项目都是基于C/S架构,所以在个人开发过程需要搭建类似的开发测试环境。列举一下本次的环境: 开发环境:Win...

暗夜在火星
2014/06/28
0
0
使用 Swift 语言编写 Android 应用入门

Swift标准库可以编译安卓armv7的内核,这使得可以在安卓移动设备上执行Swift语句代码。本文解释了如何在你的安卓手机上运行一个简单的“hello,world”程序。 如果你遇到了任何问题,请参考下...

oschina
2016/04/19
12.4K
27
使用命令行方式开发Android应用

Android应用程序主要用Java语言开发,所以JDK是不可缺少的,此外还要下载和安装Android SDK。Android SDK是一个非安装的压缩包,直接解压即可使用(本人将其解压到D:目录下,解压后一般是D:a...

mj4738
2011/10/31
0
0
Android开发学习总结(一)——搭建最新版本的Android开发环境

最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是一直没有搭建开发环 境去学习,Android的更新速度比较快了,Android1.0是2008年发布的,...

wensongyu
2015/04/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

HBase新建表报错 org.apache.hadoop.hbase.TableExistsException

之前安装了旧版本的hbase, 没有清理其在Zookeeper上的内容。 解决办法 stop-hbase.sh zkCli.sh >>> rmr /hbase >>> quit start-hbase.sh...

dreamness
5分钟前
0
0
大数据技术的应用现状与展望

本文是我即将由嵌入式底层驱动行业转入大数据研究领域的综述文章,案例摘自《程序员》电子期刊,由于初学者知识面较窄,查看文献量较少,因此后续还会在此基础上,继续跟踪并深入研究,为论文...

陈小君
11分钟前
0
0
NCRE考试感想 三级信息安全(上)

时间节点 报名时间:2017-06 考试时间:2017-09 查询成绩:2017-11   考试简述 满分100分,时间120分钟。题型有三种,选择题、综合题、应用题。   备考经验 题库是WLJY的,买了激活码。为了...

志成就
18分钟前
0
0
百度地图显示我的位置

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title></title><script type="text/javascript" src="jquery-1.8.2.min.js"></script></head><body><sec......

塔塔米
23分钟前
0
0
mysql mysql常用的常用函数

1. 数学函数 函 数 作 用 ABS(x) 返回x的绝对值 CEIL(x),CEILIN(x) 返回不小于x的最小整数值 FLOOR(x) 返回不大于x的最大整数值 RAND() 返回0~1的随机数 RAND(x) 返回0~1的随机数,x值相同返...

edison_kwok
54分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部