robotium學習筆記(二)----問題

沒有源碼的情況:

在手機上需要裝2個包:bin目錄下的apk包,和將重新簽名過的測試包一起裝到手機中,即可運行


Permission Denial解決辦法:

Test run failed: Permission Denial: starting instrumentation ComponentInfo{com.mobile17173.game.test1_2/android.test.InstrumentationTestRunner} from pid=6762, uid=6762 not allowed because package com.mobile17173.game.test1_2 does not have a signature matching the target com.mobile17173.game

Permission Denial:該原因是沒有將包重新簽名


ADB server didn't ACK解決辦法:

殺掉任務管理器中所有的手機助手進程:tadb.exe(騰訊)、wandoujia.exe(豌豆莢)、sjk_daemon.exe(金山) and so on....

重啓eclipse即可


不同分辨率點擊不支持的解決辦法:

clickOnView 點不中的原因可以解決了,如果不想改源碼,那麼就只能 使用320*480的adv就能點中。 
或者修改 manifest.xml文件 加入<supports-screens android:anyDensity="true"/> 
就可以在任一分辨率都可以支持了 

 manifest.xml文件 加入<supports-screens android:anyDensity="true"/> 


反射相關:

http://hejianjie.iteye.com/blog/136205

1.在運行時判斷任意一個對象所屬的類

 2.在運行時構造任意一個類的對象

 3.在運行時判斷任意一個類所具有的成員變量和方法(通過反射甚至可以調用private方法)

 4.在運行時調用任意一個對象的方法(*****注意:前提都是在運行時,而不是在編譯時)


//獲得對象的類型

Class classType=obj.getClass();
System.out.println("該對象的類型是:"+classType.toString());

//通過默認構造方法去創建一個新的對象,getConstructor的視其參數決定調用哪個構造方法
Object objectCopy=classType.getConstructor(new Class[]{}).newInstance(new Object[]{});

//獲得對象的所有屬性
Field[] fields=classType.getDeclaredFields();

for(int i=0;i
//獲取數組中對應的屬性

Field field=fields[i];


setup判斷

如果啓動後的界面是訂閱,則不用setup,否則setup

setup(){

if(!activity.equals("訂閱頁")){
super.setup();

}

}


紅米不能adb解決:

方案:在手機上安裝:ViewServer.apk

注意:需要一直在手機後臺開着。

開啓ViewServer服務的ViewServer.apk在哪裏下載?各市場里居然沒有。。那麼就自己編譯一個吧。

android源代碼下載地址:

http://pan.baidu.com/s/1sjIulYl

提取碼:wrc8

注意:下載列表包含源碼,和可安裝的apk,能夠直接使用。

View Hierarchy不能啓動的原因

To preserve security, Hierarchy Viewer can only connect to devices running a developer version of the Android system

即:出於安全考慮,Hierarchy Viewer只能連接Android開發版手機或是模擬器(準確地說,只有ro.secure參數等於0且ro.debuggable等於1的android系統)。

Hierarchy Viewer在連接手機時,手機上必須啓動一個叫View Server的客戶端與其進行socket通信。而在商業手機上,是無法開啓View Server的,故Hierarchy Viewer是無法連接到普通的商業手機。

Android源碼實現這一限制的地方在:
ANDROID源碼根目錄\frameworks\base\services\java\com\android\server\wm\WindowManageService.java
中的一段:
1 public boolean startViewServer(int port) {
2     if (isSystemSecure()) {
3         return false;
4     }
5  
6     if (!checkCallingPermission(Manifest.permission.DUMP, "startViewServer")) {
7         return false;
8     }
9 ....

 

檢驗一臺手機是否開啓了View Server的辦法爲:
adb shell service call window 3
若返回值是:Result: Parcel(00000000 00000000 ‘……..’)” 說明View Server處於關閉狀態
若返回值是:Result: Parcel(00000000 00000001 ‘……..’)” 說明View Server處於開啓狀態
若是一臺可以打開View Server的手機(Android開發版手機 、模擬器or 按照本帖步驟給系統打補丁的手機),我們可以使用以下命令打開View Server:
adb shell service call window 1 i32 4939
使用以下命令關閉View Server:
adb shell service call window 2 i32 4939

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章