2016-04-05 51 views
3

一般用例:使用Anymote庫Android移動應用與Android電視溝通

我的項目,我想實現一些簡單的遊戲,如乒乓球或簡單的測驗爲Android電視。電視分別安卓電視盒顯示遊戲和處理邏輯(獨立模塊)。智能手機和平板電腦應作爲這些遊戲的簡單控制器(獨立模塊)。例如:在玩Pong時,手機上的應用程序只顯示2個箭頭,用於向上或向下移動播放器的槳。對於電視上的應用程序與移動設備上的應用程序之間的連接和通信,使用Google Nearby Connections API的

實際的問題:

要求,現在是,用戶可以從他的電話開始的乒乓球比賽。這意味着:他在自己的移動設備上打開簡單的控制器應用程序,選擇一個假名,然後決定是否要開始一個新的Pong遊戲,或者如果他想加入現有的Pong遊戲。因此,當用戶想要開始pong遊戲時,他應該能夠按下屏幕上的按鈕,並且Android TV上的應用程序將開始(如果尚未運行)。

我在這方面做了大量的研究,很遺憾不得不發現沒有太多的例子或源代碼可用於這種功能。幸運的是,我找到了官方谷歌電視遙控器應用的源代碼(由於我的聲望太低,我無法添加鏈接)。

我已經知道,這是對於上了年紀谷歌電視一個應用程序,而不是的Android電視。但是在看一看它時,我發現存在這樣的功能,我想要的就是這種功能。我下載它從這裏: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,Android的樣本/ BlackJackTVRemote/src目錄/ com/example/google/tv/remote/blackjack/從上面的鏈接到我在移動模塊上的用例。因此,我只是想測試一下我是否可以從我的應用中獲得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: 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中被默認包含。您可以通過jar或gradle鏈接找到它。

您也可能想訪問此回答,Is there a smaller version of the BouncyCastleProvider on android?,它使用與Android兼容的類似庫。

+0

BouncyCastleProvider的.jar文件位於我的lib目錄中。我也嘗試了一個較小的版本(正如你的鏈接建議)。可悲的是,仍然是同樣的問題。 – quantumflux

相關問題