1. 程式人生 > >編譯cling,然後在Eclipse下除錯Cling Android Demo Browser

編譯cling,然後在Eclipse下除錯Cling Android Demo Browser

DLNA多屏技術在智慧家居領域應用很廣,自己對這一塊也很有興趣,於是從 https://github.com/4thline/cling 上下載了原始碼來學習一下。

由於cling是一個通過maven構建的專案,先要通過mvn clean install下載依賴的jar和編譯cling-core。依賴的jar預設下載到.m2資料夾下。

編譯cling-core時,遇到了不少問題,

問題1: Surefire-plugin單元測試有問題

 

查到TestSuite裡的提示

Tests run: 340, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 62.359 sec <<< FAILURE!

readRecovering(org.fourthline.cling.test.resources.InvalidUDA10DeviceDescriptorParsingTest)  Time elapsed: 0.047 sec  <<< FAILURE!

org.fourthline.cling.binding.xml.DescriptorBindingException: Could not parse device descriptor: org.xml.sax.SAXParseException; lineNumber: 19; columnNumber: 21; 元素 

"dlna:X_DLNADOC" 的字首 "dlna" 未繫結。

根據提示查詢org.fourthline.cling.test.resources.InvalidUDA10DeviceDescriptorParsingTest程式碼,發現有檢測幾個xml,其中/invalidxml/device/missing_namespaces.xmlushare.xmldlna:X_DLNADOC,

missing_namespaces.xmlushare.xml下的<dlna:X_DLNADOC>DMS-1.00</dlna:X_DLNADOC> 遮蔽,再來

Tests run: 340, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 60.906 sec <<< FAILURE!

readRecovering(org.fourthline.cling.test.resources.InvalidUDA10DeviceDescriptorParsingTest)  Time elapsed: 0.047 sec  <<< FAILURE!

org.fourthline.cling.binding.xml.DescriptorBindingException: Could not parse device descriptor: org.xml.sax.SAXParseException; lineNumber: 20; columnNumber: 19; 元素 "pv:extension" 的字首 "pv" 未繫結。

同樣的,遮蔽

D:\Android DLNA\cling-master\core\src\test\resources\invalidxml\device\missing_namespaces.xml下<pv:extension>proxy</pv:extension>,再來

好吧,還是報錯

Tests run: 340, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 66.906 sec <<< FAILURE!

readFailure(org.fourthline.cling.test.resources.InvalidUDA10DeviceDescriptorParsingTest)  Time elapsed: 0.016 sec  <<< FAILURE!

org.testng.TestException: 

Method InvalidUDA10DeviceDescriptorParsingTest.readFailure(java.lang.String)[pri:0, instance:org.fourthli[email protected]31dcf0] should have thrown an exception of class org.fourthline.cling.binding.xml.DescriptorBindingException

拜讀https://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException,沒有收穫

沒辦法,把D:\Android DLNA\cling-master\core\src\test下的AllTests.tng.xml裡的

<test name="Description">

        <packages>

            <package name="org.fourthline.cling.test.resources"/>

        </packages>

</test>

遮蔽,不單元測試這一塊了,先跳過這一塊~

問題2:

 

環境變數加上ANDROID_HOME,指向ANDROID SDK~

 

下載android-15ANDROID_HOME

C:\android\adt-bundle-windows-x86\sdk\platforms\android-15

cling-core編譯成功~

然後,建立一個新的專案,將cling-master\demo\android\browser\src\main\java\org\fourthline\cling\demo\android\browser下的程式碼拷過來,同時將字串資源和AndroidManifest.xml也拷過來。


![依賴的jar,在.m2資料夾下]()

如果沒有新增或者遺漏了這些jar,就會導致類似Could not find class 'org.fourthline.cling.transport.impl.AsyncServletStreamServerImpl$1', referenced from method org.fourthline.cling.transport.impl.AsyncServletStreamServerImpl.createServlet的問題。


這裡要注意的是,其中依賴的javax.servlet、jetty-client、jetty-continuation、jetty-http、jetty-io、jetty-security、jetty-server、jetty-servlet、jetty-util一起匯入eclipse android工程時,會出現打包問題,提示包含多個about.html。要將這些jar解包,將裡面的about.html刪除,再重新打包成jar(zip解包打包),就可解決此問題。