基于Orange的安卓UI自动化学习笔记(六)

图片 25

配置环境变量这个东西应该要烂在程序猿,基本上Windows或者Mas
osx还是Linux都有固定的配置方式,我们在使用任何软件都是基于系统这个最高层的应用程序上的,前面笔者已经介绍过如何在Max
os配置java环境变量,这里不再赘述。

  1.  Flex SDK Ant

上一篇主要介绍了jenkins:真机换成模拟器,我们将真机换成模拟器,使得操作更简单,进一步完善安卓UI自动化持续集成的自动化。其实做到这里,基本的基于orange的安卓UI自动化工程已经建立完备了,完全可以实现线上监控APP的UI层面的稳定性情况。如果我们不想只是检测已发布的apk的稳定性,而是想在开发过程中实时编译、打包成apk进行UI层面的监控的话,就需要进行本章的进阶jenkins设置了。
关于安卓UI自动化学习,我的学习路线是这样安排的:
(一)本地:能够独立完成一个UI自动化工程的建立
(二)本地:命令行执行UI自动化测试用例
(三)本地:ant打包测试工程apk+执行UI自动化用例一体化
(四)jenkins:持续集成平台成功构建UI自动化工程
(五)jenkins:真机换成模拟器
(六)jenkins:持续集成平台实现被测apk自动打包编译+自动化一体化
(七)UI自动化用例编写语法和规范
本章内容就是第六部分,jenkins:持续集成平台实现被测apk自动打包编译+自动化一体化

计算机->右键->属性

     
 Flex开发者会遇到很多,比如自动构建,在一个有着N多模块,N处源码,构建过程复杂的Flex项目开发中,依赖人力手工构建项目非常不现实(机械重复且枯燥无味的过程,相信哪位开发人员都会避之唯恐不及,而且对于人力是非常大的浪费),而通过使用Ant,我们可以将这些工作交给机器来做,机器最适合干的就是这些程序固定,顺次执行的工作,而且不辞辛苦,又快又好

一、设置环境变量

我们这里使用ant打包,在jenkins的job配置里,选择构建的选项为Execute
Shell,命令框里首先输入对jenkins环境变量的设置。设置ant运行地址并加入path,设置android-sdk安装地址并将tools和platform-tools都加入path。

图片 1

图片 2

1.1.     Ant简介

     
 Ant是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make,但没有make的缺陷。目前的最新版本为:Ant

-1.9.0。

既然我们已经有了make、gnumake、nmake、jam以及其他的build工具为什么还要要一种新的build工具呢?因为Ant的原作者在多种(硬件)平台上开发软件时,无法忍受这些工具的限制和不便。类似于make的工具本质上是基于shell(语言)的:他们计算依赖关系,然后执行命令(这些命令与你在命令行敲的命令没太大区别)。这就意味着你可以很容易地通过使用OS特有的或编写新的(命令)程序扩展该工具;然而,这也意味着你将自己限制在了特定的OS,或特定的OS类型上,如Unix。

     
 Ant就不同了。与基于shell命令的扩展模式不同,Ant用Java的类来扩展。(用户)不必编写shell命令,配置文件是基于XML的,通过调用target树,就可执行各种task。每个task由实现了一个特定Task接口的对象来运行。

*        简言之:*当一个代码项目大了以后,每次重新编译,打包,测试等都会变得非常复杂而且重复,因此C语言中有MAKE脚本来帮助这些工作的批量完成。在JAVA中应用是平台无关性的,当然不会用平台相关的MAKE脚本来完成这些批处理任务了,ANT本身就是这样一个流程脚本引擎,用于自动化调用程序完成项目的编译,打包,测试等。除了基于JAVA是平台无关的外,脚本的格式是基于XML的,比MAKE脚本来说还要好维护一些。

二、拉取被测APP代码并打包

设置好环境变量后,我们就需要从代码仓库(SVN或者Git)把开发的代码拉取下来并进行打包。

图片 3

除了配置环境变量的几句指令,关键的指令及其分析如下:

