Robotium 《Robotium 专栏》------(二) 被测程序为什么要进行重签名?

candice · 2017年10月09日 · 989 次阅读

签名的好处:

(1) 有利于程序升级
当新版程序和旧版程序的数字证书相同时,Android 系统才会认为这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同,则 Android 系统认为他们是不同的程序,并产生冲突,会要求新程序更改包名。

(2) 有利于程序的模块化设计和开发
Android 系统允许拥有同一个数字签名的程序运行在一个进程中,Android 程序会将他们视为同一个程序。所以开发者可以将自己的程序分模块开发,而用户只需要在需要的时候下载适当的模块。

(3) 可以通过权限 (permission) 的方式在多个程序间共享数据和代码
Android 提供了基于数字证书的权限赋予机制,应用程序可以和其他的程序共享该功能或者数据给那那些与自己拥有相同数字证书的程序。如果某个权限 (permission) 的 protectionLevel 是 signature,则这个权限就只能授予那些跟该权限所在的包拥有同一个数字证书的程序。

Robotium 为什么需要对被测程序进行重签名?

robotium 是对 Instrumentation 做的二次封装,Instrumentation 要求待测程序与 testapk 跑在同一个进程中,而且需要对其进行数据和资源的操作,那么就必须要保证签名一致,就根据上面所说的签名的好处就可以知道,签名是前提和必要条件,否则将无法用 testapk 对待测程序进行操作和 UI 上的测试。
Android 提供了自定义的运行测试用例的类,叫做 InstrumentationTestRunner。这个类控制应用程序处于测试环境中,在同一个进程中运行测试程序和主程序,并且将测试结果输出到合适的地方。IntrumentationTestRunner 在运行时对整个测试环境的控制能力的关键是使用 Instrumentation。注意,如果你的测试类不使用 Instrumentation 的话,你也可以使用这个 TestRunner。
当你运行一个测试程序时,首先会运行一个系统工具叫做 Activity Manager。Activity Manager 使用 Instrumentation 框架来启动和控制 TestRunner,这个 TestRunner 反过来又使用 Intrumentation 来关闭任何主程序的实例,然后启动测试程序及主程序(同一个进程中)。这就能确保测试程序与主程序间的直接交互。用 eclipse 编写 testcase,编译完测试工程后,你就可以使用系统工具 Activity Manager 来运行测试程序。你给 Activity Manager 提供了 TestRunner 的名(一般是 InstrumentationTestRunner,在程序中指定);名包括被测试程序的包名和 TestRunner 的名(这一点在 robotium 中也一样,也需要提供,才能够找到你需要测试的程序)。Activity Manager 加载并启动你的测试程序,杀死主程序的任何实例,然后在测试程序的同一个进程里加载主程序,然后传递测试程序的第一个测试用例。这个时候,TestRunner 会接管这些测试用例,运行里面的每个测试方法,直到所有的方法运行结束。如果你使用 Eclipse,结果会在 JUnit 的面板中显示。如果你使用命令行,将输出到 STDOUT 上。

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册