私は、org.simalliance.openmobileapi API を使用してセキュア エレメント通信を使用するアプリケーションに取り組んでいます。
アプリケーションは、メインのアクティビティである Native が JNI ライブラリを呼び出して動作します。JNI ライブラリは、JNI メソッドを使用して org.simalliance.openmobileapi パッケージの関数を呼び出します。
API レベルは、mainfest に記述されているように 8 です。
<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 は、セキュア エレメントを操作するために JNI によって呼び出される Java クラスであり、コンパイル時に残りのプロジェクトと共に「dexed」される jar に含まれています。
パッケージ org.simalliance.openmobileapi.jar は、Android の両方のバージョンの /system/framework フォルダーに含まれています。
Android 2.3.6 の場合
-rw-r--r-- root root 29148 2012-11-15 11:24 org.simalliance.openmobileapi.jar
Android 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 OS の odex ファイルです。クラスパスまたは /system/framework フォルダーに含まれるパッケージへの参照を含める方法はありますか?