Трудности с выпуском Android Open Mobile API

Я использую файл "org.simalliance.openmobileapi.jar" из SDK. Я скопировал его в папку libs и добавил зависимость следующим образом

Случай № 1: работает нормально (в режиме отладки)

В приложении Gradle файл у меня есть:

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

Случай № 2: не работает (в режиме релиза - без minifyEnabled)

В приложении Gradle файл у меня есть:

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

В случае № 2 я получаю следующее исключение:

(java.lang.SecurityException: Access Control Enforcer: доступ к APDU запрещен!)

Что может вызвать проблему?

1 ответ

Решение

Прежде всего, вам нужно использовать "предоставленную" область действия в файле build.gradle как для отладки, так и для сборки выпуска:

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

ОБНОВИТЬ

"обеспечить" устарело и было заменено на "compileOnly", поэтому для текущих версий Gradle вам нужно использовать (как прокомментировал TT--):

dependencies {
    [...]
    compileOnly files('libs/org.simalliance.openmobileapi.jar')
}

Кроме того, вам нужно иметь запись библиотеки-использования в вашем AndroidManifest.xml:

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

Тем не менее, так как вы получили SecurityException По причине "Access Control Enforcer: доступ к APDU запрещен!", это явный признак того, что подключение и использование предоставляемой системой библиотеки Open Mobile API работали должным образом и что вы успешно подключились к системной службе SmartcardService на своем устройстве. Следовательно, ваша сборка работает, как и ожидалось.

Следовательно SecurityException уже ясно говорит вам, в чем проблема:

Access Control Enforcer: доступ к APDU запрещен!

Это означает, что список контроля доступа на защищенном элементе не настроен должным образом. Поскольку ваша отладочная сборка работает, вы, вероятно, зарегистрировали сертификат для своей среды отладки с помощью апплета ARA (и / или файла ARF) в элементе безопасности. Однако сборки выпуска не подписаны с теми же ключами отладки (сертификатом). Вместо этого они подписываются с помощью ключей выпуска (сертификата), выбранных вами при выборе "Создать подписанный APK..." в Android Studio. Поэтому у вас есть два варианта:

  1. Добавьте сертификат выпуска в список разрешенных приложений для вашего апплета в элементе безопасности.

  2. Измените условия доступа на защищенном элементе на ALLOW ALL, чтобы разрешить доступ к любому апплету из любого приложения на устройстве.

В зависимости от вашего защищенного элемента вам, как правило, необходимо обновить апплет ARA (GlobalPlatform Access Control) (AID). A00000015141434C00) или файл правил доступа (ARF), расположенный в приложении PKCS#15 (AID A000000063504B43532D3135) или в файловой системе SIM-карты с новыми условиями доступа.

Другие вопросы по тегам