(1)svn co的命令就是从svn地址上把被测试APP的开发代码拉取下来。
(2)接下来的cd命令主要是打开本job所在的本地目录。这里注意windows系统的目录表达方式是用\分割。通常情况下job的默认存放目录是C:Usershzsuixiang.jenkinsworkspaceYourJobName目录下,但是这里我设置job存放路径为E盘自己的路径下。如何设置job存放路径,可参考教程。
(3)接下来看起来简单的ant指令其实执行了复杂的打包过程。只不过所有的任务都在build.xml中组织好了。在执行dx命令,将class文件转换成.dex文件时,产生了class.dex和classes2.dex两个文件,还要有一步将classes2.dex文件打到apk里。
(4)最后的aapt命令就是将classes2.dex文件打到apk里。

定义系统变量ANT_HOME

1.2.   获取Flex SDK

 Adobe发布了Flash Builder 4.5 (包含Flex SDK
4.5,点击这里查看新闻报道)
和 Adobe
CS5.5(下载地址请登录Adobe官网,这里是相关学习资料)。新版IDE的重点是针对移动应用开发的支持(Android,iOS等等),不过,这些不是文本要探讨的内容。让我们从Flex
SDK着手,了解一些Flex的内在机制和对企业级开发的支持,这也有助于我们更好的理解Flex这门技术。

首先,从哪里可以获取Flex SDK?最简单最直接的方式,就是安装Flash
Builder(以下简称FB),当您安装完毕,可以打开FB的安装位置,目录sdks下面,就是目前比较常用的Flex
SDK版本。具体位置因您的安装选择而异,比如笔者的路径是:C:Program Files
(x86)AdobeAdobe Flash Builder 4.6sdks。因为笔者安装的是FB
4.5,所以目录中实际上包含了两个版本的SDK:3.6和4.6

如果您安装的是FB4.0,则看到的最新SDK版本应该是4.0或4.1。而那个比较老的3.6版本,主要是为了兼容之前的Flex3项目(如果您有比较老版本的项目,而且不打算做代码变更,那么3.6这个版本的SDK是必须的)。本文的探讨将以最新的SDK,也就是4.5为准。

        打开SDK目录,让我们看看SDK中都包含了哪些内容:

图片 4

图片 5  ant包含Flex对Ant的支持库,JAR和Java源码都有,方便我们基于Ant完成对项目的构建

图片 6  asdoc基于ASDOC我们可以很方便的生成代码说明文档,这个目录则包含了对ASDOC的模板支持(调用asdoc的时候,所依赖的HTML模板文件就存放在这个目录),以及一个用于Ant构建的示意XML配置文件,仔细浏览这个目录下的文件,就可以对ASDOC有更好的了解。

图片 7  bin按照惯例,我们基本也能猜出这个目录下是什么,没错,就是Flex
SDK中包含的工具集(编译工具,库打包工具,文档生成工具,以及优化工具等等,这些可都是Flex开发所必须的利器),这些工具的具体用法,我们会在后面的文章中介绍。建议您将这个路径配置到系统用户的PATH中,方便通过命令行调用相应的工具。

图片 8  frameworks这个也是重中之重,包含了Flex框架的核心源码(您应该也已经了解到,Flex是基于AS3的一个框架,其底层代码均是由AS3编写的(注:不包含工具集,工具是Java编写)),当您在Flex编程中有疑惑,看一眼源码或许会让您茅塞顿开。

图片 9  include包含了一个用于编写ActionScript扩展的C++头文件:FlashRuntimeExtensions.h,如果您基于AIR做一些嵌入式应用(比如一个电视机),需要实现换台等功能,那就要用C++实现一些ActionScript的扩展。

图片 10  install包含了用于移动开发的Android
USB驱动程序

图片 11  lib开发和编译Flex应用所依赖的类库,打开这个目录您就能发现很多的JAR文件,比如mxmlc.jar,另外您可能已经注意到还有mxmlc_zh_CN.jar,显然这些库大都实现了本地化,方便我们的开发和调试。

图片 12  runtimes包含运行时支持,但没有Flash
Player,只有AIR,包括AIR for Android的APK文件

图片 13  samples一些实例文件,包括用于AIR在线无缝安装的badge,和一些Flex主题。

图片 14  templates包含一些模板文件,比如用于AIR应用描述的XML约束定义文档,swfobject的示例代码等等

