1.需要設置的環境變數

ANDROID_HOME=D:Androidandroid-sdks

ANDROID_SDK_HOME=D:Androidavd

JAVA_HOME=C:Program FilesJavajdk1.7.0_05

CLASSPATH=.;%JAVA_HOME%lib ools.jar;%JAVA_HOME%libdt.jar;

PATH=...;(追加)%ANDROID_HOME% ools;%ANDROID_HOME%platform-tools;%JAVA_HOME%in;%CLASSPATH%

注意,環境設置後重啟電腦才生效。

如果知道環境變數是否生效?例如查看ANDROID_HOME環境變數的設置,開始->運行->cmd,在cmd下面輸入echo % ANDROID_HOME%,如果與我們預期的一致就說明生效了。如果原樣輸出% ANDROID_HOME%就說明環境變數未生效,需要重啟操作系統。

詳細說明如下

1.1ANDROID_HOME

ANDROID_HOME= D:Androidandroid-sdks,指定sdk包含的位置,什麼是sdk?網上去搜,簡單點說就是裡面要包含AVD Manager和SDK Manager:

同時,eclipse也要設置SDK的位置,最好和ANDROID_HOME設置一樣,如下

1.2ANDROID_SDK_HOME

ANDROID_SDK_HOME設置的是avd的路徑,一般默認在用戶路徑下,例如C:Users anggod.android,SD卡的空間都是從這裡分配的。可以挪到其他目錄下,需要在環境變數裡面設置如下:

ANDROID_SDK_HOME=D:Androidavd

如此設置後(重啟電腦讓環境變數生效 ),以後創建的AVD就會在我們指定的目錄下了:

1.3JAVA_HOME

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

JAVA_HOME= C:Program FilesJavajdk1.7.0_05

C:Program FilesJavajdk1.7.0_05

查看JDK版本號?在cmd下面輸入:Java -version

PS:1.7的jdk似乎還很不穩定,有問題,建議用1.6的。

jdk下載位置:

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

1.4CLASSPATH

classpath環境變數,是當我們在開發java程序時需要引用別人寫好的類時,要讓java解釋器知道到哪裡去找這個類。通常,sun為我們提供了一些額外的豐富的類包,一個是dt.jar,一個是tools.jar,這兩個jar包都位於C:jdk1.6.0lib目錄下,所以通常我們都會把這兩個jar包加到我們的classpath環境變數中set classpath=.;C:jdk1.6.0lib ools.jar;C:jdk1.6.0libdt.jar。在系統環境變數那一欄中點->新建classpath變數名:classpath變數值:.;%JAVA_HOME%lib ools.jar;%JAVA_HOME%libdt.jar;(注意,CLASSPATH最前面是有個「.」的,表示當前目錄,這樣當我們運行java AClass的時候,系統就會先在當前目錄尋找AClass文件了。);

1.5PATH

環境變數PATH設置的時候,注意是追加,不能將已有的內容清空了。

PATH =%ANDROID_HOME% ools;%ANDROID_HOME%platform-tools;%JAVA_HOME%in;%CLASSPATH%

主要設置的是adb.exe和emulator的位置(在tools或者platform-tools目錄中),已經jdk工具的路徑等等。

2.如何簽名Sign

Android系統要求每一個Android應用程序必須要經過數字簽名才能夠安裝到系統中,也就是說如果一個Android應用程序沒有經過數字簽名,是沒有辦法安裝到系統中的!

為了方便我們開發調試程序,ADT會自動的使用debug密鑰為應用程序簽名。debug密鑰?它在哪?debug密鑰是一個名為debug.keystore的文件,它的位置:Ubuntu: ~/.android/debug.keystore(win7:c:/user/.Android/debug.keystore; xp: C:/Documents and Settings/user/.Android/debug.keystore),「user」對應於你自己的windows操作系統用戶名,這也就意味著,如果我們想擁有自己的簽名,而不是讓ADT幫我們簽名的話,我們也要有一個屬於自己的密鑰文件(*.keystore)

用Robotium做黑盒測試的時候,需要對待測試的apk去除簽名,然後自己再簽名。google網站上有個簽名工具叫做re-sign.jar,比較傻瓜化,直接將apk拖入到re-sign.jar中後自動去除簽名,重新再簽名;很多人都建議用這個工具。我剛開始也用這個,可是發現用這個工具處理後,無論是android模擬器還是真機,都裝不上,提示沒有簽名。

我將apk解開看,確實是有簽名的。

查看簽名:

