Общее Прецедент:Использование библиотеки Anymote для андроида мобильного приложения для общения с Android TV
Для моего проекта я пытаюсь выполнить несколько простых игр, как Pong или простой викторины для Android TV. Телевизор соответственно Android TV box отображает игру и обрабатывает логику (отдельный модуль). Смартфоны и планшеты должны действовать как простые контроллеры для этих игр (отдельный модуль). Например: при воспроизведении Понга приложение на телефоне показывает только 2 стрелки для перемещения весла игрока вверх или вниз. Для подключения и связи между приложением на телевизоре и приложением на мобильном устройстве используется API Google Close Connections.
Реальная проблема:
Требование теперь о том, что пользователь может начать игру Pong со своего телефона. Это означает: он открывает приложение простого контроллера на своем мобильном устройстве, выбирает псевдоним, а затем решает, хочет ли он начать новую игру в понг или если он хочет присоединиться к существующей игре в понг. Таким образом, когда пользователь хочет начать игру в понг, он должен нажать кнопку на экране, и приложение на Android TV начнется (если оно еще не запущено).
Я провел много исследований по этому вопросу и, к сожалению, должен был выяснить, что для такого типа возможностей не существует примеров или исходных кодов. К счастью, я нашел исходный код для официального Google TV Remote application (я не могу добавить ссылку, так как моя репутация слишком низкая).
Я знал, что это приложение для старшего Google TV и не Android TV. Но, взглянув на него, я узнал, что есть AnymoteLibrary, который точно предлагает функциональность, которую я хочу. Я скачал отсюда: https://github.com/google/googletv-android-samples
Где я заблокирован в данный момент:
Итак, я взял AnymoteLibrary по ссылке выше и импортировать его в существующий проект в Android Studio, как отдельный модуль. После некоторых исправлений импорта и очистки Gradle я думал, что это может сработать. Я приспособил build.gradle файл, который выглядит следующим образом:
apply plugin: 'com.android.library'
dependencies {
//compile 'com.google.protobuf:protobuf-java:2.6.1'
compile files('libs/anymote.jar')
compile files('libs/bcprov-jdk15-143.jar')
compile files('libs/polo.jar')
compile files('libs/protobuf-java-2.2.0-lite.jar')
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 17
targetSdkVersion 23
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}
и добавил, и адаптировали BlackJackRemoteActivity.java из каталога GoogleTV-андроид-образцы/BlackJackTVRemote/SRC/com/example/google/tv/remote/blackjack/ из приведенной выше ссылки на мой вариант использования мобильного модуля. С этим я просто хотел проверить, могу ли я контролировать Android-телевизор из своего приложения, и поэтому я попытался запустить его. При первом запуске приложения, и это похоже на работу (См следующих сообщений журнала), но затем я получаю исключение:
E/KeyStoreUtil: Key store missing identity for anymote-remote
V/KeyStoreUtil: Generating key pair ...
V/KeyStoreUtil: Generating certificate ...
E/dalvikvm: Could not find class 'org.bouncycastle.jce.provider.BouncyCastleProvider', referenced from method com.google.polo.ssl.SslUtil.generateX509V1Certificate
W/dalvikvm: VFY: unable to resolve new-instance 9479 (Lorg/bouncycastle/jce/provider/BouncyCastleProvider;) in Lcom/google/polo/ssl/SslUtil;
E/dalvikvm: Could not find class 'org.bouncycastle.jce.provider.BouncyCastleProvider', referenced from method com.google.polo.ssl.SslUtil.generateX509V3Certificate
W/dalvikvm: VFY: unable to resolve new-instance 9479 (Lorg/bouncycastle/jce/provider/BouncyCastleProvider;) in Lcom/google/polo/ssl/SslUtil;
W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x416a0e18)
Окончательное сообщение исключения:
E/AndroidRuntime: FATAL EXCEPTION: main Process: androidtvportablecontroller, PID: 23592 java.lang.NoClassDefFoundError: org.bouncycastle.jce.provider.BouncyCastleProvider at com.google.polo.ssl.SslUtil.generateX509V3Certificate(SslUtil.java:118) at com.google.polo.ssl.SslUtil.generateX509V3Certificate(SslUtil.java:165) at com.example.google.tv.anymotelibrary.connection.KeyStoreManager.generateAppCertificate(KeyStoreManager.java:154)
Я совершенно не знает, где BouncyCastleProvider исходит из того, как я могу настроить свой код, чтобы исправить это исключение.
Опять же, я даже не уверен, что я не трачу свое время на этот немного более старый код из дней Google TV, чтобы получить необходимую функциональность между телефоном и ТВ-приложением.
Помощь была бы действительно оценена.
Файл .jar для BouncyCastleProvider находится в моем каталоге lib. Я также попробовал его с меньшей версией (как было предложено в вашей ссылке). К сожалению, все та же проблема. – quantumflux