一般用例:
对于我的项目,我正在尝试实现几个简单的游戏,例如 Pong 或 Android TV 的简单测验。电视分别是 Android 电视盒显示游戏和处理逻辑(单独的模块)。智能手机和平板电脑应充当这些游戏的简单控制器(单独的模块)。例如:玩 Pong 时,手机上的应用程序只显示 2 个箭头,用于向上或向下移动玩家的球拍。对于电视上的应用程序和移动设备上的应用程序之间的连接和通信,使用了Google Nearby Connections API。
实际问题:
现在的要求是用户可以从他的手机开始 Pong 游戏。这意味着:他在移动设备上打开简单的控制器应用程序,选择一个化名,然后决定是要开始新的 Pong 游戏还是要加入现有的 Pong 游戏。因此,当用户想要开始乒乓球游戏时,他应该能够按下屏幕上的按钮,Android TV 上的应用程序就会启动(如果尚未运行)。
我对此进行了大量研究,遗憾地发现没有太多示例或源代码可用于此类功能。幸运的是,我找到了官方Google TV Remote 应用程序的源代码(由于我的声誉太低,我无法添加链接)。
我知道它是旧版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'
}
}
并从上述链接中的googletv-android-samples/BlackJackTVRemote/src/com/example/google/tv/remote/blackjack/目录中添加并调整BlackJackRemoteActivity.java到我在移动模块上的用例。有了这个,我只是想测试我是否可以从我的应用程序中控制 Android TV,所以我尝试运行它。起初应用程序启动并且它似乎可以工作(请参阅以下日志消息),但随后出现异常:
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: 致命例外: 主进程: 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) 在 com.example.google.tv.anymotelibrary.connection。KeyStoreManager.generateAppCertificate(KeyStoreManager.java:154)
我完全不知道 BouncyCastleProvider 来自哪里以及如何调整我的代码来修复这个异常。
同样,我什至不确定我是否没有浪费时间使用 Google TV 时代的旧代码来获得手机和电视应用程序之间所需的功能。
帮助将不胜感激。