PAYATHON 2026

在 JDE 中导入 Payment SDK JAR 后出现验证错误

支付老李

结论

问题通常不在添加 JAR 的操作上,而是 paymentapi.jar 与项目使用的 BlackBerry JDE、目标 OS 或模拟器环境不兼容,导致生成的 COD 在启动时无法通过 BlackBerry JVM 验证。

请使用 Payment Service SDK v1.8 支持的 JDE 和 BlackBerry OS 版本重新构建项目,并确认模拟器已经安装 SDK 要求的运行时组件。仅将 paymentapi.jar 加入项目,并不能保证 Payment Service 运行环境完整。

常见原因

1. JDE 或目标 OS 版本过低

BlackBerry 会在模块启动前检查它引用的类、方法和字段。如果 paymentapi.jar 使用了较新系统才提供的 API,而项目由旧版 JDE 编译,或者模拟器运行的是旧版 OS,验证就会失败。

请同时核对:

  • Payment Service SDK v1.8 要求的最低 JDE 和 OS 版本;
  • 项目实际使用的 JDE 版本;
  • 模拟器镜像的 OS 版本;
  • 真机的系统版本。

最低版本应以 SDK 随附的 release notes 或开发文档为准,不能只根据 JAR 文件名判断。

2. 模拟器缺少 Payment Service 运行时模块

paymentapi.jar 可能只是编译时使用的接口库。应用启动后,它引用的实现类需要由模拟器或设备中的 Payment Service、BlackBerry App World 等相关组件提供。

如果模拟器没有安装这些组件,即使项目编译成功,应用仍可能在加载阶段出现 verification errors。

3. 混用了不同版本的库

常见情况包括:

  • 项目中仍有旧版 paymentapi.jar;
  • workspace 或构建路径中同时存在两个版本;
  • JAR 来自 v1.8,模拟器组件却来自其他版本;
  • 旧的 COD 文件仍留在模拟器中。

这些情况可能导致类定义或方法签名不一致。

解决步骤

  1. 查看 Payment Service SDK v1.8 随附的版本说明,确认它支持的 JDE 和设备 OS。
  2. 将项目切换到受支持的 JDE 版本。
  3. 选择与该 JDE 和目标 OS 匹配的模拟器镜像。
  4. 按照 SDK 说明安装模拟器所需的 Payment Service 或相关运行时组件。导入 paymentapi.jar 不会自动安装这些组件。
  5. 删除项目构建路径中的旧版或重复 Payment API JAR,只保留一个正确版本。
  6. 执行完整的 Clean/Rebuild,避免继续使用旧的 .cod、.debug 或增量构建结果。
  7. 从模拟器中卸载旧版应用,必要时重置模拟器文件系统,再重新部署。
  8. 查看模拟器 Event Log 或 JDE 控制台。验证错误后出现的缺失类、缺失方法或模块名称,通常更有助于定位问题。

重点留意以下信息:

Class not found
NoSuchMethodError
NoSuchFieldError
Module not found
Dependency not found

这些信息通常分别指向运行时模块缺失、API 版本不匹配或库版本冲突。

代码层面的注意事项

如果需要兼容不支持 Payment Service 的旧系统,应避免让系统在应用启动时直接加载包含 Payment API 静态引用的类。可以将支付功能放进单独的类,甚至单独的 COD 模块,确认环境兼容后再加载。

下面的检查只能控制功能入口:

import net.rim.device.api.system.DeviceInfo;

String osVersion = DeviceInfo.getSoftwareVersion();

if (osVersion != null) {
    // 根据 SDK 明确规定的最低版本决定是否开放支付功能
}

如果主模块已经直接引用模拟器中不存在的 Payment API 类,验证会在这段代码执行前发生。因此,仅增加 if 判断无法修复模块验证错误。

还需要检查的构建设置

确认 paymentapi.jar 的处理方式符合 SDK 文档:

  • 如果文档要求将它打包进应用,就将其作为 imported JAR 构建;
  • 如果它只是设备运行时提供的 API stub,就不应重复打包实现类;
  • 不要混淆或重新编译厂商提供的预构建 JAR,也不要替换其中的类;
  • 确保所有依赖项目使用同一套 JDE API。

排查时,应先确认 SDK、JDE 和模拟器 OS 版本是否匹配,再安装模拟器所需的运行时组件,最后清理旧构建和重复 JAR。反复移除并重新添加 paymentapi.jar,通常解决不了这类验证错误。

备注:内容仅供参考。