我正在开发利用 org.simalliance.openmobileapi API 来使用安全元素通信的应用程序。
应用是 Native 即主 Activity 调用一个 JNI 库进行操作。JNI 库使用 JNI Method 调用 org.simalliance.openmobileapi 包的函数。
API 级别为 8,如 mainfest 中所写:
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8"/>
该应用程序在 Android 2.3.6 上运行良好,但是当我尝试从 Android 4.0.4 或更高版本启动该应用程序时,该应用程序找不到 org.simalliance.openmobileapi 的 SEService 类。有用的日志是:
09-20 11:00:48.509: I/dalvikvm(1104): Failed resolving Lpkg/wrapper/SecureChannel; interface 203 'Lorg/simalliance/openmobileapi/SEService$CallBack;'
09-20 11:00:48.509: W/dalvikvm(1104): Link of class 'Lpkg/wrapper/SecureChannel;' failed
01-01 22:08:33.460: I/dalvikvm(10881): java.lang.NoClassDefFoundError: org.simalliance.openmobileapi.SEService$1
SecureChannel 类是一个 Java 类,由 JNI 调用以对安全元素进行操作,并且包含在一个 jar 中,该 jar 在编译时与项目的其余部分一起“被索引”。
org.simalliance.openmobileapi.jar 包包含在两个版本的 Android 的 /system/framework 文件夹中:
在安卓 2.3.6 上
-rw-r--r-- root root 29148 2012-11-15 11:24 org.simalliance.openmobileapi.jar
在安卓 4.0.4 上
-rw-r--r-- root root 313 2012-06-11 15:49 org.simalliance.openmobileapi.jar
-rw-r--r-- root root 24864 2012-06-11 15:49 org.simalliance.openmobileapi.odex
我看到的唯一区别是 Android 4.0.4 操作系统中的 odex 文件。有没有办法包含类路径或对 /system/framework 文件夹中包含的包的引用?