好比,我程序中用到ListView這個類,ListView來自於對應編譯版本的sdk,那麼在打包應用apk時,會將sdk中的ListView一塊兒打包到apk中麼。android
換句話說:安裝在手機上的應用,應用中用到的ListView是依賴手機系統?api
再換句話說:安裝在手機上的應用,用到的ListView,這個SDK提供的api的內部的代碼邏輯,是跟着系統變化,仍是在應用打包的時候就已經肯定?ui
另外:這和Android的編譯版本,目標版本之間有什麼的關係呢?blog
答:編譯器
不會帶在apk裏面,用的系統的,所謂系統定製,就包括這些標準組件的默認外觀。編譯
它的代碼在/system/framework/framework.jar裏面,它包含了全部系統自帶的標準組件,包括View、Button。。以及你說的ListView等。gui
這是android標準組件,編譯器在編譯時只是引用一下,能編譯經過就行,實際上你的apk裏面並無這些標準組件的實現代碼。擴展
apk在設備裏面啓動後默認會將framework.jar加載進來,因此你的的apk運行的時候會有這些代碼。打包
另外,android-support-v4.jar或者v7裏面的擴展組件是會編譯到apk裏面去的,由於它並非android的標準組件。List
** android.jar是你建工程的時候默認引進去設置爲不編譯代碼到apk裏面的,它對應系統裏面的framework.jar**
最直接驗證的方法,用jd-gui反編譯看下,你會發現裏面只有你本身的代碼和第三方jar包的代碼
包不包含代碼和編譯版本、目標版本不要緊
編譯版本即你編譯時使用的api版本(android.jar版本)
目標版本,系統不會對該版本作兼容處理,對更高版本會按照該版本的處理方式作兼容處理