2.
 Flex对ANT的支持

下面我们来了解一下Flex对Ant的支持情况。打开Flex
SDK下的Ant目录,会看到下面的文件结构:

图片 15

lib中包含了Flex对Ant的任务支持库:flexTasks.jar,src目录中包含了flexTasks的Java源码,build.xml则是用于构建flexTasks本身的配置文件(如果您修改了flexTask的Java源码,可以用这个配置文件,重新编译,并打包到flexTasks.jar)。

README.txt这个文件则简单描述了如何使用flexTask,笔者已经将它翻译为中文,即README_CN.txt,您可以从本文的页面底部的下载区下载这个文件。

打开MxmlcTask.java,我们可以看到,这就是对mxmlc工具的任务封装,方便我们在Ant中基于配置文件来调用mxmlc实现对Flex项目的编译。

图片 16

 
   

其实Flex的ant是跨平台的。在windos下使用的是mxmlc.exe,而在unix系统下使用的mxmlc。mxmlc就是shell脚本。

  1.  环境搭建

当然,首先您得安装Ant,下载地址:

然后解压,例如我解压到:d:/apache-ant-1.9.0

如果想运行ant方便,最好设置环境变量(添加路径到系统用户Path)

其实也可以直接进入到相应的目录直接执行ant:d:/apache-ant-1.9.0/bin/ant

接着,打开CMD窗口,运行ant
-version,如果能看到正确的输入信息,就代表Ant配置成功了。

然后,将flexTasks.jar这个文件放到您的Ant安装目录中的lib目录中。虽然也可以采取将JAR文件的地址作为一个参数传递给Ant的方法,但为了方便起见,推荐直接拷贝flexTasks.jar的方式。

另外,注意您想使用的构建工具(比如mxmlc或asc)必须包含在您的PATH设置里。将sdk/bin这个目录也配置到Path中,您的Path设置应该类似于下面的:

  1. C:Program Files (x86)Javajdk1.6.0_25bin;D:Program
    FilesAdobeAdobe Flash Builder 4.5sdks4.5.0bin;C:antbin

请输入下面的命令到CMD窗口:mxmlc -version,如果有正确的输出,代表Flex
SDK的路径配置成功。

需要安装JDK、Ant,并设置环境变量;将flexTasks.jar这个文件放到您的Ant安装目录中的lib目录中,并设置环境变量。

将该压缩包解压到一个目录,然后配置环境变量:

set ANT_HOME=E:AutoBuildcommonapache-ant-1.9.0

set path=%path%;%ANT_HOME%bin;

set JAVA_HOME=C:Program FilesJavajdk1.6.0_26

set path=%path%;%JAVA_HOME%bin

set path=%path%; F:flex_sdk_4.1.0.16076bin

运行下面命令成功,表示环境已经搭建好了:

  1.  自动构建

   
使用ant自动构建一个项目时,首先应该编写Ant构建文件。构建文件定义了构建过程,并被团队开发中每个人使用。Ant构建文件默认命名为build.xml,也可以取其他的名字。只不过在运行的时候把这个命名当作参数传给Ant。

三、拉取测试工程代码并执行

图片 17

关键的指令及其分析如下:

(1)svn co的命令就是从svn地址上把被测试工程的代码拉取下来。
(2)接下来的两个cp命令是用被测APP打包时产生的R.java文件和apk文件替换到我们UI工程里。
(3)最后在UI工程目录下执行ant命令执行UI自动化测试脚本。

好了,至此为止,我们就能够实时地将开发代码编译打包并执行UI自动化测试了。

指定变量值“你的ant的安装目录”

3.1.     build.properties文件

创建build.properties,即Ant的变量配置文件,该文件定义了需要用的配置参数。

四、打包时遇到的问题分析

因为之前被测APP在开发那边都是用gradle进行打包的,在对被测APP进行ant打包时遇到了包括编译、分包等的若干问题,总结一下:

图片 18

3.2.     build.xml文件

Ant构建文件是XML文件。每个构建文件定义一个唯一的项目(Project元素)。每个项目下可以定义很多目标(target元素),这些目标之间可以有依赖关系。当执行这类目标时,需要执行他们所依赖的目标。每个目标中可以定义多个任务,目标中还定义了所要执行的任务序列。Ant在构建目标时必须调用所定义的任务。任务定义了Ant实际执行的命令。Ant中的任务可以为3类。

