溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Ant如何打包UIAutomator項目用到的第三方JAR包

發布時間:2020-06-07 10:03:09 來源:網絡 閱讀:1226 作者:zhukev 欄目:移動開發

本文章主要描述UIAutomator項目中引用到第三方Jar包的時候,按照正常的打包方式碰到的各種問題,以及最終解決的思路和辦法。

1. 問題起源

在本人的一個示例項目中引用到了單元測試框架hamcrest的jar包,在項目目錄下執行ant build的時候出現以下的問題

Ant如何打包UIAutomator項目用到的第三方JAR包

源碼如下:

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”:Ant如何打包UIAutomator項目用到的第三方JAR包

打開該文件,里面盡是build相關的配置,所以問題很有可能出現在這里。

找到編譯相關的Section,確實沒有看到有指定第三方jar包的classpath:Ant如何打包UIAutomator項目用到的第三方JAR包

2.2 編譯問題解決辦法

那么很自然,我們應該在這里指定我們第三方jar包的classpath,以便ant在build的時候知道從哪里拿到我們的第三方包。

Ant如何打包UIAutomator項目用到的第三方JAR包

我這里的例子是把我項目頂層目錄下的“libs”文件夾包含的jar包都引用進來,該目錄就是我存放第三方jar包的位置。

運行“ant build”,成功!

2.3 運行問題分析

build完成后,滿心歡喜的把編譯好的jar包push到安卓機器上運行,前期運行的沒有問題,但一到調用到第三方Jar包相關API的時候Exception就出來了Ant如何打包UIAutomator項目用到的第三方JAR包

編譯沒有問題,運行時出現問題,那么很有可能就是剛才解決編譯問題的時候只是確保項目在編譯的時候能找到第三方jar包,但是并沒有在編譯后把相應的jar包一并打包到目標jar包里面去。

經過一番google,相信還是build配置的問題,返回”${sdk.dir}/tools/ant/uibuild.xml“, 發現確實打包section沒有看到第三方jar包相應的信息:Ant如何打包UIAutomator項目用到的第三方JAR包

2.4 運行問題解決辦法

根據google提示,最終修改成如下,問題最終解決!

Ant如何打包UIAutomator項目用到的第三方JAR包



 

作者

自主博客

微信

CSDN

天地會珠海分舵

http://techgogogo.com


服務號:TechGoGoGo

掃描碼:

Ant如何打包UIAutomator項目用到的第三方JAR包

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女