本章将演示如何基于 Linux 命令行构建 Android 应用,在开始本章之前,希望你已经阅读之前几章内容。

  本文环境为 RHEL Sandiego 32-bits,要基于 Linux CLI 构建 Android 应用,先决环境为:

    1. JDK[1]

    2. Android SDK

    3. Apache Ant

  

  安装过程需要使用 sudo 权限。

1. 搭建环境

1.1. 安装 JDK

  JDK 是构建 Android 应用先决条件之一,由于版权原因,一般安装 Open JDK。

  

  RHEL 中使用 yum 安装,我们选择安装 java-1.7.0-openjdk-devel(即 Java 7)[2]:

# yum upgrade...# yum install java-1.7.0-openjdk-devel

  如果你使用程序包管理工具例如 yum 安装 JDK,那么 yum 已经为你处理好了一切,系统可以自动找到 JDK 提供的各种工具。如果你是手动安装,你需要手动声明 JAVA_HOME 环境变量以便稍后 Ant 可以找到 JDK 提供的各种工具。

$ vi ~/.bash_profile在最后一行输入:export JAVA_HOME=<你的 JDK 安装路径>

1.2. 安装 Android SDK

  Android 官方提供了适用不同开发环境的 Android SDK,我们选择安装适用于 Linux CLI 的 SDK Tools Only:

$ cd ~/downloads$ wget https://dl.google.com/android/android-sdk_r23.0.2-linux.tgz$ tar zxvf android-sdk_r23.0.2-linux.tgz -C ~/work/env

  以上命令将 android-sdk_r23.0.2-linux.tgz 下载到用户的 ~/downloads 目录,然后解压到用户的 ~/work/env 目录下,在该目录下会有一个 android-sdk-linux 目录,所以你的 Android SDK 安装目录为 ~/work/env/android-sdk-linux。你可以将 Android SDK 目录解压到任何地方,只要你记得它在哪里即可。

  

配置 Android SDK 环境变量

  将 Android SDK 中的 platform-tools/ 和 tools/ 目录添加到系统可执行路径中。编辑 ~/.bash_profile 文件(将其中的 $HOME/work/env/android-sdk-linux 替换为你的 Android SDK 安装路径):

# configure android sdk pathPATH=$PATH:$HOME/work/env/android-sdk-linux/toolsPATH=$PATH:$HOME/work/env/android-sdk-linux/platform-tools
export PATH

  另外根据你系统架构设置 ANDROID_SWT 环境变量。

  32 位:

export ANDROID_SWT=/home/android/work/env/android-sdk-linux/tools/lib/x86

  64 位:

$ export ANDROID_SWT=/home/web_monitor/Downloads/android-sdk-linux/tools/lib/x86 _64

1.3. 安装 Apache Ant

  

  Ant 是一个 Java 项目构建工具,也是 Android SDK 默认支持的构建工具。(更多关于 Ant 介绍)  

  你可以使用 yum 自动安装 Ant[3]:

# yum install ant

  在使用 Ant 的时候你可能遇到以下错误提示:

...199: No supported regular expression matcher found: java.lang.ClassNotFoundException: org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp...

  解决方法是安装 ant-apache-regexp[4]:

$ sudo yum install ant-apache-regexp

配置 Ant 环境变量

  我实际的 Ant 版本为 1.9.4,安装路径为 ~/work/env/apache-ant-1.9.4,编辑 ~/.bash_profile:

# ant configurationexport ANT_HOME=$HOME/work/env/apache-ant-1.9.4export PATH=$PATH:$ANT_HOME/bin

2. CLI 构建应用

  配置完毕所有先决环境后,就可以开始构建我们的 Android 项目了。

2.1. 更新 Android Targets

  新安装的 Android SDK 没有附带 Android Target,你要做的第一件事就是下载最新的 Android Targets。

  查看当前已安装 Android Targets:

$ android list target

  你会使用该命令来查看是否安装了某个 Android Target,也会用它来查看 Target ID,这个 ID 会在稍后构建时用到。

  下载并安装 Android Targets[5]:

$ android update sdk --no-ui

  安装过程中会询问你是否接受相关许可。另外初次更新耗时较长,而且很难一次性更新所有的资源,你需要多次反复执行该命令直到你拥有最新最全的 Android Targets。

2.2. 构建项目

2.2.1. 准备项目

  你可以新建一个项目,或者直接从你的代码管理系统中签出项目代码,然后进入项目根目录。

  如果你的项目之前一直使用 Eclipse 开发,那么在你项目根目录中可能没有 build.xml 这个文件,该文件是 Ant 构建配置文件,我们需要使用这个文件来调用 Ant 进行自动构建,你不必自己动手来写这个文件,如果你的项目是使用 Android SDK 提供的 android 工具创建的,那么它会自动生成在你项目根目录中。如果它不存在,我们只需要使用 android 工具更新一下项目就可以重新创建它。