图片 19  核心任务。核心任务是Ant自带的任务。

图片 20  可选任务。可选任务实来自第三方的任务,因此需要一个附加的JAR文件。

图片 21  用户自定义的任务。用户自定义的任务实用户自己开发的任务。

1.编译时报错

编译时出现的问题首先考虑自己使用的jdk版本是否与开发环境相同,根据报错信息,我的jenkins上指定的jdk版本是1.8,而开发环境使用1.7。于是将Jenkins默认的jdk版本改为1.7,编译通过。

跟Java环境变量配置方法一样,如果指定了ant环境变量之后,就可以在cmd命令行下使用ant提供的命令:ant
-version 输出ant当前版本号

<project>标签

每个构建文件对应一个项目。<project>标签时构建文件的根标签。它可以有多个内在属性,就如代码中所示,其各个属性的含义分别如下。

(1) default表示默认的运行目标,这个属性是必须的。

(2) basedir表示项目的基准目录。

(3) name表示项目名。

(4) description表示项目的描述。

每个构建文件都对应于一个项目,但是大型项目经常包含大量的子项目,每一个子项目都可以有自己的构建文件。

2.release时报错

release时报错apkbuild.bat文件找不到。首先在build.xml文件中找到release的target,确认使用到的执行参数是什么。

图片 22

我们看到执行的是${apk-builder}这一参数。然后再在build.xml中找出apk-builder参数的设置,查看其真正执行的脚本文件位置。

图片 23

1.png

而${android-tools}参数在之前设置为本地sdktools的路径,也就是D:AppDataLocalAndroidsdktools(注:这是我的本地sdk路径)。打开这一路径,发现其中真的没有apkbuilder.bat文件,也难怪打包时报错了。sdk更新3.0以后apkbuilder.bat已经被删除了,要想顺利地执行ant打包,可以自己重写一个apkbuilder.bat工具,我是从网上下载了apkbuilder.bat放在D:AppDataLocalAndroidsdktools路径下:

图片 24

这下执行应该没有问题了~
DUANG~报错 “java找不到….”
问题查找了好久,终于确定问题是出在自己的java文件夹命名上了,我的java文件夹命名为java
1.7,就是这个空格成为了找不到java无法顺利进行release的关键原因。这应该也是个小小的坑了,建议以后建立文件夹少写空格中文等这类字符,出错的时候感觉整个世界都不好了~

想查看更多关于ant的命令:ant -help
(注:这个就是学习方法,会告诉我们每个命令的含义)

<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总会被执行。

2.

图片 25

<mkdir>标签

该标签用于创建一个目录,它有一个属性dir用来指定所创建的目录名,其代码如下:<mkdir
dir=”${class.root}”/>通过以上代码就创建了一个目录,这个目录已经被前面的property标签所指定。

这里要说一下笔者为什么要配置ant环境变量,首先我们得知道ant能用来做什么?

<delete>标签

该标签用于删除一个文件或一组文件,去属性如下:

(1).file表示要删除的文件。

(2).dir表示要删除的目录。

(3).includeEmptyDirs 表示指定是否要删除空目录,默认值是删除。

(4).failonerror 表示指定当碰到错误是否停止,默认值是自动停止。

(5).verbose表示指定是否列出所删除的文件,默认值为不列出。

ant是一个用于构建的工具,主要用于Java环境下的软件开发,笔者是做Android开发的,也是基于java环境,熟悉Android
的童鞋可能比较清楚,有太多的应用渠道,如果要每一次都使用Eclipse进行签名打包,这将会是一件噩梦,而使用ant可以帮助我们事先自动化打包,会节省我们的开发时间,提供编译的效率。ant需要构建一个build.xml脚本,通过这个脚本我们可以做的事情很多,但前提是你把这个工具用好。后面笔者会分享学习这个脚本的记录,最后帮助各位不熟悉ant的朋友能很好的用起这个工具来实现自动化打包。

<copy>标签

该标签用于文件或文件集的拷贝,其属性如下。

