设为首页 加入收藏

TOP

Ant如何打包UIAutomator项目用到的第三方JAR包
2015-07-20 17:37:05 来源: 作者: 【 】 浏览:3
Tags:Ant 如何 打包 UIAutomator 项目 用到 第三方 JAR

本文章主要描述UIAutomator项目中引用到第三方Jar包的时候,按照正常的打包方式碰到的各种问题,以及最终解决的思路和办法。

1. 问题起源

在本人的一个示例项目中引用到了单元测试框架hamcrest的jar包,在项目目录下执行ant build的时候出现以下的问题

\

源码如下:

package majcit.com.UIAutomatorDemo;

import com.android.uiautomator.core.UiDevice;
import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiScrollable;
import com.android.uiautomator.core.UiSelector;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;
import static org.hamcrest.Matchers.*;
import static org.hamcrest.MatcherAssert.assertThat;

public class NotePadTest extends UiAutomatorTestCase {
	
	 public void testDemo() throws UiObjectNotFoundException {  
	        UiDevice device = getUiDevice();
	        device.pressHome();  
	        // Start Notepad
	        UiObject appNotes = new UiObject(new UiSelector().text("Notes")); 
	        appNotes.click();  
	        //Sleep 3 seconds till the app get ready
	        try {  
	            Thread.sleep(3000);  
	        } catch (InterruptedException e1) {  
	            // TODO Auto-generated catch block  
	            e1.printStackTrace();  
	        }  
	        
	        //Evoke the system menu option
	        device.pressMenu();
	        UiObject addNote = new UiObject(new UiSelector().text("Add note"));
	        addNote.click();
	        
	        //Add a new note
	        UiObject noteContent = new UiObject(new UiSelector().className("android.widget.EditText"));
	        noteContent.clearTextField();
	        noteContent.setText("Note 1");
	        device.pressMenu();
	        UiObject save = new UiObject(new UiSelector().text("Save"));
	        save.click();
	        
	        //Find out the new added note entry
	        UiScrollable noteList = new UiScrollable( new UiSelector().className("android.widget.ListView"));  
	        //UiScrollable noteList = new UiScrollable( new UiSelector().scrollable(true)); 
	        UiObject note = null;
	        if(noteList.exists()) {
	        	note = noteList.getChildByText(new UiSelector().className("android.widget.TextView"), "Note1", true);  
	        	//note = noteList.getChildByText(new UiSelector().text("Note1"), "Note1", true); 
	        }
	        else {
	        	note = new UiObject(new UiSelector().text("Note1"));
	        }
	        assertThat(note,notNullValue());
	        
	        note.longClick();
	        
	        UiObject delete = new UiObject(new UiSelector().text("Delete"));
	        delete.click();
	          
	    }  

}

2. 问题分析解决

2.1 编译问题分析

根据上图的错误log,很明显我们在实行ant build的时候ant并没有把需要的第三方jar包加入进去进行编译。

根据上一篇文章《Android自动化测试(UiAutomator)简要介绍》描述,我们在打包UIAutomator项目时会执行一个命令“android create uitest-project -n -t -p ” 来在项目顶层目录上生成一个build.xml文件,这个文件就ant用来build我们的UIAutomator项目需要用到的配置描述文件。那么很自然我们就会想到去该文件下看是否有把我们需要的jar包给包含进来。

打开该文件查看时,发觉相当精简,并没有太多的东西可看,但是注意到文件末尾引用了我们Android SDK下面的一个文件“${sdk.dir}/tools/ant/uibuild.xml”:\

打开该文件,里面尽是build相关的配置,所以问题很有可能出现在这里。<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+1dK1vbHg0uvP4LnYtcRTZWN0aW9uo6zIt8q1w7vT0L+0tb3T0Na4tqi12sj9t71qYXKw/LXEY2xhc3NwYXRoo7o8aW1nIHNyYz0="https://www.cppentry.com/upload_files/article/49/1_7urtn__.jpg" alt="\">

2.2 编译问题解决办法

那么很自然,我们应该在这里指定我们第三方jar包的classpath,以便ant在build的时候知道从哪里拿到我们的第三方包。

\

我这里的例子是把我项目顶层目录下的“libs”文件夹包含的jar包都引用进来,该目录就是我存放第三方jar包的位置。

运行“ant build”,成功!

2.3 运行问题分析

build完成后,满心欢喜的把编译好的jar包push到安卓机器上运行,前期运行的没有问题,但一到调用到第三方Jar包相关API的时候Exception就出来了\

编译没有问题,运行时出现问题,那么很有可能就是刚才解决编译问题的时候只是确保项目在编译的时候能找到第三方jar包,但是并没有在编译后把相应的jar包一并打包到目标jar包里面去。

经过一番google,相信还是build配置的问题,返回”${sdk.dir}/tools/ant/uibuild.xml“, 发现确实打包section没有看到第三方jar包相应的信息:\

2.4 运行问题解决办法

根据google提示,最终修改成如下,问题最终解决!


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UILabel类的用法以及实例化对象的.. 下一篇hdu1686 KMP裸题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·PostgreSQL 索引 - (2025-12-25 22:20:43)
·MySQL Node.js 连接 (2025-12-25 22:20:41)
·SQL 撤销索引、表以 (2025-12-25 22:20:38)
·Linux系统简介 (2025-12-25 21:55:25)
·Linux安装MySQL过程 (2025-12-25 21:55:22)