2017-08-12 8 views
1

私はExoStreamPlayerに依存している私のライブラリのAARファイルを使用しています。私のアプリケーションは、ライブラリのソースコードをアンドロイドスタジオプロジェクトのモジュールとして含めるとうまくいきますが、モジュール/ライブラリのAARファイルを含めると、実行時に次の例外がスローされます。他のライブラリに依存している私のライブラリのAARファイルを使用しています

java.lang.NoClassDefFoundError: com.ooyala.android.player.exoplayer.ExoStreamPlayer at com.ooyala.android.player.ExoMoviePlayer.createStreamPlayer(ExoMoviePlayer.java:12) at com.ooyala.android.player.MoviePlayer.init(MoviePlayer.java:50) at com.ooyala.android.OoyalaPlayerContextSwitcher.createAndInitPlayer(OoyalaPlayerContextSwitcher.java:107) at com.ooyala.android.OoyalaPlayer.prepareContent(OoyalaPlayer.java:1469) at com.ooyala.android.OoyalaPlayerContextSwitcher.processExitAdModes(OoyalaPlayerContextSwitcher.java:182) at com.ooyala.android.OoyalaPlayerContextSwitcher.processAdModes(OoyalaPlayerContextSwitcher.java:162) at com.ooyala.android.OoyalaPlayerContextSwitcher.startVideoWorkflow(OoyalaPlayerContextSwitcher.java:61) at com.ooyala.android.OoyalaPlayer.onCurrentItemChangeComplete(OoyalaPlayer.java:697) at com.ooyala.android.OoyalaPlayer.access$200(OoyalaPlayer.java:68) at com.ooyala.android.OoyalaPlayer$1$1.run(OoyalaPlayer.java:510) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.ja

更新CommonsWare @ 私が思うに、私は2番目のアプローチを使用しています。 exoplayerの依存関係は私の図書館グラデーションで見ることができます。

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.google.android.exoplayer:exoplayer:r1.5.7' 
compile 'com.android.support:support-v4:25.3.1' 
compile 'com.android.support:appcompat-v7:25.3.1' 
compile 'com.android.support:support-annotations:25.2.0' 

compile 'android.arch.lifecycle:runtime:1.0.0-alpha3' 
compile 'android.arch.lifecycle:extensions:1.0.0-alpha3' 
annotationProcessor 'android.arch.lifecycle:compiler:1.0.0-alpha3' 

testCompile 'junit:junit:4.12' 
} 
+1

**正確に**モジュール/ライブラリのAARファイルをどのように含めるかを説明してください。たとえば、これをどのように行っているかを示す[mcve]を提供することができます。 – CommonsWare

+0

@CommonsWare "コンパイル済みのAAR(またはJAR)ファイルを追加してください(ライブラリは既にビルド済みである必要があります): 1)ファイル>新規>新規モジュール。 2)インポート.JAR/.AARパッケージをクリックして、次へをクリックします。 3)コンパイル済みAARファイルまたはJARファイルの場所を入力し、完了をクリックします。 –

答えて

1

裸のJARまたはAARを頻繁に追加することはできません。特に、JARまたはAARが他のライブラリに依存する場合、JARまたはAARが「推移的な依存関係」と呼ばれる場合は機能しません。

Gradleに推移的依存関係を自動的に引き込ませるには、Gradleはその依存関係が何であるかを知る必要があります。このため2つのオプションがあります。

  1. アプリモジュールのbuild.gradleファイルが...

  2. ライブラリモジュール名であるアプリケーションモジュールのbuild.gradleファイルが...がアーティファクトグループ/ IDでcompile '...'を、持っているcompile project(':...')を、持っていますアーティファクト・リポジトリ内のアーティファクトとしてのAARのバージョン/

最初のケースでは、Gradleはトランその情報はライブラリモジュールのbuild.gradleファイルに含まれています。第2のケースでは、アーティファクト・リポジトリがAAR(例えば、Maven POMファイルの形式)と共にその情報を有するべきであるため、Gradleは推移的依存性を知る。

また、裸のAARをそのまま使用することもできますが、そのAARを使用しているアプリ(または他のライブラリ)は、そのAARの推移的な依存関係を自分自身のdependencies名簿で要求する必要があります。

+0

私の質問が更新されました。 –

+0

@AdnanKhan:ライブラリの 'build.gradle'ファイルは、ライブラリをアーティファクトリポジトリにアップロードする際にそのビルドによって生成されるPOMを含め、ライブラリ自体のビルドにのみ影響します。 #2では、アーチファクトリファレンスを使ってライブラリ内でアプリケーションをコンパイルする必要があるということです。 – CommonsWare

+0

@ComonsWare:ありがとう –

関連する問題