一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Android及Robotium備忘

 liuchangxin81 2014-09-15

1. 需要設(shè)置的環(huán)境變量

ANDROID_HOME=D:\Android\android-sdks

ANDROID_SDK_HOME=D:\Android\avd

JAVA_HOME= C:\Program Files\Java\jdk1.7.0_05

CLASSPATH=.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;

PATH=...;(追加)%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%JAVA_HOME%\bin;%CLASSPATH%

注意,環(huán)境設(shè)置后重啟電腦才生效。

如果知道環(huán)境變量是否生效?例如查看ANDROID_HOME環(huán)境變量的設(shè)置,開(kāi)始->運(yùn)行->cmd,在cmd下面輸入echo % ANDROID_HOME%,如果與我們預(yù)期的一致就說(shuō)明生效了。如果原樣輸出% ANDROID_HOME%就說(shuō)明環(huán)境變量未生效,需要重啟操作系統(tǒng)。

詳細(xì)說(shuō)明如下

1.1         ANDROID_HOME

ANDROID_HOME= D:\Android\android-sdks,指定sdk包含的位置,什么是sdk?網(wǎng)上去搜,簡(jiǎn)單點(diǎn)說(shuō)就是里面要包含AVD ManagerSDK Manager:

Android及Robotium學(xué)習(xí)總結(jié)【環(huán)境變量,真機(jī)調(diào)試及根據(jù)id模擬按鍵】

同時(shí),eclipse也要設(shè)置SDK的位置,最好和ANDROID_HOME設(shè)置一樣,如下

Android及Robotium學(xué)習(xí)總結(jié)【環(huán)境變量,真機(jī)調(diào)試及根據(jù)id模擬按鍵】

1.2         ANDROID_SDK_HOME

ANDROID_SDK_HOME設(shè)置的是avd的路徑,一般默認(rèn)在用戶路徑下,例如C:\Users\tanggod\.android, SD卡的空間都是從這里分配的??梢耘驳狡渌夸浵?,需要在環(huán)境變量里面設(shè)置如下:

ANDROID_SDK_HOME=D:\Android\avd

如此設(shè)置后(重啟電腦讓環(huán)境變量生效 ),以后創(chuàng)建的AVD就會(huì)在我們指定的目錄下了:

Android及Robotium學(xué)習(xí)總結(jié)【環(huán)境變量,真機(jī)調(diào)試及根據(jù)id模擬按鍵】

1.3         JAVA_HOME

JDK,JAVA_HOME必須設(shè)置jdk安裝的目錄,例如:

 JAVA_HOME= C:\Program Files\Java\jdk1.7.0_05

C:\Program Files\Java\jdk1.7.0_05

查看JDK版本號(hào)?在cmd下面輸入:Java -version

 Android及Robotium學(xué)習(xí)總結(jié)【環(huán)境變量,真機(jī)調(diào)試及根據(jù)id模擬按鍵】

PS:1.7jdk似乎還很不穩(wěn)定,有問(wèn)題,建議用1.6的。

jdk下載位置:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

 1.4         CLASSPATH

classpath環(huán)境變量,是當(dāng)我們?cè)陂_(kāi)發(fā)java程序時(shí)需要引用別人寫(xiě)好的類(lèi)時(shí),要讓java解釋器知道到哪里去找這個(gè)類(lèi)。通常,sun為我們提供了一些額外的豐富的類(lèi)包,一個(gè)是dt.jar,一個(gè)是tools.jar,這兩個(gè)jar包都位于C:\jdk1.6.0\lib目錄下,所以通常我們都會(huì)把這兩個(gè)jar包加到我們的classpath環(huán)境變量中set classpath=.;C:\jdk1.6.0\lib\tools.jar;C:\jdk1.6.0\lib\dt.jar。在系統(tǒng)環(huán)境變量那一欄中點(diǎn)->新建classpath 
         
變量名:classpath 
         
