自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 资源 (1)
  • 收藏
  • 关注

原创 Android Root原理和流程分析

预备知识android手机的内部存储设备分RAM和ROM,RAM是运行内存,掉电就会失去所有内容;ROM中的内容掉电后也不会丢失。比如一台手机的规格参数里写着“2G RAM,16G ROM”。理论上,RAM越大,系统运行越流畅。像大型的3D游戏,运行时需要约300M的内存,那么在内存2G的手机上就可以流畅的运行,在512M内存的手机上几乎跑不起来,跑起来也会卡死。我们可以在“设置-管理应用

2014-09-16 10:36:45 2511

原创 Mount与Mount Point是什么意思

Mount与Mount Point是什么意思概述我们平时经常见到“Mount”这个概念,它被译为“挂载”。例如在Root Explorer中,就会让你选择“挂载为只读/读写”,获取root权限以后就可以将整个系统挂载为读写,从而可以自由操作各种敏感文件。“挂载”是一个动词,它一般用于各种存储设备。当你的系统挂载了一个存储设备后,你和你的操作系统就能访问到这个存储设备上的数据。简单说,你

2014-09-12 16:55:57 14537 2

原创 对自动化测试的一点思考

我思考了一下自动化测试的目的。就目前阶段来说,自动化测试要解决的问题其实只有一个:测试流程中的“大量、机械、重复”。“大量、机械、重复”这三个条件其实任何一个不满足,都不太适合进行自动化。不满足“大量”,那自动化的成本就会高于其收益;不满足“机械”,自动化的过程就会需要很多复杂的前提条件,难以满足;不满足“重复”,自动化要应对的场景就太多太碎片化,增加很多开支。举个满足这三要素的例子:

2014-08-15 17:03:41 1046

原创 android4.4短信新特性

KitKat系统开放了短信权限,增加了“默认短信”的概念,新特性如下:新增Intent新增了两个intent:SMS_DELIVER_ACTION 和 WAP_PUSH_DELIVER_ACTION,分别对应新短信和新彩信的到来。在4.4之前,新短信和新彩信到来时的intent为 SMS_RECEIVED_ACTION 和 WAP_PUSH_RECEIVED。它们在4.4中仍被保留。

2014-08-10 15:30:34 1057

原创 对设计模式六大原则的理解

以下内容都是我个人的一些理解,并不代表官方或主流的说法,欢迎大家一起讨论。写在前面:有一些最基本的理解是需要首先说明的。设计模式并不是规定,也不是唯一的准则,你可以完全不用设计模式而完成你的代码,保证它能实现你想要的功能。所以设计模式不是非用不可的。那我们为什么要用它呢?因为它使我们的程序结构更清晰,更有扩展性,而且它可以解决某些特定的问题。就像你可以顶着一头鸟窝快乐的生活,你也可以把

2014-08-10 15:16:34 782

原创 android测量网页加载时间

如果被测浏览器用的是webkit内核,或者是自己写的程序,总之就是如果可以获取对应的webview对象:可以通过重写webviewclient来获取加载时间。webviewclient中的onPageStarted和onPageFinished函数,可以用来精确的测量网页加载时间。   如果被测浏览器用的是自定义内核:这个比较麻烦。网上的解决方案大概有以下几种, 针对网站的网页加载

2014-08-10 11:43:36 2858

原创 利用jenkins+ant实现编译前修改文件和批量打包签名

测试框架通过instrume要服务于不同的产品,每次打包时都需要修改AndroidManifest.xml文件中instrument对应的包名,并引用不同的keystore和密码来签名。这个过程本身就易出错,而且由于引入了代码混淆,变得更加痛苦地漫长。现在利用jenkins+ant将整个过程实现了自动化,真是省了好大辛苦。   这个过程自动化的关键在于:  1、ant提供了编译前修改文

2014-08-10 11:30:46 4028 1

原创 Jenkins持续集成环境搭建参考教程

