apk

apk

APK是AndroidPackage的縮寫,即Android安裝包(apk)。APK是類似Symbian Sis或Sisx的檔案格式。通過將APK檔案直接傳到Android模擬器Android手機中執行即可安裝。

apk檔案和sis一樣,把android sdk編譯的工程打包成一個安裝程式檔案,格式為apk。 APK檔案其實是zip格式,但後綴名被修改為apk,通過UnZip解壓後,可以看到Dex檔案,Dex是DalvikVM executes的簡稱,即Android Dalvik執行程式,並非Java ME的位元組碼而是Dalvik位元組碼。Android在運行一個程式時首先需要UnZip,然後類似Symbian那樣直接,和Windows Mobile中的PE檔案有區別。

基本介紹

  • 外文名:AndroidPackage
  • 分類:檔案格式
  • 用途安卓安裝包
  • 縮寫:apk
檔案格式,格式定義,檔案結構,開發環境,apk反編譯,

檔案格式

格式定義

在Android平台中,dalvik vm的執行檔案被打包為apk格式,最終運行時載入器會解壓,然後獲取編譯後的androidmanifest.xml檔案中的permission分支相關的安全訪問,但仍然存在很多安全限制,如果你將apk檔案傳到/system/app資料夾下,會發現執行是不受限制的。安裝的檔案可能不是這個資料夾,而在androidrom中,系統的apk檔案默認會放入這個資料夾,它們擁有著root許可權。

檔案結構

1. META-INF\(註:Jar檔案中常可以看到);
2. res\(註:存放資源檔案的目錄);
3. AndroidManifest.xml(註:程式全局配置檔案);
4. classes.dex(註:Dalvik位元組碼);
5. resources.arsc(註:編譯後的二進制資源檔案)。

開發環境

Android是一個基於Java的開發環境,它是一種與廣被接受的 Java極為類似,而且也比C++容易得多的開發語言,這是一種規範的移動開發環境。Google也在API文檔的書寫和樣例的提供上做了很出色的工作。
獲取SDK
下載並安裝android的SDK[軟體開發套件],這套SDK主要包括有核心庫檔案,一個模擬器,開發工具和一些示範的樣例檔案。推薦使用Eclipse 和androideclipse 擴展。如果只是使用android,Eclipse IDE就已經足夠了,但如果是第一次開發Java套用,建議下載完整的Java SE 開發工具 (JDK) 因為它包括簽發應用程式所需要的工具。
套用架構
android套用架構很關鍵,如果不學習它,設計出來的遊戲將是一種很難修復bug的產品。 需要了解應用程式、活動、Intents以及它們是如何互相聯繫互動的,Google在這兒提供了良好的信息架構。真正重要的是,要理解為什麼在設計的遊戲中,需要不止一個的活動進程,以及如何設計一個用戶體驗良好的遊戲。這些都應當配合到套用的生命周期中。
套用的生命周期
套用的生命周期是由AndroidOS作業系統進行管理的,活動進程都將做為系統命令進行創建,正確處理這些事件對一個應用程式來說是極為重要的,因為終端用戶不會知道什麼是正確的。最好在開始設計遊戲之前搞明白這些,因為這有助於節省調試時間以及避免代價高昂的重新設計。對大多數套用而言,默認設定即可開始工作,但對遊戲而言,可能需要調整單態實例的信號為打開。在默認情況下,Android會新建一個活動實例進程,因為它認為這是比較合適的,而遊戲,可能只希望有一個活動的實例進程,這有一點兒影響,它需要了解一些系統狀態的管理。

apk反編譯