(1).file 表示源文件。

(2).tofile 表示目标文件。

(3).todir 表示目标目录。

(4).overwrite 表示指定是否覆盖目标文件,默认值是不覆盖。

(5).includeEmptyDirs 表示制定是否拷贝空目录,默认值为拷贝。

(6).failonerror 表示指定如目标没有发现是否自动停止,默认值是停止。

(7).verbose 表示制定是否显示详细信息,默认值不显示。

3.3.     实例

这是使用flex
ant自动构建项目的一个例子。下面通过这个例子来介绍如何编写字段构建文件build.xml、build.properties。Ant自动化脚本完成了以下工作:

图片 26  编译as3项目生成swf

1、首先新建ActionScript项目 testflash,假如项目目录:d:/work/testflash

    图片 27

2、使用ant构建

    1)build.properties文件中定义了以下配置属性

    

# change this to your Flex SDK directory path 注意是斜线,而不是反斜线
FLEX_HOME= C:/Program Files (x86)/Adobe/Adobe Flash Builder 4.6/sdks/3.6.0

# this points to your project's src directory
# {$basedir} is a default variable that can be used in any Ant script
# and it points to the project's root folder
SOURCE_DIR =${basedir}/src

# points to the project's libs directory
LIB_PATH =${basedir}/lib

# this is the folder we want to publish the swf to
DEPLOY_DIR = ${basedir}/bin

# defines the Flex framework files location
FLEX_FRAMEWORK = ${FLEX_HOME}/frameworks/libs

# this property defines the doc directory, which will store your created ASDocs later in the article
DOC_DIR =${basedir}/DOC

# defines the title for your ASDoc pages
#DOC_TITLE ="Your doc title"

# defines the footer for your ASDoc pages
#DOC_FOOTER = "Copyright 2010 My Company"

# points to your asdoc.exe for ASDoc creation later
#asdoc.exe =${FLEX_HOME}/bin/asdoc.exe

#以上内容在build.xml实际内如如下:
#   <property name="FLEX_HOME" value="C:Program Files (x86)AdobeAdobe Flash Builder 4.6sdks3.6.0"/> 
#   <property name="DEPLOY_DIR" location="bin"/> 
#   <property name="SOURCE_DIR" location="src"/> 
#   <property name="LIB_PATH" location="lib"/> 
#   <property name="VERSION" value="1.7.1"/> 

build.xml构建文件,简单生成swf:

<?xml version="1.0" encoding="utf-8"?> 
<!-- 默认执行"build"任务 -->
<project name="TTT" basedir="." default="build"> 
    <!-- load previously defined configuration properties file-->
    <property file="build.properties" />

    <taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" />
    <!-- 执行清理原文档文件夹执行编译flash;然后重新生成文档 -->
     <target name="build">
        <echo>---------------编译flash---------------</echo>
        <!--完成当前构建任务所需的4个调用,首先是清理,如果bin下面有文件,删除掉;-->
        <antcall target="clean"/>
        <antcall target="compile">
            <param name="projectName" value="testflash"/>
        </antcall>

    </target>


    <!--执行清理-->
    <target name="clean"> 
       <delete includeemptydirs="true">
       <fileset dir="${DEPLOY_DIR}" includes="**/*"/>
    </delete>

    </target>
    <!--编译flash-->
    <target name="compile">
        <mxmlc
            file="${SOURCE_DIR}/${projectName}.as"
            output="${DEPLOY_DIR}/${projectName}.swf"
            static-rsls="true"
            accessible="true"
            debug="false">
            <!--设置源代码位置-->
            <source-path path-element="${SOURCE_DIR}"/>
        </mxmlc>
    </target>

</project>

1)把C:/Program Files (x86)/Adobe/Adobe Flash Builder
4.6/sdks/3.6.0/ant/flexTasks.tasks 拷贝到d:/work/testflash,当然可以在build引用绝对路径。

2)build.xml
和build.properties都在放在d:/work/testflash。

3)运行:在cmd下进入到d:/work/testflash,如ant已经设置环境变量了。

 
  直接输入ant就可以了。如果没有设置环境变量,引用绝对路径:d:/apache-ant-1.9.0/bin/ant。

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图