jarsigner -verify -verbose -certsD:Androidapk 2-AndroidCalculator-sign.apk

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

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

簽名AndroidCalculator

> jarsigner -keystoreD:Androidavd.androiddebug.keystore-storepass android -keypass androidD:Androidapk 2-AndroidCalculator-unsign.apkandroiddebugkey

> zipalign 4D:Androidapk 2-AndroidCalculator-unsign.apkD:Androidapk 2-AndroidCalculator-sign.apk

zipalign能夠使apk文件中未壓縮的數據在4個位元組邊界上對齊(4個位元組是一個性能很好的值)

例如簽名Plingm

>jarsigner -keystoreD:Androidavd.androiddebug.keystore-storepass android -keypass androidD:Androidapkplingmcom.freephoo.android_1180-unsign.apkandroiddebugkey

> zipalign 4D:Androidapkplingmcom.freephoo.android_1180-unsign.apkD:Androidapkplingmcom.freephoo.android_1180-sign.apk

對於jdk 1.7版本,簽名稍有區別,需要加上參數:-digestalg SHA1 -sigalg MD5withRSA,例如

>jarsigner-digestalg SHA1 -sigalg MD5withRSA-keystoreD:Androidavd.androiddebug.keystore-storepass android -keypass androidD:Androidapkplingmcom.freephoo.android_1180-unsign.apkandroiddebugkey

> zipalign 4D:Androidapkplingmcom.freephoo.android_1180-unsign.apkD:Androidapkplingmcom.freephoo.android_1180-sign.apk

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

>emulator -avd android4.1

>adb installD:Androidapkplingmcom.freephoo.android_1180-sign.apk

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

在進行黑盒測試之前,需要知道待測試apk的包及activity信息。查看某個apk的package name,可以用aapt看:

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

aapt dump badgingD:Androidapkplingmcom.freephoo.android_1180-sign.apk

也可以用re-sign.jar看,結果如下:package: name="com.freephoo.android"

3.真機調試

  • 設置android手機為USB調試模式。步驟:menu--->設置--->應用程序--->開發,選擇【USB調試】
  • 用USB連接手機和電腦,並確保成功。步驟:在windows下執行c:/adb devices,查看手機是否已經連接成功。
  • 連接不成功:

    連接成功

  • 設置應用程序為調試模式(這個似乎不要也可以)。操作:編輯AndroidManifest.xml增加調試參數android:debuggable="true",如下:
  • <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">

  • 查看具體異常信息:
  • 執行:./adb logcat可以查看到更多的系統異常消息。在這些消息中要注意查看Caused by:打頭的行,這些行指明了在哪行代碼出的錯誤

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

    我們知道,android每個控制項都有一個類似R.id.xxxx字元串id。在做白盒測試的時候,將被測試的代碼包import一下,直接調用R.id.xxxx就可以了。

    但是在黑盒測試的時候,我們只有apk,沒有源代碼,怎麼獲取控制項的id呢?

    java已經給我們提供了這個工具。只需要在cmd下面輸入hierarchyviewer即可調出控制項查看工具(如果cmd不認識你的hierarchyviewer,說明你的環境變數沒有配置正確):

    選中需要查看的應用,點擊:"Load View Hierarchy":

    如下id/後面的"Button01"即為button的id。

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

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

    2.根據控制項的坐標。hierarchyviewer是可以查看每個點的坐標的。但是使用起來不是很直觀,尤其是對不同解析度屏幕的手機時,使用起來可能還存在兼容性問題。

    如果控制項上沒有文字,clickOnButton就用不了,例如很多應用用圖片作為button的說明,clickOnButton就不奏效。用坐標又很麻煩不直觀。可否用控制項的id呢?

    怎麼用id,我也糾纏這個問題好幾天,網上中文資料搜不到,搜英文,英文搜不到換關鍵字搜,始終找不到一個比較完整的使用說明。我只好自己一個個命令的試,搞了2天總算找到一個方法,這個方法對於java高手可能不值一提,但對我從未用過java的人來說,確實費了不少周折。

    我的方法如下,先獲取到控制項的view:

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

    然後再用solo.clickOnView即可。

    我在使用的時候,簡單的封裝了下,封裝函數如下:

    privateintclickCtrlById(String s,intt ){

    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);

    return0;

    }

    例如已知某個控制項的id(字元串格式)為"btn_dialpad_5",調用方法如下:

    clickCtrlById("btn_dialpad_5",400);

    推薦閱讀:

    查看原文 >>
    相关文章