編輯:關於Android編程
在了解這個問題之前我們先要來看看Android 應用編譯的過程:
AndroidManifest.xml
文件,為Activity定義的 XML 文件等等。在這個編譯過程中也會產生一個 R.java
文件,這樣你就可以在你的Java代碼中引用這些資源了。.aidl
接口轉換成Java接口。R.java
和 .aidl
文件,都會被Java編譯器編譯,然後輸出 .class 文件。.dex
文件。同時項目中包含的所有第三方類庫和 .class 文件也會被轉換成 .dex
文件,這樣講方便下一步被打包成最終的 .apk
文件。.apk
文件。.apk
文件被構建好之後,如果要把把它安裝到設備上面去的話,它就必須用一個debug 或者發行key來對這個apk文件簽名。.apk
進行對齊優化。這樣的話可以減少應用程序在設備上的內存消耗。
我們注意到在第四步的時候,會產生一個.dex
文件。Android 從之前的Dalvik 到現在Android 5.0 默認的ART 運行時環境都能夠執行這個.dex
文件,它們還使用同一套指令集,即Dalvik 指令集。通過這篇關於Android 指令集格式的介紹文章中,我可以知道Dalvik 指令集是使用16位寄存器來保存項目中所有的方法引用,包括第三方的方法:
invoke-kind {vC, vD, vE, vF, vG}, meth@BBBB B: method reference index (16 bits)
這就意味著 Android的單個.dex
文件最能引用65536個方法,在這之後的方法就無法引用了。這就是Android Dex 方法限制異常出現的原因,同時因為ART和Dalvik使用同一套指令集,這個限制在ART 運行時環境中也會存在。
第三方庫裡面包含太多的方法。這裡就拿Google Play Service和Guava來舉例。很多Android開發者都會用到Google Play Service庫和Guava庫,而你知道它們提供了多少了方法嗎?Google Play Service 5.0裡面就差不多包含了將近20k+方法,Guava提供了將近14k個方法。這個兩個庫就將近占了方法限制數目65536的半壁江山。
對於內部原因:
.dex
文件中的,那麼我們可以在一個apk中使用多個.dex
文件嗎?可以,Android 官方博客就給出了這個方案。(在Android5.0之前,由於大部分使用的是Dalvik 運行時環境,Dalvik 運行時環境限制一個apk只能包含一個classes.dex文件。)
對於外部原因:
主要思路:使用multidex support library 讓Android5.0之前的版本也能在一個apk裡面包含多個.dex
文件。具體使用方法請參看這篇文章。
Google不僅在工具上面做出了改進,還把自己的Google Play Service庫也做了一番改動——從Google Play Service 6.5開始開始支持更細精度的依賴管理,也就是說你只需要Google Drive的api,而不需要google game,maps或者wallet等api的支持,那你就可以只引入Google Drive的api即可。這樣可以在很大程度上減少Dex 方法限制出現的幾率
MVP模式是MVC模式在Android上的一種變體,要介紹MVP就得先介紹MVC。在MVC模式中,Activity應該屬於view這一層,而在實際開發中,它既承擔了vi
一、需求有時候應用需要在內部切換語言但又不影響系統的語言,比如是應用現在是中文的,系統語言也是中文的,我把應用的切換成英文顯示後系統語言還是中文的,系統語言切換後也不會被
Android事件構成在Android中,事件主要包括點按、長按、拖拽、滑動等,點按又包括單擊和雙擊,另外還包括單指操作和多指操作。所有這些都構成了Andro
Focus on not stopping the user and all else will follow(專注於不打算用戶並讓一切後續跟