概述
本文章主要描述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 <name> -t <android-sdk-ID> -p <path>” 来在项目顶层目录上生成一个build.xml文件,这个文件就ant用来build我们的UIAutomator项目需要用到的配置描述文件。那么很自然我们就会想到去该文件下看是否有把我们需要的jar包给包含进来。
打开该文件查看时,发觉相当精简,并没有太多的东西可看,但是注意到文件末尾引用了我们Android SDK下面的一个文件“${sdk.dir}/tools/ant/uibuild.xml”:
打开该文件,里面尽是build相关的配置,所以问题很有可能出现在这里。
找到编译相关的Section,确实没有看到有指定第三方jar包的classpath:
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提示,最终修改成如下,问题最终解决!
作者 | 自主博客 | 微信 | CSDN |
天地会珠海分舵 | http://techgogogo.com | 服务号:TechGoGoGo 扫描码:
| ©著作权归作者所有:来自51CTO博客作者zhukev的原创作品,如需转载,请注明出处,否则将追究法律责任
ant
jar包
UIAutomator
0 收藏
上一篇:Android自动化测试(UiA...
下一篇:UIAutomator中滚动Li...
猜你喜欢
我的友情链接
最新HTML BroadcastChannel API引荐
Matrix源码分析之第一篇
使用LiveDataBus进行组件通信,让你永无后顾之忧
React Native集成到Android项目当中
面试经历:记一次Android面试
Android:实现模块 api 化
在Android中集成flutter
带你深入理解Android中的自定义属性!!!
程序员笔记|JSBridge框架解决通信问题实现移动端跨平台开发
Java注解实战之APT构建模块化的第一步
怎么让软键盘弹出时,部分控件上移
MVVM 架构与数据绑定库
Android自定义Dialog及与Activity的交互
开发十年,就只剩下这套架构体系了!
Flutter交互实战-即刻App探索页下拉&拖拽效果
Fragments片段
扫一扫,领取大礼包 0
分享
zhukev
|
转载于:https://blog.51cto.com/techgogogo/1608441
最后
以上就是阳光乐曲为你收集整理的Ant如何打包UIAutomator项目用到的第三方JAR包1. 问题起源2. 问题分析解决的全部内容,希望文章能够帮你解决Ant如何打包UIAutomator项目用到的第三方JAR包1. 问题起源2. 问题分析解决所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
Ctrl+Enter 发布
发布
取消