CTS的Signature规则
CTS 的 Signature 规则
1. 说明
主要是对公共控件的语法检查
2. 测试方法
_ $ make cts
$ adb install -r
out/target/product/qsd8250_surf/data/app/SignatureTest.apk
$ adb shell am instrument -w
android.tests.sigtest/.InstrumentationRunner _
3. 原理
系统生成了一些 xml,位置在:
out/target/common/obj/APPS/SignatureTest_intermediates/genres/xml/*
根据 xml 对类、方法、变量给出的规则对当前系统中的公共部分进行检测
4. 举例
用于检查的语法规则 xml 文件
out/target/common/obj/APPS/SignatureTest_intermediates/genres/xml/app_widget.xml被检查的代码
framework/base/core/java/android/widget/*检查步骤
用循环的方法取 xml 中的每条 TAG,然后用 Class.forName(classname, false,
this.getClass().getClassLoader()) 取系统中对应的类,并判断它是否适合规则
5. CTS 的 Signature 部分程序分析
代码位置
cts/tests/SignatureTest/src/android/tests/sigtest/*关键代码
cts/tests/SignatureTest/src/android/tests/sigtest/SignatureTest.java
检查的入口 (SignatureTest:start()),由它读入并分析 xml
cts/tests/SignatureTest/src/android/tests/sigtest/JDiffClassDescription.java
实质的分析程序,用于根据规则找到相应的类及函数,并进行验证
6. 检查的问题(具体见 JDiffClassDescription.java)
- 验证问题
访问权限:public,protected,private
参数的类型及个数
特性:abstract, static, final, transient, volatile, synchronized, native
- 验证条目
变量 field:访问权限,特性,类型,变量名
方法 method, constructor:参数,返回值,异常处理,访问权限,特征,方法名,兼容性
类 class, implements:访问权限,特性,类名,class/implements
7. Signature 在开发中的作用
相关模块根据对应的 xml 文件检查自己代码是否符合规则
通过运行用例发现不符合规则的代码
(转载请注明作者及出处: http://xy0811.spaces.live.com
)