Android开发、测试持续集成环境Jenkins搭建
来源:互联网 发布:广西网络教育 编辑:程序博客网 时间:2024/04/30 07:17
传统java项目开发都会利用maven、ant在hudson、jenkins中持续集成,开发、测试、每日构建,保证代码质量。maven默认不支持android,但是我们可以利用maven-android-plugin插件来让maven支持android。
环境
- jdk 1.6及以上
- Android sdk(r21及以上),最好是最高版本,最好也安装一下ndk
- Maven 3.0.3及以上,貌似3.1.0不好使,最好使用3.0.5版
设置ANDROID_HOME环境变量,将$ANDROID_HOME/tools、$ANDROID_HOME/platform-tools加入到环境变量中
测试环境
下载示例程序,通过跑这些程序,可以检测环境是否OK,并且下载maven需要的jar包。示例程序
使用Maven进行Android开发
新建MAVEN ANDROID项目
具体命令参考此处
手动创建MAVEN ANDROID项目
有些是历史项目,也可以手动将其改成maven项目,方法如下:
- 新建pom.xml文件,拷贝其他maven项目的也可。
- 修改<groupId>,<artifactId>,<name>
- 修改<version>,默认是<version>0.1.0-SNAPSHOT</version>
- 增加android jar包依赖:
<dependency> <groupId>com.google.android</groupId> <artifactId>android</artifactId> <version>1.5_r4</version> <scope>provided</scope></dependency>
可在此处查看android所有版本
5. 在android-maven-plugin配置中,配置android platform的版本,如
<platform>7</platform>
6. 可以删除build.xml、build.properties、bin和libs。
7. 打apk包mvn clean install
,将apk包安装到设备中mvn android:deploy
示例pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.yeetrack</groupId> <artifactId>parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <properties> <project.build.sourceEncoding>utf-8</project.build.sourceEncoding> <maven.compiler.encoding>utf-8</maven.compiler.encoding> <platform.version>4.1.1.4</platform.version> <android.plugin.version>3.6.0</android.plugin.version> </properties> <groupId>com.yeetrack</groupId> <artifactId>app</artifactId> <version>1.0-SNAPSHOT</version> <packaging>apk</packaging> <name>app</name> <dependencies> <dependency> <groupId>com.google.android</groupId> <artifactId>android</artifactId> <version>4.1.1.4</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.google.android</groupId> <artifactId>support-v4</artifactId> <version>r7</version> </dependency> </dependencies><!-- 配置pmd、findbugs --><reporting><plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>findbugs-maven-plugin</artifactId> <version>2.5</version> <configuration> <xmlOutput>true</xmlOutput> <effort>Max</effort> </configuration> </plugin></plugins>
<build> <finalName>${project.artifactId}</finalName> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <version>3.6.1</version> <configuration> <sdk><platform>16</platform></sdk> <manifest> <debuggable>true</debuggable> </manifest> </configuration> <!--<executions> <execution> <goals> <goal>ndk-build</goal> </goals> <configuration> <attachNativeArtifacts>true</attachNativeArtifacts> </configuration> </execution> </executions>--> <extensions>true</extensions> </plugin> </plugins> </build>
使用Maven进行Android单元测试
使用下面命令可以直接新建一个带有单元测试的Android项目:
mvn archetype:generate \ -DarchetypeArtifactId=android-with-test \ -DarchetypeGroupId=de.akquinet.android.archetypes \ -DarchetypeVersion=1.0.11 \ -DgroupId=com.foo.bar \ -DartifactId=my-android-project \ -Dpackage=com.foo.bar.android
我们只需要修改其中的pom.xml文件即可。示例文件如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.yeetrack</groupId> <artifactId>parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>com.yeetrack</groupId> <artifactId>test</artifactId> <version>1.0-SNAPSHOT</version> <packaging>apk</packaging> <name>Tests</name><dependencies> <dependency> <groupId>com.google.android</groupId> <artifactId>android-test</artifactId> <scope>provided</scope> </dependency> <!--需要依赖开发代码打出的apk包--> <dependency> <groupId>com.yeetrack</groupId> <artifactId>app</artifactId> <type>apk</type> <version>1.0-SNAPSHOT</version> <scope>provided</scope> </dependency> <!--需要依赖开发代码打出的jar包--> <dependency> <groupId>com.yeetrack</groupId> <artifactId>app</artifactId> <type>jar</type> <version>1.0-SNAPSHOT</version> <scope>provided</scope> </dependency></dependencies><build> <finalName>${project.artifactId}</finalName> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <configuration> <test> <!--<skip>true|false|auto</skip> --> <!--<instrumentationPackage>packageName</instrumentationPackage> --> ` <!--<instrumentationRunner>className</instrumentationRunner> --> <!--<debug>true|false</debug> --> <!--<coverage>true|false</coverage> --> <!--<logonly>true|false</logonly> avd --> <!--<testsize>small|medium|large</testsize> --> <createReport>true</createReport> <!--<classes> --> <!--<class>your.package.name.YourTestClass</class> --> <!--</classes> --> <!--<packages> --> <!--<package>your.package.name</package> --> <!--</packages> --> </test> </configuration> <extensions>true</extensions> </plugin> </plugins></build>
Google官方提供Android单元测试的方法,需要继承ActivityInstrumentationTestCase2
这个类,
单元测试代码示例,如下(因为我们引用了app构造的apk和jar包,所以我们能够在测试代码中直接引用开发代码):
package com.yeetrack.test; import com.yeetrack.app.LoginActivity; import com.yeetrack.app.R; import android.test.ActivityInstrumentationTestCase2; import android.test.UiThreadTest; import android.widget.Button; import android.widget.EditText; /** * @author victor * app UI登陆界面测试 */ public class LoginActivityTest extends ActivityInstrumentationTestCase2<LoginActivity> { /** * 登陆界面的activity */ private LoginActivity loginActivity; /** * 用户账号输入框 */ private EditText usernameEditText; /** * 用户密码输入框 */ private EditText passwordEditText; /** * 提交按钮 */ private Button submitButton; public LoginActivityTest() { super(LoginActivity.class); } @Override protected void setUp() throws Exception { // TODO Auto-generated method stub super.setUp(); loginActivity = getActivity(); usernameEditText = (EditText) loginActivity.findViewById(R.id.username); passwordEditText = (EditText) loginActivity.findViewById(R.id.password); submitButton = (Button) loginActivity.findViewById(R.id.loginButton); } //需要在主线程中执行,android禁止在其他线程中操作主线程的控件 @UiThreadTest public void testAppActivity() { assertNotNull(loginActivity); assertNotNull(usernameEditText); assertNotNull(passwordEditText); assertNotNull(submitButton); usernameEditText.setText("Victor Wang"); passwordEditText.setText("password"); submitButton.performClick(); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } @Override protected void tearDown() throws Exception { // TODO Auto-generated method stub super.tearDown(); } }
使用Maven进行Android功能测试
Android功能测试工具很多,这里用Robotium,pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yeetrack</groupId> <artifactId>Robotium</artifactId> <version>1.0-SNAPSHOT</version> <packaging>apk</packaging> <name>Baidutx Robotium</name> <description>http://www.yeetrack.com</description> <parent> <groupId>com.yeetrack</groupId> <artifactId>parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <platform.version>4.1.1.4</platform.version> </properties> <dependencies> <dependency> <groupId>com.jayway.android.robotium</groupId> <artifactId>robotium-solo</artifactId> <version>4.3</version> </dependency> <dependency> <groupId>com.google</groupId> <artifactId>android</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/android.jar</systemPath> </dependency> <dependency> <groupId>com.yeetrack</groupId> <artifactId>app</artifactId> <type>apk</type> <version>1.0-SNAPSHOT</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.yeetrack</groupId> <artifactId>app</artifactId> <type>jar</type> <version>1.0-SNAPSHOT</version> <scope>provided</scope> </dependency> </dependencies> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <version>3.6.1</version> <configuration> <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile> <assetsDirectory>${project.basedir}/assets</assetsDirectory> <resourceDirectory>${project.basedir}/res</resourceDirectory> <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory> <sdk> <platform>17</platform> </sdk> <undeployBeforeDeploy>true</undeployBeforeDeploy> </configuration> <extensions>true</extensions> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <encoding>UTF-8</encoding> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> </project>
添加Parent项目
将上述项目放在parent文件夹中,并在parent创建pom.xml,这样运行parent的pom.xml即可。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yeetrack</groupId> <artifactId>parent</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <name>Parent</name> <modules> <module>app</module> <module>test</module> <module>robotium</module> </modules> <properties> <platform.version> 4.1.1.4</platform.version> <android.plugin.version>3.6.0</android.plugin.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>com.google.android</groupId> <artifactId>android</artifactId> <version>${platform.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.google.android</groupId> <artifactId>android-test</artifactId> <version>${platform.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement> <build> <pluginManagement> <plugins> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <version>${android.plugin.version}</version> <configuration> <sdk> <platform>16</platform> </sdk> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> </plugin> </plugins> </pluginManagement> </build> </project>
- Android开发、测试持续集成环境Jenkins搭建
- !!!Android开发、测试持续集成环境Jenkins搭建
- 如何搭建Jenkins持续集成测试环境
- Jenkins+Docker搭建持续集成测试环境
- Jenkins+Docker搭建持续集成测试环境
- Jenkins+Docker搭建持续集成测试环境
- Jenkins+Docker搭建持续集成测试环境
- Jenkins+RobotFramework持续集成测试-jenkins环境搭建
- Jenkins持续集成环境搭建
- 搭建 Jenkins 持续集成环境
- Jenkins 搭建持续集成环境
- 【软件开发实践】基于 Jenkins 快速搭建持续集成环境
- Maven-sonarqube-jenkins-git 持续集成开发环境的搭建
- Jenkins搭建持续集成环境搭建
- 基于 Jenkins 快速搭建持续集成环境
- jenkins下搭建c++持续集成环境
- 基于 Jenkins 快速搭建持续集成环境
- 基于 Jenkins 快速搭建持续集成环境
- 如果在安装32位oracle 客户端组件时的情况下以64位模式运行,将出现问题
- STM32 IAP
- Linux Cgroups详解(一)
- Qt - 让VC2012生成的程序支持XP系统
- How to learn js properly(week4)使用js建立的动态测试网页
- Android开发、测试持续集成环境Jenkins搭建
- Android RemoteViews的实现方式
- VC6下使用MFC开发视频监控控件
- Linux Cgroups详解(二)
- 全球照片墙
- css中font的简写方法(包括font-weight,font-size,line-height,font-family)
- 使用jquery.qrcode生成二维码
- mount ,mkfs 工具详细说明(ext4,xfs)
- iOS UITableView 局部刷新