在 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 文件仍留在模拟器中。
这些情况可能导致类定义或方法签名不一致。
解决步骤
- 查看 Payment Service SDK v1.8 随附的版本说明,确认它支持的 JDE 和设备 OS。
- 将项目切换到受支持的 JDE 版本。
- 选择与该 JDE 和目标 OS 匹配的模拟器镜像。
- 按照 SDK 说明安装模拟器所需的 Payment Service 或相关运行时组件。导入
paymentapi.jar不会自动安装这些组件。 - 删除项目构建路径中的旧版或重复 Payment API JAR,只保留一个正确版本。
- 执行完整的 Clean/Rebuild,避免继续使用旧的
.cod、.debug或增量构建结果。 - 从模拟器中卸载旧版应用,必要时重置模拟器文件系统,再重新部署。
- 查看模拟器 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,通常解决不了这类验证错误。
备注:内容仅供参考。
