2017-08-12 79 views
1

我用我的图书馆这对ExoStreamPlayer依赖的AAR文件相关。如果我将库的源代码作为模块包含在android studio项目中,但是如果我包含模块/库的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我想,我使用的是第二种方法。您可以在我的图书馆渐变中看到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我遵循https://developer.android.com上的指导原则,它们是: “添加已编译的AAR(或JAR)文件(该库必须已经生成): 1)单击File> New> New Module 。 2)单击导入.JAR/.AAR包,然后单击下一步。 3)输入编译AAR或JAR文件的位置,然后单击Finish(完成)” –

回答

1

经常添加裸露的JAR或AAR不起作用。尤其是,如果JAR或AAR依赖于其他库,称为“传递依赖性”,它将不起作用。

要获得摇篮到传递依赖自动拉,摇篮需要知道这些依赖关系。有两种可选方式:

  1. 的应用模块的build.gradle文件有compile project(':...'),其中...是库模块名称

  2. 的应用模块的build.gradle文件有compile '...',其中...是神器组/ ID /版本作为工件存储库中的工件

在第一种情况下,Gradle知道tran因为该信息位于库模块的build.gradle文件中。在第二种情况下,Gradle知道传递依赖关系,因为工件存储库应该将该信息与AAR一起(例如,以Maven POM文件的形式)。

或者,您可以使用裸露的AAR,但使用该AAR的应用程序(或其他库)需要通过其自己的dependencies名单请求所有AAR的传递依赖关系。

+0

我已经更新了我的问题PLZ有它看看。 –

+0

@AdnanKhan:图书馆的'build.gradle'文件只影响构建库本身,包括可能通过构建生成的库上传到一个神器库的一部分的任何POM的。在#2中,我的意思是应用程序需要使用工件引用在库中进行编译。 – CommonsWare

+0

@ComonsWare:谢谢 –