写在前面搭建测试环境花了不少时间也走了不少弯路,虽然现在也谈不上精通,但总算攒了不少经验教训和人品。在此就把我掌握的一些相关知识共享给大家,希望大家在进行相同工作时能少费一点功夫,留着干些更重要的事~!参考资料http://www.eoeandroid.com/thread-271570-1-1.htmlhttp://developer.51cto.com/art/201111/3

2014-08-09 17:20:01 1216 1

原创 windows下查找一个目录下所有文件内容

遇到这个问题的背景是我反编译了一个apk,得到了它的source code。我在jd-gui中查找一个String时,发现查找结果严重不全,于是我想,如果不用jd-gui自带的搜索功能,而直接从源码文件夹中查找这个String就好了。 但windows自带的查找功能,只能查找目录下的文件名,而无法查找文件内容。总不能把文件一个一个都打开,然后挨个find一遍吧? 办法总是有的,答案

2014-09-23 14:48:56 8962 1

转载 每次打开Word都要重新配置的问题

电脑中如果两个版本的word安装在同一个文件夹中,由于模板的不一样,每次打开都要加载模板,所以出现了“安装配置”的现象。 而且只有word才会出现这个问题,excel不会方法/步骤 1. 点击“打开”-》“运行”-》输入“regedit”,确定。打开注册表 2. 如果你电脑中最新的版本的world是2010的话选择这个路径:[HKEY_CURRENT_USER\Software\Microsoft

2014-09-22 17:11:48 1403

原创 在代码中对apk文件重签名

废话不说,上代码:

2014-08-12 17:43:06 912

原创 重签名工具re-sign.jar的实现原理

re-sign.jar可以将一个apk文件重签名,使用的是android自带的debug签名

2014-08-12 17:06:11 5137

原创 Android Service在测试工程中使用的注意事项

做单元测试时需要在测试工程里开一个http service,使用intent调起时却发现service怎么都起不来,代码如下:看出错误在哪了吗?答案:错误在context那里。android的测试工程与被测工程关系非常密切,比如测试工程可以直接使用被测工程的各种权限而无需自己声明等。这里我犯的错误就是,我以为任何一个context实例都可以发送正确的intent,而

2014-08-10 15:12:46 673

原创 使用BlockingQueue进行多线程间的异步通信

写单元测试时遇到一个问题,我要获取一串数据复制给一个变量,但获取数据的操作比较耗时(这里是http请求),且耗时长短不定。我当然不能让这种耗时操作阻塞主线程,于是每次获取数据,我都开了一个新线程,把操作放到线程里去完成。问题出现在这:由于获取数据是在线程里的,所以我并不知道它什么时候被获取到了,只能等待一段时间(肯定比它需要的时间略长),然后去访问这个变量。这种方式最大的问题不是盲目的等待

2014-08-10 15:12:40 1500

原创 反编译时有些类文件不在代码中

反编译时遇到一种情况:反编译得到的代码中引用了某些类,但这些类的源文件却不在反编译代码中。按理说这种情况反编译时应该报错,但是没有。说明这些类能被成功的引用。那这些类的实现是在哪里呢?答案:在framework包中。反编译时odex会依赖很多framework包下的odex文件,说明两者间存在引用关系。反编译framework.odex、framework_ext.odex等,依赖

2014-08-10 15:11:56 767

原创 反编译odex文件

http://code.google.com/p/smali/downloads/list下载下面4个文件。命令行输入命令:“java -jar baksmali.jar -x CertInstaller.odex”注意:如果出现如下错误org.jf.util.ExceptionWithContext: Cannot locate boot class

2014-08-10 15:09:08 2304

原创 eclipse启动不起来且没有报错

办法1:打开workspace,/.metadata/.plugins/org.eclipse.core.resources/.snap这个文件删掉,.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi这个文件也删掉,再打开应该就没问题了。办法2:换个新workspace。如果启动时没有弹出选择workspace的提示框,可以去ec

2014-08-10 15:07:46 3453

转载 Android SDK Manager下载包时出现:Download interrupted: Read timed out

在eclipse中打开Android SDK Manager,点击窗口左上方Tools - Options,会弹出如下窗口。在HTTP Proxy Server和Port中填入如下内容(翻墙的小朋友可以直接填www.google.com),并勾选下方Others中的Force https……选项,关闭窗口,重新打开Android SDK Manager,下载速度就会快很多

2014-08-10 15:06:41 1128

原创 快速获取联系人数据

没见过比这个更简单粗暴快速有效的了:Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); while (phones.moveToNext()) { String name=phones.getString(p

2014-08-10 15:04:20 623

原创 "app_name" is not translated in af, am, ar, bg, ca, cs, da, de, el, en-rGB,

导出签名包时出现这种情况,xml文件也出现了error。解决:将Run full error check when exporting app前面的勾去掉就可以了

2014-08-10 15:03:19 3047 2

原创 Instrumentation run failed due to 'java.lang.IllegalAccessError'

运行单元测试时出现这个问题,原因是测试工程与被测工程引用了重复的jar包(或重复的工程)。将测试工程里的引用删除即可

2014-08-10 15:02:23 1111

原创 获取一个Activity中的实际控件并操作

一个很头疼的问题:做单元测试时,经常遇到界面与逻辑相耦合的情况:想调用一个私有函数,必须通过其它公有函数来完成,而公有函数(或这个私有函数)的调用又涉及到一系列变量及控件的初始化,如果强行调用/使用反射调用,就会不可避免的出现NullPointerException。解决方案:使用ActivityInstrumentationTestCase2来获取实际的Activity与控件

2014-08-10 14:59:56 1915

原创 BroadcastReceiver trying to return result during a non-ordered broadcast

接收non-ordered广播时,如果调用方法终止广播:this.abortBroadcast();会报异常:BroadcastReceiver trying to return result during a non-ordered broadcast解决:改发有序广播this.sendOrderedBroadcast(intent, null);

2014-08-10 14:58:25 5518 1

原创 Activity与Service通信

Activity向Service发消息(在Service运行过程中):在Service中实现一个继承自Binder的内部类,在Activity中获取这个binder实例:private boolean isConnected;    private ServiceConnection mConnection = new ServiceConnection() {   

2014-08-10 14:55:25 520

转载 常用正则表达式大全

常用正则表达式正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。用户名:/^[a-z0-9_-]{3,16}$/密码:/^[a-z0-9_-]{6,18}$/十六进制值:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/电子邮箱:/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6}

2014-08-10 14:54:15 597

原创 android Pair

孤陋寡闻,竟然才知道android里有Pair这个数据结构。使用起来真是太方便了,与ArrayList配合使用,完美的解决了HashMap输出时顺序错乱的问题。位置在android.util.Pair中()。

2014-08-10 14:52:47 4010

原创 使用反射时出现java.lang.NoSuchMethodException

问题:在用反射时出现错误java.lang.NoSuchMethodException原因:反射调用的方法参数列表中包含int、boolean等类型,使用反射时将这些参数对应的类写成了Integer.class、Boolean.class解决:这些参数对应的类应该为int.class、boolean.class

2014-08-10 14:51:30 13055

原创 java编写的轻量级HTTP服务器nanohttpd

主页:http://nanohttpd.com/github项目地址:https://github.com/NanoHttpd/nanohttpdnanohttpd是一个java开源项目,对http服务做了很好的封装,使用起来非常方便。只需一个文件即可实现httpserver使用方法(本人的):去主页下载zip包,解压后全部导入eclipse(项目是maven的,所

2014-08-10 14:48:03 4550

原创 the currently displayed page contains invalid values

在Eclipse导入工程就会在工程文件名处显示一个红叉。要给改工程选择android ->project->android-> build target(项目属性里)时,就会出现"the currently displayed page contains invalid values"的字样,之后发现为项目选择build target没有成功。解决方法在项目新建名为default.pr

2014-08-10 14:47:13 649

转载 Unable to start service with null: java.lang.NullPointerException

Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStartCommand方法中做一些处理。然后我们注意到这个函数有一个int的返回值,这篇文章就是简单地讲讲int返回值的作用。从Android官方文档中,我们知道onStartCommand有4种返回值:

2014-08-10 14:45:14 2376

原创 Access restriction: The type XXXX is not accessible due to restriction on required library

问题:Access restriction: The type XXXX is not accessible due to restriction on required library解决办法:在Build Path里面把JRE System Library移除后重新添加进去,问题解决

2014-08-10 14:41:55 1129

原创 Class resolved by unexpected DEX

出错log如下:W/dalvikvm( 4427): Class resolved by unexpected DEX: Lcom/telenav/app/android/cingular/TeleNav;(0x470ebe60):0x14ad50 ref [Lcom/telenav/tnui/core/android/AndroidActivity;] LcoW/dalvikvm( 4

2014-08-10 14:41:40 3571

原创 unable to load default SVN client

重装SVN插件,把所有组件都勾选上(包括注明not required的),重启后输入用户名密码即可

2014-08-10 14:38:48 1418

原创 Eclipse AndroidManifest.xml file missing

这个问题感觉是eclipse的bug。首先工程莫名其妙的不能运行,提示"your project contains errors",但除了工程名,各个文件夹下都没有错误,buildpath也没有错误。开了”Problem“的view查看发现是bin目录下无法自动生成AndroidManifest.xml 。工程clean、rebuild、重启eclipse均告无效。解决:去workspace

2014-08-10 14:37:54 1706

原创 更新build-tools后Jenkins build失败

把build-tools更新后,由于ant文件夹下的build.xml脚本发生变化,所以jenkins构建失败,报missing buildToolsFolder错误。这时只需要按照原来的流程把新的build.xml脚本更新到测试工程目录下即可。如果出现The processing instruction target matching "[xX][mM][lL]" is not allo

2014-08-10 14:36:39 945

原创 android程序运行时出现OutOfMemoryError

先上干货:android程序运行时出现OOM(OutOfMemoryError),即内存泄露,说明程序的内存管理出现问题,或者系统给程序分配的内存太低。如果程序难以优化,就可以修改系统分配给程序的内存值。这个值叫dalvik.vm.heapsize,在/system/build.prop文件里,大小一般是32m或48m,可以改成64m或以上。写到 /system/build.prop 后重新开

2014-08-10 14:33:34 1260

原创 excel数据处理实用操作

1、找到两列数据中不重合的部分问题:假设有A、B两列数据,A中数据中有一部分是B的子集,有一部分不属于B,如何找到并去掉不属于B的这一部分?解决:在C1单元格输入公式:=IF(COUNTIF(B:B,A1)=0,A1,""),下拉应用到C列所有单元格,如果A中的数据不在B列里,C中就会显示这个数值,否则C中为空。利用excel中的筛选操作选出为空的单元格,复制到新表中即可2、数据格

2014-08-10 14:30:33 847

转载 android抓http数据包

1. Android手机需要先获得root权限。2. 下载tcpdump,地址(http://www.strazzere.com/android/tcpdump)抓包步骤:1. 将Android手机与电脑USB相连,打开windows命令提示符窗口2. 将tcpdump程序copy至android手机adb push c:/tcpdump /data/local/tcpdump

2014-08-10 14:29:38 648

原创 Jenkins权限设置误操作后的补救

第一次鼓捣Jenkins安全设置,没有给自己分配最高权限,导致自己变成普通用户,相当于门锁上把钥匙关进去了。解决办法就是:关闭Jenkinsc:/用户/zhuming/.jenkins/config.xml,找到useSecurity部分,将true改成false,并且删除下面的授权部分,保存退出重启Jenkins,安全设置就被还原了

2014-08-10 14:26:35 5455 3

原创 jenkins权限管理配置

jenkins默认是对所有人开放的,所以只需一个地址就可以看到所有项目的源码,非常不安全。要配置用户权限的话,可以进入系统管理-Configure Global Security,配置如下:其中zhuming是我自己,即给予自己管理员权限,而只给其它访问者读的权限保存后,匿名用户就无法看到源码了,但还是可以查看各个任务的运行状况和细节

2014-08-10 12:24:17 703

批量安装卸载android应用

通过batch实现的android应用批量安装卸载工具,有代码,有使用说明,欢迎下载

2014-08-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除