2016-04-05 5 views
3

Общее Прецедент:Использование библиотеки 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, чтобы получить необходимую функциональность между телефоном и ТВ-приложением.

Помощь была бы действительно оценена.

ответ

0

BouncyCastleProvider предназначен для надежных соединений. Он не может быть включен по умолчанию в Android. Вы можете найти его через банку или ссылку на град.

Возможно, вы также захотите посетить этот ответ Is there a smaller version of the BouncyCastleProvider on android?, в котором используется аналогичная библиотека, совместимая с Android.

+0

Файл .jar для BouncyCastleProvider находится в моем каталоге lib. Я также попробовал его с меньшей версией (как было предложено в вашей ссылке). К сожалению, все та же проблема. – quantumflux