Android APK打包流程

目錄

    • 一、概述
    • 二、打包流程
      • 1、打包資源文件,生成R.java文件
      • 2、處理aidl文件,生成相應的Java文件
      • 3、編譯項目源代碼,生成class文件
      • 4、轉換所有的class文件,生成classes.dex文件
      • 5、打包生成APK文件
      • 6、對APK文件進行簽名
      • 7、對簽名后的APK文件進行對齊處理

一、概述

今天主要講一下Android程序的生成步驟,即Android打包成APK的流程。

通常情況下,在開發過程中打包APK是一件很簡單的事,主要可以通過兩種方式:

  • 用Eclipse或者Android Studio集成開發環境直接生成APK;
  • 使用Ant工具在命令行方式下打包APK。

不過不管哪種方式,打包APK的本質過程都是一樣的。

APK文件: 其實就是一個壓縮包,當你解壓以后會發現它內部主要就是資源文件classes.dex,這個classes.dex就是Android系統Dalvik虛擬機的可執行文件。

APK打包的流程圖:
在這里插入圖片描述

二、打包流程


1、打包資源文件,生成R.java文件

打包資源的工具是aapt(The Android Asset Packaing Tool),位于android-sdk/platform-tools目錄下。在這個過程中,項目中的AndroidManifest.xml文件布局文件XML都會編譯,然后生成相應的R.java

2、處理aidl文件,生成相應的Java文件

這一過程中使用到的工具是aidl(Android Interface Definition Language),即Android接口描述語言。位于android-sdk/platform-tools目錄下。aidl工具解析接口定義文件然后生成相應的Java代碼接口供程序調用。

如果在項目沒有使用到aidl文件,則可以跳過這一步。

3、編譯項目源代碼,生成class文件

項目中所有的Java代碼,包括R.java.aidl文件,都會變Java編譯器(javac)編譯成.class文件,生成的class文件位于工程中的bin/classes目錄下。

4、轉換所有的class文件,生成classes.dex文件

dx工具生成可供Android系統Dalvik虛擬機執行的classes.dex文件,該工具位于android-sdk/platform-tools 目錄下。

任何第三方的libraries.class文件都會被轉換成.dex文件

dx工具的主要工作是將Java字節碼轉成成Dalvik字節碼壓縮常量池消除冗余信息等。

5、打包生成APK文件

所有沒有編譯的資源(如images等)編譯過的資源和.dex文件都會被apkbuilder工具打包到最終的.apk文件中。

打包的工具apkbuilder位于 android-sdk/tools目錄下。apkbuilder為一個腳本文件,實際調用的是android-sdk/tools/lib/sdklib.jar文件中的com.android.sdklib.build.ApkbuilderMain類

6、對APK文件進行簽名

一旦APK文件生成,它必須被簽名才能被安裝在設備上。

在開發過程中,主要用到的就是兩種簽名的keystore。一種是用于調試的debug.keystore,它主要用于調試,在Eclipse或者Android Studio中直接run以后跑在手機上的就是使用的debug.keystore。另一種就是用于發布正式版本的keystore

7、對簽名后的APK文件進行對齊處理

如果你發布的apk是正式版的話,就必須對APK進行對齊處理,用到的工具是zipalign,它位于android-sdk/tools目錄下。

對齊的主要過程是將APK包中所有的資源文件距離文件起始偏移為4字節整數倍,這樣通過內存映射訪問apk文件時的速度會更快。

對齊的作用就是減少運行時內存的使用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446928.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446928.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446928.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用openssl,實現輸入和輸出都是字符串的類型,注意:輸入最好是16的倍數

頭文件crypto_util.h #pragma once#include <string>namespace hsm{namespace mgmt{void get_md5_digest(const std::string &data,uint8_t result[16]);std::string aes_encrypt_to_string(const std::string &string,const std::string &password);std::s…

Android Studio 安裝ASM插件

目錄一、安裝步驟1、Android Studio -> Preferences...2、Plugins -> Browse repositories...3、搜索ASM -> 選中要安裝的插件 -> 右側點擊Install4、安裝完后點擊Restart Android Studio5、Android Studio重啟后右側會有個ASM圖標6、找一個類右鍵 -> Show Byte…

使用openssl完成aes-cbc模式的數據加解密,輸入和輸出都是字符串的形式

代碼 #include <cstring> #include <memory>#include <openssl/aes.h> #include <openssl/md5.h>namespace hsm{namespace mgmt{void get_md5_digest(const std::string &data,uint8_t result[16]){MD5_CTX md5_ctx{};MD5_Init(&md5_ctx);MD5…

Android 網絡異常

目錄前言一、UnknownHostException1、網絡斷開驗證2、DNS 服務器意外掛掉驗證3、DNS 服務器故障驗證4、所需診斷信息二、ConnectTimeoutException三、SocketTimeoutException1、子錯誤 - 讀超時2、子錯誤 - SSL 握手超時3、子錯誤 - 未知原因四、HttpHostConnectException1、服…

Android ViewRoot、DecorViewWindow淺析

目錄簡介目錄1、VeiwRoot1.1、簡介1.2、特別注意2、DecorView2.1、定義2.2、作用2.3、特別說明3、Window4、Activity5、之間關系5.1、總結5.2、之間的關系簡介 DecorView為整個Window界面的最頂層View。DecorView只有一個子元素為LinearLayout。代表整個Window界面&#xff0c;…

Java集合Stream類

