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.          CTSSignature部分程序分析

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)          访问权限:publicprotectedprivate

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)

posted on 2010-07-06 11:25  xieyan0811  阅读(28)  评论(0编辑  收藏  举报