變量值:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;(注意,CLASSPATH最前面是有個(gè)“.”的,表示當(dāng)前目錄,這樣當(dāng)我們運(yùn)行java AClass的時(shí)候,系統(tǒng)就會(huì)先在當(dāng)前目錄尋找AClass文件了。);

1.5         PATH

環(huán)境變量PATH設(shè)置的時(shí)候,注意是追加,不能將已有的內(nèi)容清空了。

PATH = %ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%JAVA_HOME%\bin;%CLASSPATH%

主要設(shè)置的是adb.exeemulator的位置(在tools或者platform-tools目錄中),已經(jīng)jdk工具的路徑等等。

2.   如何簽名Sign

Android系統(tǒng)要求每一個(gè)Android應(yīng)用程序必須要經(jīng)過(guò)數(shù)字簽名才能夠安裝到系統(tǒng)中,也就是說(shuō)如果一個(gè)Android應(yīng)用程序沒(méi)有經(jīng)過(guò)數(shù)字簽名,是沒(méi)有辦法安裝到系統(tǒng)中的!

為了方便我們開(kāi)發(fā)調(diào)試程序,ADT會(huì)自動(dòng)的使用debug密鑰為應(yīng)用程序簽名。debug密鑰?它在哪?debug密鑰是一個(gè)名為debug.keystore的文件,它的位置: Ubuntu: ~/.android/debug.keystore win7c:/user/.Android/debug.keystore;  xp: C:/Documents and Settings/user/.Android/debug.keystore),user對(duì)應(yīng)于你自己的windows操作系統(tǒng)用戶名,這也就意味著,如果我們想擁有自己的簽名,而不是讓ADT幫我們簽名的話,我們也要有一個(gè)屬于自己的密鑰文件(*.keystore

Robotium做黑盒測(cè)試的時(shí)候,需要對(duì)待測(cè)試的apk去除簽名,然后自己再簽名。google網(wǎng)站上有個(gè)簽名工具叫做re-sign.jar,比較傻瓜化,直接將apk拖入到re-sign.jar中后自動(dòng)去除簽名,重新再簽名;很多人都建議用這個(gè)工具。我剛開(kāi)始也用這個(gè),可是發(fā)現(xiàn)用這個(gè)工具處理后,無(wú)論是android模擬器還是真機(jī),都裝不上,提示沒(méi)有簽名。

我將apk解開(kāi)看,確實(shí)是有簽名的。

查看簽名:

jarsigner -verify -verbose -certs D:\Android\apk\02-AndroidCalculator-sign.apk

 

所以后來(lái),我就手工用命令行來(lái)簽名。手工簽名之前,首先需要去除原來(lái)簽名的信息,去除方法很簡(jiǎn)單。就是將apk文件后綴改為.zip,然后從winrar中刪除META-INF文件夾,刪除后重新將文件名改成apk的后綴,這樣就去除簽名了。然后用下面的命令進(jìn)行簽名。

注意下面黃色高亮和灰色高亮的字,需要根據(jù)自己的debug.keystore的位置,和待簽名apk的位置進(jìn)行設(shè)置。 

簽名AndroidCalculator

> jarsigner -keystore D:\Android\avd\.android\debug.keystore -storepass android -keypass android D:\Android\apk\02-AndroidCalculator-unsign.apk androiddebugkey

> zipalign 4 D:\Android\apk\02-AndroidCalculator-unsign.apk D:\Android\apk\02-AndroidCalculator-sign.apk

 zipalign能夠使apk文件中未壓縮的數(shù)據(jù)在4個(gè)字節(jié)邊界上對(duì)齊(4個(gè)字節(jié)是一個(gè)性能很好的值)

例如簽名Plingm

>jarsigner -keystore D:\Android\avd\.android\debug.keystore -storepass android -keypass android D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkandroiddebugkey

> zipalign 4 D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkD:\Android\apk\plingm\com.freephoo.android_1180-sign.apk

 對(duì)于jdk 1.7版本,簽名稍有區(qū)別,需要加上參數(shù):-digestalg SHA1 -sigalg MD5withRSA,例如

 

>jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore D:\Android\avd\.android\debug.keystore -storepass android -keypass android D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkandroiddebugkey

> zipalign 4 D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkD:\Android\apk\plingm\com.freephoo.android_1180-sign.apk

簽名后如何安裝到模擬器中?命令如下

>emulator -avd android4.1

>adb install D:\Android\apk\plingm\com.freephoo.android_1180-sign.apk

 如果是安裝到真機(jī)中,就不需要上面第一條命令啟動(dòng)模擬器了,直接usb連接上手機(jī),執(zhí)行adb install即可。

 

在進(jìn)行黑盒測(cè)試之前,需要知道待測(cè)試apk的包及activity信息。查看某個(gè)apkpackage name,可以用aapt看:

platform-tools目錄下使用如下命令aapt dump badging XXX.apk

aapt dump badgingD:\Android\apk\plingm\com.freephoo.android_1180-sign.apk

 也可以用re-sign.jar看,結(jié)果如下:package: name='com.freephoo.android'

 Android及Robotium學(xué)習(xí)總結(jié)【環(huán)境變量,真機(jī)調(diào)試及根據(jù)id模擬按鍵】

3.   真機(jī)調(diào)試

  •   設(shè)置android手機(jī)為USB調(diào)試模式。步驟: menu---> 設(shè)置 ---> 應(yīng)用程序 ---> 開(kāi)發(fā) , 選擇【USB調(diào)試】 

  • USB連接手機(jī)和電腦,并確保成功。步驟: windows下執(zhí)行c:/adb devices 查看手機(jī)是否已經(jīng)連接成功。

連接不成功:

Android及Robotium學(xué)習(xí)總結(jié)【環(huán)境變量,真機(jī)調(diào)試及根據(jù)id模擬按鍵】
連接成功
Android及Robotium學(xué)習(xí)總結(jié)【環(huán)境變量,真機(jī)調(diào)試及根據(jù)id模擬按鍵】

  • 設(shè)置應(yīng)用程序?yàn)檎{(diào)試模式(這個(gè)似乎不要也可以)。操作: 編輯AndroidManifest.xml 增加調(diào)試參數(shù)android:debuggable="true", 如下:

    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">

  • 查看具體異常信息:

執(zhí)行:./adb logcat 可以查看到更多的系統(tǒng)異常消息。在這些消息中要注意查看Caused by: 頭的行,這些行指明了在哪行代碼出的錯(cuò)誤

4.   已知控件id,如何模擬按鍵

我們知道,android每個(gè)控件都有一個(gè)類(lèi)似R.id.xxxx字符串id。在做白盒測(cè)試的時(shí)候,將被測(cè)試的代碼包import一下,直接調(diào)用R.id.xxxx就可以了。

但是在黑盒測(cè)試的時(shí)候,我們只有apk,沒(méi)有源代碼,怎么獲取控件的id呢?

java已經(jīng)給我們提供了這個(gè)工具。只需要在cmd下面輸入hierarchyviewer即可調(diào)出控件查看工具(如果cmd不認(rèn)識(shí)你的hierarchyviewer,說(shuō)明你的環(huán)境變量沒(méi)有配置正確)

 Android及Robotium學(xué)習(xí)總結(jié)【環(huán)境變量,真機(jī)調(diào)試及根據(jù)id模擬按鍵】

選中需要查看的應(yīng)用,點(diǎn)擊:"Load View Hierarchy"

如下id/后面的"Button01"即為buttonid。
Android及Robotium學(xué)習(xí)總結(jié)【環(huán)境變量,真機(jī)調(diào)試及根據(jù)id模擬按鍵】

 
好了,已知控件的id,在Robotium中如何模擬按鍵呢?這里常用的有2種方法:

1. 根據(jù)button上面的文字。這個(gè)很簡(jiǎn)單,直接solo.clickOnButton("Multiply");即可。

2. 根據(jù)控件的坐標(biāo)。hierarchyviewer是可以查看每個(gè)點(diǎn)的坐標(biāo)的。但是使用起來(lái)不是很直觀,尤其是對(duì)不同分辨率屏幕的手機(jī)時(shí),使用起來(lái)可能還存在兼容性問(wèn)題。

 

如果控件上沒(méi)有文字,clickOnButton就用不了,例如很多應(yīng)用用圖片作為button的說(shuō)明,clickOnButton就不奏效。用坐標(biāo)又很麻煩不直觀??煞裼每丶?/span>id呢?

怎么用id,我也糾纏這個(gè)問(wèn)題好幾天,網(wǎng)上中文資料搜不到,搜英文,英文搜不到換關(guān)鍵字搜,始終找不到一個(gè)比較完整的使用說(shuō)明。我只好自己一個(gè)個(gè)命令的試,搞了2天總算找到一個(gè)方法,這個(gè)方法對(duì)于java高手可能不值一提,但對(duì)我從未用過(guò)java的人來(lái)說(shuō),確實(shí)費(fèi)了不少周折。

我的方法如下,先獲取到控件的view

solo.getCurrentActivity().getResources().getIdentifier,

然后再用solo.clickOnView即可。

 

我在使用的時(shí)候,簡(jiǎn)單的封裝了下,封裝函數(shù)如下:

 Android及Robotium學(xué)習(xí)總結(jié)【環(huán)境變量,真機(jī)調(diào)試及根據(jù)id模擬按鍵】

private int clickCtrlById(String s, int t ){

     intctrl;

     View v;


     if( s == ""){

          return -1;

     }

     ctrl = solo.getCurrentActivity().getResources().getIdentifier(s,"id",TARGET_PACKAGE_ID);

    

     v = solo.getView(ctrl);

     solo.clickOnView(v);

     solo.sleep(t);        

     return 0;

}

    

例如已知某個(gè)控件的id(字符串格式)為"btn_dialpad_5",調(diào)用方法如下:

clickCtrlById("btn_dialpad_5",400);

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多

    亚洲av又爽又色又色| 亚洲香艳网久久五月婷婷| 日韩欧美综合中文字幕| 精品女同一区二区三区| 自拍偷拍一区二区三区| 五月婷婷六月丁香狠狠| 暴力性生活在线免费视频| 国产麻豆一线二线三线| 日本不卡在线一区二区三区| 亚洲av专区在线观看| 亚洲清纯一区二区三区| 亚洲一区二区欧美激情| 一级片黄色一区二区三区| 不卡中文字幕在线免费看| 国产精品欧美在线观看| 欧美乱码精品一区二区三| 亚洲中文字幕熟女丝袜久久| 亚洲国产成人一区二区在线观看| 亚洲综合日韩精品欧美综合区| 欧美一级特黄大片做受大屁股| 亚洲综合色婷婷七月丁香| 久久碰国产一区二区三区| 99热九九在线中文字幕| 久久永久免费一区二区| 国产精品人妻熟女毛片av久| 日韩免费国产91在线| 欧美精品亚洲精品一区| 国产三级不卡在线观看视频| 中文字幕日韩欧美亚洲午夜 | 丰满少妇被猛烈插入在线观看| 精品少妇一区二区三区四区| 亚洲伦理中文字幕在线观看| 午夜久久精品福利视频| 亚洲午夜av一区二区| 欧美午夜视频免费观看| 激情亚洲一区国产精品久久| 国产精品欧美一区二区三区| 亚洲香艳网久久五月婷婷| 中国日韩一级黄色大片| 精品日韩av一区二区三区| 大胆裸体写真一区二区|