APK安裝解除安裝過程簡介
APK打包過程: 1.javac工具將*.java檔案進行轉換,轉換後通常得到一個*.class檔案; 2.dx工具對*.class檔案進行轉換,轉換後通常得到一個*.dex檔案; 3.通過aapt工具打包所有的資原始檔打包得到*.ap_檔案; 4.通過apkbuilder工具把前兩步得到的*.dex、*.ap_檔案打包生成apk。 注:dx、aapt工具均在D:\xxx\android-sdk-windows\build-tools\xxx\目錄下 aapt dump badging C:\Users\zqh\Desktop\shouqianbapos.apk >sodino.txt 檢視 AndroidManifest.xml 相關版本號資訊
APK的打包,簽名,驗證和安裝解除安裝機制 apk編譯過程總體概述 1)編譯資原始檔,生成R.java檔案 2)編譯AIDL檔案(包含java靜態庫檔案),生成相應的.java檔案 3)編譯java原始檔,生成.class檔案 4)將.class轉換為dex檔案 5)編譯資原始檔,生成.ap_包 6)將dex檔案新增到apk包 7)將JNI動態庫新增到apk包中 8)對apk檔案進行簽名 9)對apk包的儲存優化
安裝方式: 1.系統安裝:開機的時候,沒有安裝介面. 2.adb 命令安裝:通過abd命令列安裝,沒有安裝介面(adb install /pm install ) 3.應用市場安裝,這個要視應用的許可權,有系統的許可權無安裝介面(例如MUI的小米應用商店) 4.第三方安裝,有安裝介面,通過 packageinstaller.apk來處理安裝及解除安裝的過程的介面
應用安裝涉及到的目錄: /system/app:系統自帶的應用程式,獲得adb root 許可權才能刪除 /data/app:使用者程式安裝的目錄.安裝時把apk檔案複製到此目錄 /data/data:存放應用程式的資料 /data/dalvik-cache:將apk中的dex檔案安裝到dalvik-cache目錄下(dex檔案是dalvik虛擬機器的可執行檔案,當然,ART模式的可執行檔案格式為.aot,啟動ART時,系統會執行dex檔案轉換至aot檔案)
/data/system目錄: (1)packages.xml檔案.類似於Window的登錄檔,該檔案是解析apk時由writeLP()建立的,記錄了系統的permissons,以及解析apk的AndroidManifest獲取的應用name,codePath,flag,ts,version,userid等資訊,解析完apk後將更新資訊寫入這個檔案並儲存到flash,下次開機的時候直接從裡面讀取相關資訊並新增到記憶體相關列表中.當有apk升級,安裝或刪除時會更新這個檔案。
(2)package.list:指定應用的預設儲存位置/data/data/com.xx.xx;package.xml中包含了該應用申請的許可權,簽名和程式碼所在的位置等資訊系,並且兩者都有同一個userld.
每個應用都要一個userId的原因? 因為Android在系統設計上把每個應用當做Linux系統上的一個使用者對待,這樣就可以利用已有的Linux使用者管理機制來設計Android應用,比如應用目錄/應用許可權/應用程序管理等.
反編譯目錄: assets lib --------------- so庫存放位置,一般由NDK編譯得到 original res smali ------------- smali就是Dalvik VM內部執行的核心程式碼 unknown AndroidManifest.xml apktool.yml -------- 代表對程式的反編譯成功
其中: original--資料夾 1.MANIFEST.MF:這是摘要檔案.程式遍歷Apk包中的所有檔案(entry),對非資料夾非簽名檔案的檔案,逐個用SHA1生成摘要資訊,再用Base64進行編碼. 如果你改變了apk包中的檔案,那麼在apk安裝校驗時,改變後的檔案摘要資訊與MANIFEST.MF的檢驗資訊不同,於是程式就不能成功安裝. 2.CERT.SF:這是對摘要的簽名檔案.對前一步生成的MANIFEST.MF,使用SHA1-RSA演算法,用開發者的私鑰進行簽名.在安裝時只能使用公鑰才能解密它. 解密之後,將它與未加密的摘要資訊(即,MANIFEST.MF檔案)進行對比,如果相符,則表明內容沒有被異常修改. 3.CERT.RSA:檔案中儲存了公鑰、所採用的加密演算法等資訊.系統對簽名檔案進行解密,所需要的公鑰就是從這個檔案裡取出來的. 這三個檔案在apk META-INF資料夾
解壓目錄: assets lib META-INF------------<存放工程一些屬性檔案,例如Manifest.MF>--安全校驗檔案 res classes.dex-------------Java程式碼編譯得到的Dalvik VM能直接執行的檔案 AndroidManifest.xml resources.arsc--------------- 對res目錄下的資源的一個索引檔案,儲存了原工程中strings.xml等檔案內容
App打包、簽名、驗證和安裝機制(Gradle打包機制) 安裝過程:將app複製到data/app目錄下,掃描並解壓安裝包,並把dex檔案(DVM位元組碼)儲存到dalvik-cache目錄,並最終在data/data目錄下建立對應的應用資料目錄. 解析apk的AndroidManifest.xml檔案,第四步:顯示快捷方式 解除安裝過程就是:刪除在建立過程中三個路徑下產生的資料夾。
解除安裝過程: (1)從PMS的內部結構上刪除Activity,Service,Provider等資訊 (2)更新Settings裡面的package資訊 (3)刪除code,resource資訊 (4)刪除dex檔案 解除安裝時呼叫deletePackage()方法