国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

深入詳解Apk編譯打包流程

移動開發 Android
使用aapt來打包res資源文件,生成R.java、resources.arsc和res文件(二進制 & 非二進制如res/raw和pic保持原樣)。

[[430397]]

前言

身為一個Android開發,一定要了解apk編譯打包流程;

那么今天我們就來學習下;

apk的編譯流程

1、apk文件

  • apk是Android Package的縮寫;
  • 解壓apk文件后包含AndroidManifest.xml、assets目錄、classes.dex(還可能有 classes2.dex,classes3.dex...classesN.dex)、lib目錄、META-INF目錄、res目錄和resources.arsc;
  • classes.dex 是.dex文件;
  • resources.arsc是resources resources文件;
  • AndroidManifest.xml是AndroidManifest.xml文件;
  • res是uncompiled resources;
  • META-INF是簽名文件夾;

2、打包流程

打包中需要的工具

  • aapt:Android資源打包工具,${ANDROID_SDK_HOME}/platform-tools/appt
  • aidl:Android接口描述語言轉化為.java文件的工具,${ANDROID_SDK_HOME}/platform-tools/aidl
  • javac:Java Compiler,${JDK_HOME}/javac或/usr/bin/javac
  • dex:轉化.class文件為Davik VM能識別的.dex文件,${ANDROID_SDK_HOME}/platform-tools/dx
  • apkbuilder:生成apk包,${ANDROID_SDK_HOME}/tools/opkbuilder
  • jarsigner:.jar文件的簽名工具,${JDK_HOME}/jarsigner或/usr/bin/jarsigner
  • zipalign:字節碼對齊工具,${ANDROID_SDK_HOME}/tools/zipalign

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

使用aapt來打包res資源文件,生成R.java、resources.arsc和res文件(二進制 & 非二進制如res/raw和pic保持原樣);

res目錄

  • animator:這類資源以XML文件保存在res/animator目錄下,用來描述屬性動畫;
  • anim:這類資源以XML文件保存在res/anim目錄下,用來描述補間動畫;
  • color:這類資源以XML文件保存在res/color目錄下,用描述對象顏色狀態選擇子;
  • drawable:這類資源以XML或者Bitmap文件保存在res/drawable目錄下,用來描述可繪制對象。例如,我們可以在里面放置一些圖片(.png, .9.png, .jpg, .gif),來作為程序界面視圖的背景圖;
  • layout:這類資源以XML文件保存在res/layout目錄下,用來描述應用程序界面布局;
  • menu:這類資源以XML文件保存在res/menu目錄下,用來描述應用程序菜單;
  • raw:這類資源以任意格式的文件保存在res/raw目錄下,它們和assets類資源一樣,都是原裝不動地打包在apk文件中的,不過它們會被賦予資源ID,這樣我們就可以在程序中通過ID來訪問它們。例如,假設在res/raw目錄下有一個名稱為filename的文件,并且它在編譯的過程,被賦予的資源ID為R.raw.filename,那么就可以使用以下代碼來訪問它:
  1. Resources res = getResources(); 
  2.  
  3. InputStream is = res .openRawResource(R.raw.filename); 
  • values:這類資源以XML文件保存在res/values目錄下,用來描述一些簡單值,例如,數組、顏色、尺寸、字符串和樣式值等,一般來說,這六種不同的值分別保存在名稱為arrays.xml、colors.xml、dimens.xml、strings.xml和styles.xml文件中;
  • xml:這類資源以XML文件保存在res/xml目錄下,一般就是用來描述應用程序的配置信息;

resources.arsc文件

  • resources.arsc這個文件記錄了所有的應用程序資源目錄的信息,包括每一個資源名稱、類型、值、ID以及所配置的維度信息;
  • 我們可以將這個resources.arsc文件想象成是一個資源索引表,這個資源索引表在給定資源ID和設備配置信息的情況下,能夠在應用程序的資源目錄中快速地找到最匹配的資源;

R.java文件

  • R.java文件,里面擁有很多個靜態內部類,比如layout,string等;
  • 每當有這種資源添加時,就在R.java文件中添加一條靜態內部類里的靜態常量類成員,且所有成員都是int類型;

2.2處理AIDL文件,生成對應的.java文件

  • AIDL (Android Interface Definition Language), Android接口定義語言,Android提供的IPC (Inter Process Communication,進程間通信)的一種獨特實現;
  • 這個階段處理.aidl文件,生成對應的Java接口文件;

2.3編譯Java文件,生成對應的.class文件

  • 編譯工程源碼,生成相應的class文件。處理文件包括src、R.java、AIDL生成的 java 文件,庫jar文件;
  • 調用了javac編譯工程的src目錄下所有的java源文件,生成的class文件位于工程的bin\classess目錄下;

