編輯:Android資訊
在Android SDK Tools和Eclipse ADT 插件的第17版本 (revision 17)中,我們對Android項目的依賴關系管理做了很多改變。
我們所做的第一個改變是調整基於 Ant 的編譯系統和 Eclipse ADT 插件,使他們具有相同的行為。
Android 項目包含源代碼文件夾,以及對庫項目 (android library projects) 和 jar 文件的依賴。 不需要其他多余的設置,只需要在project.properties中添加對於庫項目的依賴,Android項目就會在動在 classpath 中添加以下依賴項:
這些依賴項,加上項目自身源代碼編譯的結果,被一起交給DEX工具,然後被轉化成字節碼從而打包到最終的APK當中。
因為一個項目可能依賴於好幾個使用相同的 jar 文件的庫項目,Android 編譯系統會檢查所有所需的 jar 文件,檢測出來自不同的庫項目的重復 jar 文件,並刪除這些重復的jar引用。這會防止可怕的”already added” DX錯誤。
下面介紹了系統如何發現重復引用。
重要的變化 我們已經改變了庫項目生成和打包R類的方式:
這意味著庫項目不能導入(import)另一個庫項目的R類。 其實這是沒有必要的,因為它們自身的R類包含所有必要的資源。
請注意,應用程序的項目仍然可以導入所引用的庫項目的R類,但是重申一遍,其實沒有必要這麼做, 因為他們本身的R類包括所有的資源。
由於不光包含庫項目,被稱為”Library Projects”的動態class path容器 (dynamic class path container) 已更名為“Android Dependancies”。
現在被庫項目引用的純 Java 項目也可以填充classpath容器。 如果這些Java項目也引用其他 Java 項目或 jar 文件,它們將被自動添加(現在也支持通過 user libraries引用的jar文件)。
重要: 僅當被引用的項被標記為”exported”時這才起作用。 請注意,默認情況下,當一個項目或jar文件被添加到項目的build path 中時是不會被標記為”exported”。
庫項目( 以及它們所引用的lib/*.jar文件)總是會被標記為”exported”。
重要: 如果你還在手動引用jar類庫,而不是把他們放在libs目錄下, 注意以下幾點:
下圖介紹了如何將Java項目和jar類庫標記為”exported”(Android Dependencies 容器不必被標為”exported”,反正它總是會被導出):
再次強調一下, 重復的引用(包括引用的項目和 jar 文件)會被自動發現並且刪除掉。
當一個項目引用了兩個庫項目,都需要相同的jar文件,編譯系統需要檢測和解決這種重復。
一個完整的依賴系統會將每個jar文件關聯到一個完全限定名 (fully qualified name) 和一個版本號,以決定使用哪個版本。
不幸的是,Android編譯系統暫時還沒有一個完整的依賴解析系統。 在此期間,我們按照下列規則實現了一個簡單的系統:
** 嚴格按照文件名來識別 jar 文件 **
這意味著 mylib.jar 和 mylib-v2.jar 是不同的兩個文件,雖然它們實際上是不同版本的同一個類庫, 他們都將被打包,從而可能導致 dx “already added” 錯誤。
對於具有相同文件名的 jar 文件,“相同版本”是指完全相同的文件。
目前,我們的檢測是非常基本的,只檢查這些文件是不是有相同的大小和sha1 值。
如果兩個庫都包含在他們的libs文件夾名為mylib.jar文件,但是這兩個文件是不同的,編譯系統將不能指出這種依賴錯誤。
解決的辦法: 如果它們是相同的類庫,確保兩個jar文件實際上是同一個。 如果是不同的兩個類庫,把他們重新命名為不同的jar包。
我們把這兩個庫當作特殊情況來處理, 因為-V13裡面包含一個完整-V4的版本。 如果發現兩者同時存在,只有V13被使用。
請注意,我們不能保證-V13中使用的-V4版本和其他老的類庫使用到的-V4版本是相同的。 我們建議,當您更新您的項目與新版本的support library,你在同一時間更新您的所有項目,無論他們使用-V4還是-V13。
本文將介紹在Android中如何使用include標簽來更便捷地重用布局代碼,從而減少冗余的Android代碼。 在一個Android項目中我們可能會需要用到相同
本文由碼農網 – 蘇耀東原創,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃! 簡介 本文介紹CircleProgressDialog開源庫的使用及
首先追溯到Activity的啟動,隨便啟動一個自己寫的demo項目,使用DDMS進行debug標記,然後在Debug中把主線程暫停,可以看到調用棧。如下圖所示:
測試驅動式編程(Test-Driven-Development)在RoR中已經是非常普遍的開發模式,是一種十分可靠、優秀的編程思想,可是在Android領域中這塊