没有源码的情况:
在手机上需要装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是无法连接到普通的商业手机。
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 | .... |