Java集合Stream類 ----按條件對集合進行過濾filter public class Test {public static void main(String[] args) {List<String>allnew ArrayList<>();all.add("ghjt");all.add("ghjiiii");Stream<String>streamall.stream();List<S…

使用openssl完成aes-ecb模式的數據加解密,輸入和輸出都是字符串類型

代碼 #include <cstring> #include <memory>#include <openssl/aes.h> #include <openssl/md5.h>namespace hsm{namespace mgmt{void get_md5_digest(const std::string &data,uint8_t result[16]){MD5_CTX md5_ctx{};MD5_Init(&md5_ctx);MD5…

Java Stream MapReduce大數據開發模型

實現一個購買商品后,對數據進行處理統計的功能. 將購買的商品信息保存在Orders類中 public class Orders {private String name;private double price;private int amount;public Orders(String name, double price, int amount) {this.name name;this.price price;this.am…

隨機函數的生成

函數代碼 #include <string>bool GenerateRandom(std::string *str,unsigned int len) {srand(time(NULL));for(unsigned int i0;i<len;i){switch(rand()%3){case 1:(*str).push_back(Arand()%26);break;case 2:(*str).push_back(arand()%26);break;default:(*str).p…

Android 為控件設置陰影

在Android中設置一個陰影很簡單&#xff0c;只需要兩步&#xff1a; 設置eleavation值&#xff08;高度&#xff09;添加一個背景或者outline &#xff08;即陰影的形狀&#xff09; 說明&#xff1a; View的大小位置都是通過x&#xff0c;y確定的&#xff0c;而現在有了z軸的…

Android在代碼中設置drawableLeft(Right/Top/Bottom)

根據業務的需要&#xff0c;要在代碼中設置控件的drawableLeft&#xff0c;drawableRight&#xff0c;drawableTop&#xff0c;drawableBottom屬性。 我們知道在xml中設置的方法為&#xff1a; android:drawableLeft"drawable/xxxxx"但是在代碼中并沒有相關的setDr…

Java 冒泡排序

冒泡排序–時間復雜度n^2 對數組序列從前向后依次比較相鄰兩個元素的大小,若逆序則兩個元素交換位置如果一趟下來沒有發生交換,則說明序列有序,可以在序列中設置一個標志flag判斷元素是否發生交換,從而來減少不必要的比較(在寫完排序算法后再寫)小結:一共進行數組大小-1次的外…

使用openssl開源AES算法,實現aes、aes-cbc和aes-ecb對字符串的加解密

注意事項 對于用戶輸入的密碼進行了md5運算&#xff0c;從而保證數據格式的統一性 內部調用的隨機函數&#xff0c;參考我的其他博文 參考鏈接 頭文件crypto_util.h #pragma once#include <string>namespace hsm{namespace mgmt{void get_md5_digest(const std::strin…

Android學習指南

目錄核心分析內容1、學什么1.1、Android基礎 & 常用1.2、Android進階1.3、與時俱進、熱門技術1.4、編程語言&#xff1a;Java與Java虛擬機1.5、計算機基礎1.6、總結2、怎么學2.1、學習路徑&#xff1a;如何循序漸進、階段性的學習Android的理論知識&#xff1f;2.2、獲取途…

使用memcmp函數判斷兩個函數的前n位字節數是否相等

memcmp函數的介紹 頭文件&#xff1a;#include <string.h>定義函數&#xff1a;int memcmp (const void *s1, const void *s2, size_t n);函數說明&#xff1a;memcmp()用來比較s1 和s2 所指的內存區間前n 個字符。字符串大小的比較是以ASCII 碼表上的順序來決定&#x…

java 選擇排序

選擇排序–時間復雜度n^2 第一次從arr[0]–arr[n-1]中選出最小值,與arr[0]交換 第二次從arr[1]–arr[n-1]中選出最小值,與arr[1]交換… 最小數:假定當前這個數是最小數,然后和后面的每個數進行比較,當發現有更小的數時,重定最小數與最小數的下標 總結: 選擇排序一共有數組大…

Linux環境下實現unsigned char*向string的轉換

代碼 unsigned char input_data[input_data_length] {"This is my first encrypted plaintext hello world"}; openssl_enc_string hsm::mgmt::aes_ecb_encrypt_to_string(static_cast<string>((const char * )input_data),password);使用static_cast<st…

概率論 事件關系 古典概型與幾何概型

基本知識點 隨機試驗:1.不確定性2.可預知性3.可重復性基本事件:包含一個樣本點 必然事件:全集 不可能事件:空集 子集2^n-1-1(減去空集與真集) 事件間的關系 1.包含關系 2.和運算AUBAB,A與B至少有一個發生 3.積事件A∩BAB,AB同時發生 4.差事件A-BAB ?A-AB,A發生但B不發生 5.…

Android代碼命名規范

目錄目錄1、為什么 規范 Android 代碼命名&#xff1f;2、Android需要命名的代碼&#xff08;對象&#xff09;有哪些&#xff1f;3、具體命名規范3.1、包3.2、類3.3、變量3.4、方法3.5、參數名3.6、資源3.6.1、布局文件資源3.6.2、圖片資源3.6.3、參數值資源3.6.4、動畫資源3.…

安卓牛客專項練習2020.12.10

安卓Activity活動 Android的Activity活動中&#xff0c;我們一般可以歸結為四種狀態: 1.運行狀態Running 2.暫停狀態Paused 3.停止狀態Stopped 4.銷毀狀態Destroyed 動畫Animation 1.補間動畫TWeen Animation 其中包括: 平移Translate Animation 透明Alpha Animation 旋轉Ro…