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

你可能感兴趣的:(笔记,robotium)