大多數狀況咱們作的應用eclipse開發編譯,最後還剩要在源碼下編譯過達到工程化。但確定不少朋友也遇到過這個問題: html
源碼編譯出的apk顯示出來和eclipse編譯的不同
前面做者有篇文章講到過這問題,但並不是特別肯定是不是android:targetSdkVersion引發的。 java
這裏做者記錄下相似的問題,不少應用都須要使用多分辨率,好不容易再加了一套超清1080p的資源和佈局,eclipse編譯測試經過,然而在
android源碼裏編譯出來運行時卻提示找不到資源文件。 android
最後對比2個apk,發現源碼默認編譯時,drawable_hdpi文件夾沒編譯進去 eclipse
這什麼緣由呢? ide
分析下android的源碼編譯過程和build目錄中的選項,這裏主要看下編譯的第一步,打包資源文件。具體的所有編譯過程,
http://blog.csdn.net/luoshengyang/article/details/8744683老羅灰常給力的說的很清楚,不過篇幅有點長,仍是很難看懂,多看幾遍O(∩_∩)O~
佈局
我這裏遇到的問題就是由於下面這個緣由致使的eclipse和android源碼編譯的差別:
在源碼目錄build/target/product/generic.mk中加入一句: 測試
CUSTOM_LOCALES:= hdpi默認是不編譯hdpi資源的 ,加上以後,就會編譯出這drawable-hdpi資源文件夾。這在多分辨率設備上不少遇到運行時找不到資源的異常,多是此問題致使的
這裏來看下android系統是怎麼選擇正確的資源文件的?
http://developer.android.com/guide/topics/resources/providing-resources.html#LocaleQualifier
官網上面是這麼說的: ui
Locale = en-GB
Screen orientation = port
Screen pixel density = hdpi
Touchscreen type = notouch
Primary text input method = 12key
再上面表格中定義的限定符的優先級(表格從上到下的順序),來遍歷apk中的res目錄,排除不符合的限定符的文件夾,到剩下最後一個爲止。 spa
但這裏做者有個很重要的疑問:這個devive configuration是在哪裏獲取?prop屬性裏麼?但願知道的朋友能指點,thks .net
感受是不該該每一個設備都有一個這樣的配置文件?
多是每一個設備的配置不一樣,致使最後沒有刷選到合適匹配的資源文件;
故有些機子要適應多分辨率,必定要設置如上圖nodpi這個修飾符,緣由就有多是他們的配置中包含着nodpi。
做者把nodpi去掉,運行時就提示找不到資源,但在另外一臺不一樣廠家的設備上就沒問題