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. 举例

  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. 关键代码

  1. cts/tests/SignatureTest/src/android/tests/sigtest/SignatureTest.java
    检查的入口 (SignatureTest:start()),由它读入并分析 xml

cts/tests/SignatureTest/src/android/tests/sigtest/JDiffClassDescription.java
实质的分析程序,用于根据规则找到相应的类及函数,并进行验证

6. 检查的问题(具体见 JDiffClassDescription.java)

  1. 验证问题
  1. 访问权限:public,protected,private

  2. 参数的类型及个数

  3. 特性:abstract, static, final, transient, volatile, synchronized, native

  1. 验证条目
  1. 变量 field:访问权限,特性,类型,变量名

  2. 方法 method, constructor:参数,返回值,异常处理,访问权限,特征,方法名,兼容性

  3. 类 class, implements:访问权限,特性,类名,class/implements

7. Signature 在开发中的作用
相关模块根据对应的 xml 文件检查自己代码是否符合规则
通过运行用例发现不符合规则的代码

(转载请注明作者及出处: http://xy0811.spaces.live.com

)