1. 程式人生 > >常用名詞理解(APK,SDK,JDK,API,DLL)

常用名詞理解(APK,SDK,JDK,API,DLL)

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 (注:編譯後的二進位制資原始檔)。

開發環境

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替換現有的版本。[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

 

(軟體開發工具包)

 
軟體開發工具包(外語首字母縮寫:SDK、外語全稱:SoftwareDevelopmentKit)一般都是一些軟體工程師為特定的軟體包軟體框架硬體平臺、作業系統等建立應用軟體時的開發工具的集合。 軟體開發工具包括廣義上指輔助開發某一類軟體的相關文件、範例和工具的集合。 軟體開發工具包是一些被軟體工程師用於為特定的軟體包、軟體框架、硬體平臺、作業系統等建立應用軟體的開發工具的集合,一般而言SDK即開發 Windows 平臺下的應用程式所使用的 SDK。它可以簡單的為某個程式設計語言提供應用程式介面 API的一些檔案,但也可能包括能與某種嵌入式系統通訊的複雜的硬體。一般的工具包括用於除錯和其他用途的實用工具。SDK 還經常包括示例程式碼、支援性的技術註解或者其他的為基本參考資料澄清疑點的支援文件。 為了鼓勵開發者使用其系統或者語言,許多 SDK 是免費提供的。軟體工程師通常從目標系統開發者那裡獲得軟體開發包,也可以直接從網際網路下載,有時也被作為營銷手段。例如,營銷公司會免費提供構件SDK 以鼓勵人們使用它,從而會吸引更多人由於能免費為其程式設計而購買其構件。 SDK 可能附帶了使其不能在不相容的許可證下開發軟體的許可證。例如產品供應商提供一個專有的 SDK 可能與自由軟體開發抵觸。GPL 能使 SDK 與專有軟體開發近乎不相容。LGPL 下的 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.dllUser32.dllGDI32.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開發員的產品)

JDK是 Java 語言的軟體開發工具包,主要用於移動裝置、嵌入式裝置上的java應用程式。JDK是整個java開發的核心,它包含了JAVA的執行環境,JAVA工具和JAVA基礎的類庫。