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