2017-08-12 205 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:謝謝 –