4

一般的な使用例:

私のプロジェクトでは、Pong のようないくつかの簡単なゲームや Android TV の簡単なクイズを実装しようとしています。TV それぞれの Android TV ボックスは、ゲームを表示し、ロジックを処理します (別のモジュール)。スマートフォンとタブレットは、これらのゲームの単純なコントローラーとして機能する必要があります (別のモジュール)。例: Pong をプレイしている場合、携帯電話のアプリケーションは、プレーヤーのパドルを上下に動かすための 2 つの矢印のみを表示します。テレビのアプリとモバイル デバイスのアプリ間の接続と通信には、Google Nearby Connections APIが使用されます。

実際の問題:

ここでの要件は、ユーザーが自分の電話から Pong ゲームを開始できることです。つまり、モバイル デバイスでシンプルなコントローラー アプリを開き、仮名を選択してから、新しい Pong ゲームを開始するか、既存の Pong ゲームに参加するかを決定します。そのため、ユーザーがピンポン ゲームを開始したい場合、画面上のボタンを押すことができ、Android TV 上のアプリケーションが開始されます (まだ実行されていない場合)。

私はこれについて多くの調査を行いましたが、悲しいことに、この種の機能に利用できるサンプルやソース コードがあまりないことを知る必要がありました。幸いなことに、公式のGoogle TV Remote アプリケーションのソース コードを見つけました(私の評判がまだ低すぎるため、リンクを追加することはできません)。

Android TVではなく、古いGoogle 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: FATAL EXCEPTION: メイン プロセス: 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 がどこから来たのか、コードを調整してこの例外を修正する方法がまったくわかりません。

繰り返しますが、電話と TV アプリの間で必要な機能を取得するために、Google TV 時代のこの少し古いコードで時間を無駄にしていないかどうかさえわかりません。

助けていただければ幸いです。

4

1 に答える 1

0

BouncyCastleProvider は安全な接続用です。Android にはデフォルトで含まれていない場合があります。jar または gradle リンクから見つけることができる場合があります。

この回答にアクセスすることもできます。 Android の BouncyCastleProvider の小さいバージョンはありますか? 、Android と互換性のある同様のライブラリを使用します。

于 2016-04-24T21:45:06.600 に答える