四、集成验证基础:检查SDK版本、资源文件、依赖库是否完整导入

集成验证是SDK接入的第一道关卡。说白了,就是确认你拿到的东西是“完整的、可用的”。

我见过太多项目,代码在CI上跑了一天,最后报个“找不到类定义”或者“资源ID冲突”——一查,原来是某个依赖库没导进来。这种锅,不该让集成人员背。

这一节,咱们把检查项拆成三个维度:版本、资源文件、依赖库。每个维度都有一套口令,照着做基本不会翻车。

4.1 SDK版本:打根上对齐

版本检查不是看一眼版本号就完事。你得验证三件事:

  • 发布版本与文档版本一致:我经常遇到文档写的是2.3.1,包里却是2.3.0-SNAPSHOT。这种不一致往往意味着API有细微差异,后面联调时特别坑。
  • 目标平台的最低版本要求:比如SDK要求minSdkVersion = 21,你的项目如果是19,直接编不过。这类问题越早发现越好。
  • 版本号的语义规则:主版本号变更通常代表不兼容修改。升级时一定要看Change Log,别盲目替换。
一个小技巧:每次拿到新包,第一件事就是运行 sdk-version-check.sh 或者读取 sdk.properties,把版本号输出到构建日志里。这样CI报告里一眼就能看到当前集成了哪个版本。

4.2 资源文件:别漏了图、字符串、布局

资源文件是集成时最容易漏掉的部分。尤其是Android SDK,经常会带一堆drawable、layout、values下的字符串。

检查资源文件时,我习惯先看清单:

  • R文件是否正确生成:如果build后找不到R.xxxx,说明资源导入失败。
  • 资源命名冲突:有的SDK用 ic_launcher 这种通用名称,容易跟App主工程冲突。集成前最好用 grep -r "ic_launcher" res/ 扫一遍。
  • 缺失资源引用:有些布局里引用了 @drawable/sdk_bg,但实际包里没有这张图。这类问题在运行时才暴露,特别恶心。
我曾经踩过的坑:一个UI SDK在values/strings.xml里定义了一个app_name字符串,跟我的App主工程完全同名。集成后App名称直接变乱了。所以现在我在集成之前一定会跑资源冲突检测脚本,把共用的R字段全部加前缀。

4.3 依赖库:不只是jar/aar,还有传递依赖

依赖库检查分两层:直引依赖和传递依赖。

检查维度 检查点 工具或方法
直引依赖 是否包含所有必需的jar/aar/framework 查看集成文档的依赖列表 → 对比项目 build.gradle
传递依赖 是否有冲突(版本不一致、类重复) ./gradlew :app:dependencies 输出树
平台依赖 是否存在缺失的系统库(如CoreTelephony) 静态检查 nm -u libxxx.a
动态库 abi架构是否匹配(armeabi-v7a / arm64-v8a) 解压aar → 检查jni目录

这里我要强调一点:传递依赖冲突是运行时的定时炸弹。比如SDK依赖了OkHttp 3.12,你的App依赖了OkHttp 4.0,虽然编译通过了,但运行时可能因为方法签名不同而Crash。我的做法是在集成阶段就运行./gradlew app:dependencies --configuration runtimeClasspath,然后把输出交给版本比对工具,标记出所有冲突的库。

集成验证清单(核心)

  • 版本:README版本号 & 包内 version.txt & build.gradle 定义 → 三者一致
  • 资源:运行一次资源扫描脚本,输出缺失/冲突资源列表
  • 依赖:执行依赖树 → 过滤出“冲突”、“警告”、“缺失”三类,逐条确认

4.4 自动化集成验证脚本

手动检查太慢了,而且容易漏。我一般会在CI流程里加一个verify-sdk-integration的Job,流程如下:

  1. 解压SDK包到临时目录
  2. 解析 sdk-info.json(或properties)获取版本号
  3. 遍历所有资源目录,生成资源清单
  4. 运行 gradle dependencies 并解析输出
  5. 比对清单与预期值,不一致则标记失败

这个脚本跑下来一般只需要3~5秒,能在开发阶段就把百分之八十的集成问题拦在门外。

SDK集成验证流程 1. 版本校验 文档/包内/构建配置一致 2. 资源文件检查 R文件生成/冲突/缺失 3. 依赖库检查 直引/传递/平台/ABI 合并检查清单 4. 自动化集成验证脚本 解压→解析→比对→标记失败 通过 / 失败反馈 将结果写入CI报告 建议在CI流水线中作为独立Job运行,每次集成前自动触发

这张图把我们要做的四步流程串起来了。从版本校验开始,到依赖库检查,最后汇总到自动化脚本。每一步都能提前发现问题,而不是等到联调测试才暴露。

我常用的一个辅助工具:写一个小脚本 check-sdk.sh,里面整合了版本比对、资源冲突检测、依赖树输出。每次集成新版本SDK,先跑一遍这个脚本,生成一份“集成验证报告”。报告里会明确打出“通过”或“失败”以及具体原因,给QA同学看也一目了然。

最后再提一句:别嫌麻烦。集成验证花10分钟,能省后面3天的排查时间。这个账,怎么算都划算。