Android相关shell编程
1. 版本历史
时间 | 描述 | 版本号 | 修订人 |
---|---|---|---|
0.01 |
2. 目标读者
- 需要学习shell编程的人员
3. 文档目的
- 简要介绍shell编程
- 为android的ant打包与jenkins的持续构建奠定基础
4. 主要内容
4.1 shell基本语法
4.1.1 shell变量
variableName="value"
4.1.2 shell替换
#!/bin/bash
a=10
echo -e "Value of a is $a \n"
4.1.3 shell运算符
#!/bin/bash
val=`expr 2 + 2`
echo "Total value : $val"
4.1.4 shell echo命令
echo是Shell的一个内部指令,用于在屏幕上打印出指定的字符串。命令格式:
echo arg
4.1.5 shell字符串
str='this is a string'
your_name='qinjx'
str="Hello, I know your are \"$your_name\"! \n"
4.1.6 shell数组
array_name=(value0 value1 value2 value3)
4.1.7 shell判断
if 语句通过关系运算符判断表达式的真假来决定执行哪个分支。Shell 有三种 if … else 语句:
if … fi 语句;
if … else … fi 语句;
if … elif … else … fi 语句。
4.1.7 shell for循环
for 变量 in 列表
do
command1
command2
...
commandN
done
4.1.9 shell函数
function function_name () {
list of commands
[ return value ]
}
参考:shell简介
4.2 Android ant编译
4.2.1 配置ant环境
- http://ant.apache.org下载ant压缩包
- 本地配置环境变量
4.2.1 Ant 的运行
- 命令行中切换到构建文件的目录,输入Ant命令就可以运行Ant.若没有指定任何参数,Ant会在当前目录下查询build.xml文件。如果找到了就用该文件作为构建文件。
- 如果使用了 –find 选项,Ant 就会在上级目录中找构建文件,直至到达文件系统得跟目录。
- 如果构建文件的名字不是build.xml ,则Ant运行的时候就可以使用 –buildfile file,这里file 指定了要使用的构建文件的名称
示例如下:
Ant
说明了表示当前目录的构建文件为build.xml 运行 ant 执行默认的目标。
Ant –buildfile test.xml
使用当前目录下的test.xml 文件运行Ant ,执行默认的目标
4.2.3 build.xml文件的生成办法
- 使用“android update project –path .”命令
- 选择需要生成Build.xml文件的项目,右键. Export-> General -> Ant Buildfiles .
点Next,选择项目,再点Finish. - 拷贝android sdk目录下build.xml文件进行修改
4.2.4 build.xml文件的标签含义
project 标签 每个构建文件对应一个项目。标签时构建文件的根标签。它可以有多个内在属性:
(1) default表示默认的运行目标,这个属性是必须的。
(2) basedir表示项目的基准目录。
(3) name表示项目名。
(4) description表示项目的描述。
每个构建文件都对应于一个项目,但是大型项目经常包含大量的子项目,每一个子项目都可以有自己的构建文件。
target 标签 一个项目标签下可以有一个或多个target标签。一个target标签可以依赖其他的target标签。例如,有一个target用于编译程序,另一个target用于声称可执行文件。在生成可执行文件之前必须先编译该文件,因策可执行文件的target依赖于编译程序的target。Target的所有属性如下。
(1).name表示标明,这个属性是必须的。
(2).depends表示依赖的目标。
(3)if表示仅当属性设置时才执行。
(4)unless表示当属性没有设置时才执行。
(5)description表示项目的描述。
Ant的depends属性指定了target的执行顺序。Ant会依照depends属性中target出现顺序依次执行每个target。在执行之前,首先需要执行它所依赖的target。程序中的名为run的target的depends属性compile,而名为compile的target的depends属性是prepare,所以这几个target执行的顺序是prepare->compile->run。
一个target只能被执行一次,即使有多个target依赖于它。如果没有if或unless属性,target总会被执行。
mkdir 标签 该标签用于创建一个目录,它有一个属性dir用来指定所创建的目录名,其代码如下:
<mkdir dir=”${class.root}”/>
<!-- 通过这个代码就创建了一个目录,这个目录已经被前面的property标签所指定 -->
jar 标签 该标签用来生成一个JAR文件,其属性如下。
(1) destfile表示JAR文件名。
(2) basedir表示被归档的文件名。
(3) includes表示别归档的文件模式。
(4) exchudes表示被排除的文件模式。
javac 标签 该标签用于编译一个或一组java文件,其属性如下。
(1).srcdir表示源程序的目录。
(2).destdir表示class文件的输出目录。
(3).include表示被编译的文件的模式。
(4).excludes表示被排除的文件的模式。
(5).classpath表示所使用的类路径。
(6).debug表示包含的调试信息。
(7).optimize表示是否使用优化。
(8).verbose 表示提供详细的输出信息。
(9).fileonerror表示当碰到错误就自动停止。
java 标签 该标签用来执行编译生成的.class文件,其属性如下。
(1).classname 表示将执行的类名。
(2).jar表示包含该类的JAR文件名。
(3).classpath所表示用到的类路径。
(4).fork表示在一个新的虚拟机中运行该类。
(5).failonerror表示当出现错误时自动停止。
(6).output 表示输出文件。
(7).append表示追加或者覆盖默认文件。
delete 标签 该标签用于删除一个文件或一组文件,去属性如下。
(1)/file表示要删除的文件。
(2).dir表示要删除的目录。
(3).includeEmptyDirs 表示指定是否要删除空目录,默认值是删除。
(4).failonerror 表示指定当碰到错误是否停止,默认值是自动停止。
(5).verbose表示指定是否列出所删除的文件,默认值为不列出。
参考内容:《build.xml解析》
5. 思考总结
- 项目工程下的build.xml使用import操作将android sdk/tools/ant/build.xml导入,编译apk
- 可自己写build.xml中打包apk的命令,参考:《android打包过程》