2.4把.class文件轉化成Davik VM支持的.dex文件

  • 轉換所有的class文件,生成classes.dex文件。處理文件就是上一步生成的 .class 文件;
  • 使用dx工具將java字節碼轉換為dalvik字節碼、壓縮常量池、消除冗余信息等;
  • 通過dex命令,將.class文件和第三方庫中的.class文件處理生成classes.dex;

2.5打包生成未簽名的.apk文件

  • 將classes.dex、resources.arsc、res文件夾(res/raw資源被原裝不動地打包進APK之外,其它的資源都會被編譯或者處理)、Other Resources(assets文件夾)、AndroidManifest.xml打包成apk文件;

注意:

res/raw和assets的相同點:

兩者目錄下的文件在打包后會原封不動的保存在apk包中,不會被編譯成二進制;

res/raw和assets的不同點:

  • res/raw中的文件會被映射到R.java文件中,訪問的時候直接使用資源ID即R.id.filename;assets文件夾下的文件不會被映射到R.java中,訪問的時候需要AssetManager類;
  • res/raw不可以有目錄結構,而assets則可以有目錄結構,也就是assets目錄下可以再建立文件夾;

2.6對未簽名.apk文件進行簽名

  • android的應用程序需要簽名才能在android設備上安裝,簽名apk文件有兩種情況:
  • 在調試應用程序時,也就是我們通常稱為的debug模式的簽名,平時開發的時候,在編譯調試程序時會自己使用一個debug.keystore對apk進行簽名;
  • 正式發布時對應用程序打包進行簽名,這種情況下需要提供一個符合android開發文檔中要求的簽名文件。這種簽名也是分兩種:JDK中提供的jarsigner工具簽名 、android源碼中提供的signapk工具;

2.7對簽名后的.apk文件進行對齊處理

  • release mode 下使用 aipalign進行align,即對簽名后的apk進行對齊處理;
  • Zipalign是一個android平臺上整理APK文件的工具,它對apk中未壓縮的數據進行4字節對齊,對齊后就可以使用mmap函數讀取文件,可以像讀取內存一樣對普通文件進行操作。如果沒有4字節對齊,就必須顯式的讀取,這樣比較緩慢并且會耗費額外的內存;
  • 在 Android SDK 中包含一個名為 “zipalign” 的工具,它能夠對打包后的 app 進行優化。其位于 SDK 的 build-tools 目錄下;

總結 

人生很有意思,就像升級打怪,打了一怪又一怪,雖然過程有辛苦有困難,有失敗的危險,也有后退的風險,但是打一怪很有感覺;加油打工人!!!

 

責任編輯:武曉燕 來源: Android開發編程
相關推薦

2015-07-13 15:52:18

反編譯Android APK

2017-07-13 13:13:49

AndroidAPK反編譯

2023-07-12 13:25:17

Vue 2模版編譯

2013-05-14 10:39:27

AIR Android打包APK文件

2022-02-07 07:48:17

MyBatisJavaORM

2009-12-23 17:42:37

WPF Control

2011-01-19 17:13:44

Sylpheed

2011-09-13 17:30:41

Eclipse And

2009-12-24 17:06:35

編譯Fedora內核

2010-01-13 16:55:10

CentOS PHP安

2015-12-24 09:48:40

JavaScriptthis指針深

2009-12-25 14:03:46

Linux vi

2010-06-29 15:29:22

UML建模流程

2021-10-29 16:36:53

AMSAndroidActivityMan

2010-10-20 13:43:37

C++編譯器

2010-01-14 16:53:40

CentOS Apac

2015-12-30 10:29:40

Git協作流程詳解

2009-07-24 09:24:31

Java終止函數

2009-11-04 14:19:32

寬帶接入技術

2009-10-19 13:33:45

綜合布線施工規范
點贊
收藏

51CTO技術棧公眾號