$ android update project -p .

  android update project 命令可用选项包括:

Options:  -l --library    : Directory of an Android library to add, relative to this                    project's directory.  -p --path       : The project's directory. [required]  -n --name       : Project name.  -t --target     : Target ID to set for the project.  -s --subprojects: Also updates any projects in sub-folders, such as test                    projects.

  其中只有 -p 是必选。

2.2.2. 使用 Ant 构建项目

  有了 build.xml 以后,就可以使用 Ant 来构建整个项目,Android SDK 提供的 Ant 命令(点击查看全部 Ant 命令)最主要的有:

    ●ant clean:清理项目中冗余输出项。

    ●ant debug:调试模式构建。

    ●ant release:发行模式构建。

调试模式构建

  在项目根目录下直接执行以下命令:

$ ant debug

  构建完毕后,在项目根目录下的 bin 目录中你可以找到 <project-name>-debug.apk,你可以将它安装到安卓设备上进行调试。

发行模式构建

  在项目根目录下直接执行以下命令:

$ ant release

  构建过程中会要求你输入签名用的 keystore 文件和密码,构建完毕后,你可以在 bin 目录找到 <project-name>-release.apk,你可以将该文件上传到安卓应用商店公开发行。

  如果想要整个构建过程实现无人值守的自动化效果,你需要解决构建过程中输入问题,以下是两个解决方法。

  方法一:在项目根目录下创建 ant.properties 文件,添加以下内容:

# You can also use it define how the release builds are signed by declaring# the following properties:#  'key.store' for the location of your keystore and#  'key.alias' for the name of the key to use.# The password will be asked during the build when you use the 'release' target.key.store=<你的 keystore 文件路径>key.alias=<你的 keystore 别名>key.store.password=<你的 keystore 文件密码>key.alias.password=<你的 keystore 别名密码>

  方法二:在命令行使用 -D 选项动态传入相关参数:

$ ant release -Dkey.store=keystore -Dkey.alias=alias -Dkey.store.password=passwd -Dkey.alias.password=passwd

  如果你还没有一个 keystore 文件,你可以使用 JDK 提供的 keytool 工具创建一个:

$ keytool -genkey -v -keystore <App-Name>.keystore -alias <Alias Name> -keyalg RSA -keysize 2048 -validity 10000

  命令详解:

  -genkey 或 -genkeypair:生成 keystore。

  -v:打印相关信息。

  -keystore:keystore 文件名。

  -alias:设置别名。

  -keyalg:密钥算法(一般使用 RSA 算法)。

  -keysize:密钥长度(按位计算)。

  -validity:有效期(按天)。

其他构建选项

  如果不想每次都进入项目根目录进行构建,可以使用 Ant 的 -buildfile 选项。

$ ant release -buildfile <path-to-your-build.xml>

  如果想要将 .apk 输出到其他目录,编辑 ant.properties 文件添加:

# You can use this to override default values such as#  'source.dir' for the location of your java source folder and#  'out.dir' for the location of your output folder.out.dir=<the destination path you want>

  或者

$ ant release -Dout.dir=<path>

  其他一些有用选项:

  -lib <path>:添加第三方 Java 包搜索路径。

  -logfile <file> 或 -l <file>:日志输出文件。

  -logger <classname>:记录日志的类名。

  -propertyfile <name>:ant 属性文件。

  

    

(完)


注:

[1] 必须安装 JDK 而不是 JRE,因为 JRE 只提供 JAVA 运行环境,但我们要用到一些由 JDK 提供的工具。

[2] 如果你安装过程出现以下问题,可是按照给出的方法解决:

  错误提示:

...Error Downloading Packages:  libXfont-1.4.5-2.el6.i686: failure: Packages/libXfont-1.4.5-2.el6.i686.rpm from RHEL6.4: [Errno 256] No more mirrors to try.  libfontenc-1.0.5-2.el6.i686: failure: Packages/libfontenc-1.0.5-2.el6.i686.rpm from RHEL6.4: [Errno 256] No more mirrors to try....

  解决方法是新建一个远程仓库连接:

# vi /etc/yum.repos.d/public-yum-el5.repo

  

  粘贴以下内容:

