2

私は、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 フォルダーに含まれるパッケージへの参照を含める方法はありますか?

4

4 に答える 4

3

これがAndroid Studioでの構成です

app/build.gradle で

dependencies {
    compile fileTree(include: ['*.jar'], exclude: ['org.simalliance.openmobileapi.jar'], dir: 'libs')
    provided files('libs/org.simalliance.openmobileapi.jar')
}

AndroidManifest.xml で、それを true または false にするのはあなた次第です

    <uses-library
        android:name="org.simalliance.openmobileapi"
        android:required="false" />

また、/system/framwork/ では、「org.simalliance.openmobileapi.jar」が必要であるか、例外がスローされます。

于 2015-07-16T08:50:48.760 に答える
3

この問題に対する明確な解決策を見つけました。

ライブラリをアプリケーションにコンパイルすることをコンパイラに伝える代わりに、ライブラリがアプリケーションに提供されていることを伝えるだけで、すべて正常に動作します。

私の場合、AndroidスタジオでGradleを使用しています。

したがって、SDK パスでダウンロードしたアドオンから .jar ファイルを抽出するだけです。

SDK\アドオン\アドオン-open_mobile_api-giesecke_devrient_gmbh-18\libs

そして、それをアプリケーションの libs フォルダーに配置しました。次に、build.gradle ファイルで次のように置き換えました。

dependencies {
    compile files('libs/org.simalliance.openmobileapi.jar')
}

これとともに :

dependencies {
    provided files('libs/org.simalliance.openmobileapi.jar')
}

そして今、すべてがうまく機能しています。

于 2014-07-05T11:43:12.213 に答える
1

このパッケージに含まれるソースをプロジェクトのsrc/フォルダーに配置する問題を解決しました。

http://code.google.com/p/seek-for-android/downloads/detail?name=MSC%20Smartcard%20Service%203.0.tar.gz&can=2&q=

より正確には、古いパッケージorg.simalliance.openmobileapi.jarを置き換えるために作成された seek-for-android ライブラリの新しいバージョンであるパッケージcom.mobilesecuritycard.openmobileapi.jarのソースです。

SecureChannel クラスは古いパッケージで記述されているため、古いパッケージ名を使用する必要があるため、パッケージへのすべての参照の名前を com.mobilesecuritycard からorg.simalliance変更する必要がありました。

于 2013-09-20T17:57:41.790 に答える
0

Androidマニフェストで追加することを忘れないでください:

<application
        android:name=....
        android:icon="@drawable/icon"
        android:label="@string/app_name" 
        android:allowBackup = "true" >

        <!-- support USIM -->
        <uses-library
                android:name="org.simalliance.openmobileapi"
                android:required="false"/>
于 2015-04-15T10:20:52.207 に答える