久久亚洲中文字幕无码| 午夜不卡av免费| thepron国产精品| 国产精品美女呻吟| 免费观看亚洲| 欧美日韩免费| 成人免费一区二区三区视频| 亚洲系列中文字幕| 中文字幕久久综合| 大桥未久女教师av一区二区| 国产在线不卡一区| www.成人av| 精品三级国产| 日韩美女在线视频| 黄色的视频在线免费观看| 日韩精品成人| 蜜臀av一级做a爰片久久| 欧美亚洲成人精品| 色综合视频一区二区三区日韩| 日本韩国欧美三级| 人成在线视频| 国产精品久久久久影院| 欧美极品少妇xxxxⅹ喷水| 欧美深夜福利视频| 最新亚洲视频| 亚洲一区二区久久久久久久| 91综合久久爱com| 久久美女高清视频| 强伦女教师2:伦理在线观看| av色在线观看| 欧美精品欧美精品系列| 在线天堂av| 国产精品成人一区二区网站软件| 91成人天堂久久成人| 国产a级一级片| 欧美久久一区二区三区| 亚洲男人天堂手机在线| 黄色网页在线观看| 天天影视涩香欲综合网| 中文字幕97| 亚洲欧美区自拍先锋| 无需播放器的av| av亚洲精华国产精华| 9色视频在线观看| 国产精品天堂蜜av在线播放| 国产欧美日韩综合精品一区二区| 蜜臀av性久久久久蜜臀av| 激情六月婷婷综合| 日韩在线激情视频| 日韩精品麻豆| 久久久精品久久久久| 日韩免费一级| 国产精品久久久久久中文字| 在线中文字幕亚洲| 日韩激情在线视频| 亚洲一本大道| 欧洲在线/亚洲| 日韩伦理精品| 午夜精品免费视频| 亚洲精品123区| 欧美综合在线播放| 欧美午夜片欧美片在线观看| 国产99在线| 日韩av快播网址| 青青草精品视频| 成人免费网址在线| 日韩色视频在线观看| 中文字幕一区二区三区中文字幕| 日韩精品一区二区三区在线观看| 亚洲www啪成人一区二区| 97视频在线观看成人| 亚洲精品裸体| caoporn超碰97| 欧美一区二区三区在| 91麻豆精品一二三区在线| 亚洲最大的av网站| 久久伊人蜜桃av一区二区| 欧美孕妇孕交| 国产日韩欧美激情| 大乳在线免费观看| 欧美日韩第一视频| 日韩电影网1区2区| 在线视频您懂的| 久久精品亚洲一区| 一本色道久久精品| av电影免费| 亚洲欧洲视频在线| 国产精品草草| 成人在线电影网| 亚洲精品久久久久久久久| 久久精品国产www456c0m| 国产特级淫片高清视频| 欧美亚洲日本一区| 色爱av综合网| 国模吧一区二区| 精品视频一二| 蜜桃传媒视频麻豆一区| 一区二区免费视频| 国精品产品一区| 日本在线视频一区| 日韩欧美国产黄色| 欧美巨大xxxx| 麻豆tv在线播放| 精品少妇一区二区三区日产乱码| 日韩在线二区| 国产熟人av一二三区| 日韩电影中文字幕在线观看| 在线国产一区二区| 国产精品久久久久久精| 久久精品99久久久久久久久| 日韩在线a电影| 日韩免费网站| 成人欧美一区二区三区视频xxx| 亚洲视频 欧洲视频| 国产精品亚洲欧美一级在线| 不卡伊人av在线播放| 青青在线视频| 成人中文字幕+乱码+中文字幕| 日韩一区二区久久| 99精品视频在线看| 国产999精品| 久久综合久久综合亚洲| 岛国片av在线| 色婷婷亚洲综合| 日韩动漫一区| 手机在线成人免费视频| 国产亚洲精品91在线| 精品午夜久久福利影院| 嗯啊主人调教在线播放视频 | 久久精彩免费视频| 大尺度一区二区| 久久伊人国产| 成人免费观看cn| 久久中文精品视频| 久久精品亚洲麻豆av一区二区 | 欧美精品密入口播放| 亚洲欧洲日韩精品| www成人在线观看| 久久久人成影片一区二区三区在哪下载 | 最新国产在线观看| 国产伦一区二区三区色一情| 色综合一区二区| 亚洲国产精品第一区二区三区| av网站在线播放| 深夜福利成人| 亚洲精品电影网在线观看| 国产精品1区二区.| 四虎永久在线高清国产精品| 久久人人爽人人| 亚洲精品亚洲人成人网在线播放| 日韩欧美电影| yw193.com尤物在线| 开心色怡人综合网站| 精品亚洲aⅴ在线观看| 久久97久久97精品免视看秋霞| 日韩一区二区三区不卡视频| 国产成一区二区| 欧美视频在线一区| 国产一区二区三区香蕉| 警花av一区二区三区| 欧美成人明星100排名| 欧美xxxx黑人又粗又长精品| 中文字幕精品视频| 亚洲国产精品一区二区久久恐怖片 | 国产精品亚洲综合久久| 黑森林国产精品av| av无码精品一区二区三区| 国产精品久久不能| 日韩福利视频网| 国产欧美在线观看免费| 羞羞小视频在线观看| 91青青草免费在线看| 亚洲精品日韩在线| 国产精品久久福利| 亚洲综合丁香| 中文字幕一区图| yjizz视频网站在线播放| 国产一区二区四区| 国产伊人精品在线| 99久久99久久精品免费观看 | 免费在线观看av网站| 国产精品美女在线播放| 久久久久久这里只有精品| 日韩欧美中文免费| 成人福利视频在线| 91高清一区| 久久精品嫩草影院| jizz亚洲| 91午夜国产| 亚洲av综合色区| 国产精品视频自在线| 久久免费视频色| 欧美精品黄色| 亚洲国产欧美国产第一区| 日日夜夜精品一区| 高清av影院| 日韩美女爱爱视频| 久久亚洲国产精品日日av夜夜| 欧美一级在线播放| 亚洲最新av在线网站|