常用名詞理解(APK,SDK,JDK,API,DLL)
阿新 • • 發佈:2019-01-30
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檔案有區別。
檔案格式
格式定義
在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 (注:編譯後的二進位制資原始檔)。開發環境
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替換現有的版本。[2] 在下面的內容中將從三個方面介紹zipalign: 1、zipalign如何優化 2、如何使用zipalign 3、使用zipalign的理由 根據官方文件的描述,Android系統中Application的資料都儲存在它的APK檔案中,同時可以被多個程序訪問,安裝的過程包括如下幾個步驟:[2] 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優化。[2] 預設下應用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,並讓你的使用者使用最新的版本。-
sdk
(軟體開發工具包)
API
API(Application Programming Interface,應用程式設計介面)其實就是作業系統留給應用程式的一個呼叫介面,應用程式通過呼叫作業系統的 API而使作業系統去執行應用程式的命令(動作)。其實早在DOS時代就有 API 的概念,只不過那個時候的 API 是以中斷呼叫的形式(INT 21h)提供的,在 DOS下跑的應用程式都直接或間接的通過中斷呼叫來使用作業系統功能,比如將AH置為 30h後呼叫INT 21h就可以得到DOS 作業系統的版本號。而在 Windows 中,系統 API 是以函式呼叫的方式提供的。同樣是取得作業系統的版本號,在 Windows 中你所要做的就是呼叫 GetVersionEx() 函式。 可以這麼說,DOSAPI 是 “Thinking in組合語言” 的,而 Windows API 則是 “Thinking in 高階語言” 的。 DOSAPI是系統程式的一部分,他們與系統一同被載入記憶體並且可以通過中斷向量表找到他們的入口,那麼 什麼是Windows API 呢?要說明白這個問題就不得不引入我們下面要介紹得這個概念——DLL。DLL
DLL,即 Dynamic Link Library(動態連結庫)。在 Windows 環境下含有大量 .dll格式的檔案,這些檔案就是動態連結庫檔案,其實也是一種可執行檔案格式。跟 .exe 檔案不同的是,.dll 檔案不能直接執行,他們通常由 .exe 在執行時裝入,內含有一些資源以及可執行程式碼等。其實 Windows 的三大模組就是以DLL的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),裡面就含有了 API函式的執行程式碼。為了使用 DLL 中的 API 函式, 必須要有 API 函式的宣告(.h)和其匯入庫(.lib),匯入庫可以先這樣理解:匯入庫是為了在 DLL 中找到 API 的入口點而使用的。 為了使用 API 函式,我們就要有跟 API 所對應的 .h 和 .lib 檔案,而 SDK 正是提供了一整套開發 Windows 應用程式所需的相關檔案、範例和工具的“工具包”。 SDK 包含了使用 API 的必需資料,所以人們也常把僅使用 API 來編寫 Windows 應用程式的開發方式叫做 “SDK程式設計”。而API和 SDK 是開發Windows應用程式所必需的東西,所以其它程式設計框架和類庫都是建立在它們之上的,比如VCL 和MFC,雖然他們比起 “SDK 程式設計” 來有著更高的抽象度,但這絲毫不妨礙我們在需要的時候隨時直接呼叫 API 函式 。與MOD的關係
遊戲中就有很多SDK工具包,可以開發MOD和資料片。 2017年-Vungle 推出 SDK V5,增加10 個新的互動式應用內視訊模板進一步增強消費者的廣告體驗 -新的模版將會植入Vungle最新的廣告埋點技術。-
jdk
(SunMicrosystems針對Java開發員的產品)