1.1.1 Android系統架構
Android大致分為4層架構:Linux核心層、系統執行庫層、應用框架層和應用層。
1.Linux核心層
android系統基於Linux核心的,這一層為Android裝置的各種硬體提供了底層的驅動,如:顯示驅動、音訊驅動、照相機驅動、Wi-Fi驅動、電源管理等。
2.系統執行庫層
這一層透過一些C/C++庫為Android系統提供了主要的特性支援。如SQLite庫提供了資料庫的支援,OpenGL/ES庫提供了3D繪圖的支援,Webkit庫提供了瀏覽器核心的支援等。
在這一層還有android執行時庫,它主要提供了一些核心庫,允許開發者使用java語言來編寫Android應用。另外Android執行時庫中還包含了Dalvik虛擬機器(Android5.0系統之後改為ART執行環境),它使得每一個Android應用都能執行在獨立的程序中,並且擁有一個自己的虛擬機器例項。相較於java虛擬機器,Dalvik和ART都是專門為移動端裝置定製的,它針對手機記憶體、CPU效能有限等情況做了最佳化處理。
3.應用框架層
這一層主要提供了構建應用程式時可能用到的各種API,android自帶的一些核心應用就是使用這些API完成的,開發者可以使用這些API來構建自己的應用程式。
4.應用層
所有安裝在手機上的應用程式都是屬於這一層的,比如系統自帶的聯絡人、簡訊等程式,或者是你從Google Play上下載的小遊戲,當然還包括你自己開發的程式。
結合圖1.1會理解的更深。
Android系統架構
1.2.1 app目錄下程式碼混餚介紹
1.找到proguard-rules.pro 檔案
這個檔案用於指定專案程式碼的混餚規則,當代碼開發完成後打包成安裝包檔案,如果不希望程式碼被別人破解,通常會將程式碼進行混餚,從而讓破解者難以閱讀。
2.開啟混餚規則的開關
在app目錄下找到build.gradle檔案,分析看一下buildTypes閉包,buildTypes閉包中用於指定生成安裝配置檔案的相關配置,通常只會有兩個子閉包:一個是debug,一個是release。debug閉包用於指定生成測試版安裝檔案的配置,release閉包用於指定生成正式版安裝檔案的配置。另外debug閉包可以忽略不寫的,因此我們看到一般專案中只有release閉包。
下面介紹一下release閉包裡面的具體內容:
minifyEnabled用於指定是否對專案的程式碼進行混餚,true表示混餚,false表示不混餚。proguardFiles用於指定混餚時指定的規則檔案,一般專案指定了兩個檔案:第一個proguard-android-optimize.txt是在<Android SDK>/tools/proguard目錄下的,裡面是所有專案通用的混餚規則;第二個proguard-rules.pro是在當前目錄根目錄下的,裡面可以編寫當前專案特有的混餚規則。
方便理解看圖:1.2.1
1.2.1