apk反編譯就是通過使用apk編譯工具,將apk檔案中的源檔案和資源反編譯出來,得到的源檔案和資源檔案可以進行處理後再進行編譯,以達到個性化定製、漢化apk等目的。
apk反編譯工具
1.最典型的apk編譯工具的核心是apktool,但是因為操作需要調用cmd命令,所以出現了很多具有可視化界面的各種編譯工具,像easyapk、apkdb、doapk。
2.dex2jar.jar,將apk中的classes.dex轉化成Jar檔案,再通過jd-gui工具反編譯jar檔案。
apk編譯方法
使用apkdb編譯apk檔案,只需要在安裝apkdb後,直接右擊反編譯就可以將apk檔案反編譯出來。
1.使用原生apktool工具,需要將apktool的兩個檔案釋放到window目錄下,在cmd中使用 apktool d apk檔案名稱命令來編譯apk檔案,此時命令行的執行目錄與apk檔案所在目錄必須一致。
2.首先將apk檔案,將後綴改為zip,解壓,得到其中的classes.dex,它就是java檔案編譯再通過dx工具打包而成的;將classes.dex複製到dex2jar.bat所在目錄。在命令行下定位到dex2jar.bat所在目錄,運行 dex2jar.bat classes.dex。
Android SDK中包含了一個用於最佳化APK的新工具zipalign。它提高了最佳化後的Applications與Android系統的互動效率(俗話:“要致富先修路”,Android小組重新為Applications與Android系統之間搭建了一條高速公路),從而可以使整個系統的運行速度有了較大的提升。Android小組強烈建議開發者在發布新Apps之前使用zipalign最佳化工具,而且對於已經發布但不受限於系統版本的Apps,建議用最佳化後的APK替換現有的版本。
在下面的內容中將從三個方面介紹zipalign:
1.zipalign如何最佳化
2.如何使用zipalign
3.使用zipalign的理由
根據官方文檔的描述,Android系統中Application的數據都保存在它的APK檔案中,同時可以被多個進程訪問,安裝的過程包括如下幾個步驟:
1.Installer通過每個apk的manifest檔案獲取與當前應用程式相關聯的permissions信息。
2.Home application讀取當前APK的Name和Icon等信息。
3.System server將讀取一些與Application運行相關信息,例如:獲取和處理Application的notifications請求等。
4.最後,APK所包含的內容不僅限於當前Application所使用,而且可以被其它的Application調用,提高系統資源的可復用性。
zipalign最佳化的最根本目的,是幫助作業系統更高效率的根據請求索引資源,將resource-handling code統一將Data structure alignment(數據結構對齊標準:DSA)限定為4-byte boundaries。如果第一次接觸有關Data structurealignment的內容,強烈建議搜尋更多與其相關的內容,來充分理解這樣做的最終目的,這也是理解zipalign工作原理的關鍵。 如果不採取對齊的標準,處理器無法準確和快速的在記憶體地址中定位相關資源。
目前的系統中使用fallbackmechanism機制處理那些沒有套用DSA標準的應用程式,這的確大大的方便了普通開發者,無需關注繁瑣的記憶體操作問題。但是相反,對於這樣的應用程式將給普通用戶帶來一定的麻煩,不但影響程式的運行的效率,而且使系統的整體執行效率下降和占用大量不必要的記憶體資源,甚至消耗一定的電池資源(battery life)。
在Android SDK中提供了三種套用Align操作的方法:
1.使用ADT
從ADT 0.9.3版本開始,可以通過export wizard自動對發布的applicationpackages執行align操作。
設定方法:滑鼠右鍵點擊Project,然後選擇“Android Tools” > “ExportSigned Application Package…”。或者可以直接在AndroidManifest.xml中設定。
2.使用Ant:
對於API Level 大於等於4的Application Packages可以直接通過Ant build script來Align最佳化。但對於API Level小於4的情況,只能採取手動Align最佳化。
默認下套用Ant build script運行Debug packages(API Level >= 4)時,將自動執行Align最佳化。
針對Release packages。當使用Ant build script執行Align最佳化時,首先需要擁有足夠的信息來Sign packages。當完成Signing之後, 才能執行Align最佳化。通過官方文檔了解如何Sign Packages。
3.手動執行Align最佳化:
利用tools資料夾下的zipalign工具。
首先調出cmd命令行,然後執行:zipalign -v 4 source.apk androidres.apk。
這個方法不受API Level的限制,可以對任何版本的APK執行Align最佳化。
同時可以利用zipalign工具檢查當前APK是否已經執行過Align最佳化。
命令:zipalign -c -v 4 androidres.apk
再一次提醒開發者,立刻套用zipalign工具強制最佳化已經發布的application packages,並讓你的用戶使用最新的版本。

相關詞條

熱門詞條

聯絡我們