[el5_latest]name=Oracle Linux $releasever Latest ($basearch)baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/latest/$basearch/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=1[el5_ga_base]name=Oracle Linux $releasever GA installation media copy ($basearch)baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/0/base/$basearch/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=0[el5_u1_base]name=Enterprise Linux $releasever Update 1 installation media copy ($basearch)baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/1/base/$basearch/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=0[el5_u2_base]name=Enterprise Linux $releasever Update 2 installation media copy ($basearch)baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/2/base/$basearch/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=0[el5_u3_base]name=Enterprise Linux $releasever Update 3 installation media copy ($basearch)baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/3/base/$basearch/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=0[el5_u4_base]name=Enterprise Linux $releasever Update 4 installation media copy ($basearch)baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/4/base/$basearch/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=0[el5_u5_base]name=Enterprise Linux $releasever Update 5 installation media copy ($basearch)baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/5/base/$basearch/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=0[ol5_u5_base]name=Oracle Linux $releasever Update 5 installation media copy ($basearch)baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/5/base/x86_64/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=0[ol5_u6_base]name=Oracle Linux $releasever Update 6 installation media copy ($basearch)baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/6/base/$basearch/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=0[ol5_u7_base]name=Oracle Linux $releasever Update 7 installation media copy ($basearch)baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/7/base/$basearch/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=0[ol5_u8_base]name=Oracle Linux $releasever Update 8 installation media copy ($basearch)baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/8/base/$basearch/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=0[el5_addons]name=Enterprise Linux $releasever Add ons ($basearch) baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/addons/$basearch/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=0[el5_oracle_addons]name=Oracle Software addons for Enterprise Linux $releasever ($basearch)baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/oracle_addons/$basearch/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=0[ol5_UEK_latest]name=Latest Unbreakable Enterprise Kernel for Oracle Linux $releasever ($basearch)baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/UEK/latest/$basearch/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=0[ol5_UEK_base]name=Unbreakable Enterprise Kernel for Oracle Linux $releasever ($basearch)baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/UEK/base/$basearch/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=0[el5_unsupported]name=Productivity Applications for Enterprise Linux $releasever ($basearch)baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/unsupported/$basearch/gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5gpgcheck=1enabled=0
View Code

  然后更新仓库并安装 JDK 需要的依赖包:

# yum install freetype-devel# yum install xorg-x11-proto-devel

  在随后我还遇到几次错误提示,都是由于缺少依赖包资源导致。为此只能手动安装所需依赖包,例如:

# cd ~/downloads# wget ftp://mirror.symnds.com/distributions/CentOS-vault/6.1/os/x86_64/Packages/libfontenc-1.0.5-2.el6.i686.rpm...# yum install libfontenc-1.0.5-2.el6.i686.rpm

  我还用到的依赖包包括:libfontenc-devel-1.0.5-2.el6.i686.rpm, libXfont-1.4.5-2.el6.i686.rpm, libXfont-devel-1.4.5-2.el6.i686.rpm。

  最后再次安装 JDK:

# yum install java-1.7.0-openjdk-devel

  

[3] 我使用的是android-sdk_r23.0.2-linux.tgz,这个版本 Android SDK 要求 Ant 1.8 版本或以上,但我使用 yum 安装只能达到 Ant 1.7 版本,因此只能手动安装最新版本的 Ant 1.9.4。

$ cd ~/downloads$ wget "http://mirror.symnds.com/software/Apache//ant/binaries/apache-ant-1.9.4-bin.tar.gz"$ tar zxvf apache-ant-1.9.4-bin.tar.gz -C ~/work/env

[4] 如果在 Ubuntu 中,你需要安装 ant-optional:$ sudo apt-get install ant-optional。

[5] $ android update sdk 命令用来更新当前的 sdk,直接运行该命令会导致以下异常:

...Exception in thread "main" org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]...

  

  这是因为它默认启动一个 GUI 界面来更新 SDK 资源,如果你使用 Eclipse + ADT 进行开发,在命令运行该命令就会调出 Android SDK Manager 窗口。在 CLI 界面下我们需要使用 ---no-ui 选项:$ android update sdk --no-ui。

更多相关文章

  1. Python+Android开发
  2. use '@foo' to launch a virtual device named 'foo'
  3. Android开发之一些问题的解决办法
  4. Android(安卓)Studio 下载安装教程
  5. Android中R.java没有自动生成解决方案
  6. android SDK 2.3安装
  7. 初学Android快速上手经验(自我小结)
  8. (详解)Eclipse3.6搭建 Android(安卓)2.2 开发环境
  9. [Android][Android(安卓)Studio] *.jar 与 *.aar 的生成与*.aar

随机推荐

  1. Android(安卓)弹无虚发之第五弹:来点儿不
  2. android绚丽的ListView表格效果的实现
  3. Android基础知识(2)—事件处理
  4. AppCompatActivity实现全屏
  5. view的绘制机制(一)
  6. App自适应draw9patch不失真背景
  7. android 自定义progressDialog实现
  8. Android(安卓)推送
  9. pinpoint安装与配置
  10. Intent 对象在 Android(安卓)开发中的应