成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

android編譯,android編譯target_fileszip

Android APK編譯流程

apk 是Android Package的簡寫, 在平時的開發(fā)過程中,通過點擊 Run app 按鈕 或者 在命令行中輸入

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:國際域名空間、網(wǎng)絡空間、營銷軟件、網(wǎng)站建設、肥西網(wǎng)站維護、網(wǎng)站推廣。

這樣Android Studio就會啟動構建流程,最終輸出一個我們想要的APK。

直達官網(wǎng)介紹

對于小白來說,上面一張圖已經(jīng)可以解釋apk的構建過程了,不過對于Andoid開發(fā)者而言還需要了解一些更詳細的構建過程。

詳細的對應步驟 和 使用工具如下:

資源文件(res文件夾下的文件)通過 AAPT(Android Asset Packaging Tool)打包生成R.java類(資源索引表)、.arsc資源文件 和res文件。

resources.arsc 是一個App的資源索引表,通過R.java 文件 和 resources.arsc 可以定位到資源的內(nèi)存地址,resources.arsc文件的作用是通過一樣的ID,根據(jù)不同的配置索引到最佳的資源顯示在UI中。

AIDL (Android Interface Definition Language), 是Android接口定義語言,是Android提供的IPC (Inter Process Communication,進程間通信)的一種獨特實現(xiàn)。

如果有aidl文件,這個階段會生成對應的Java接口文件。

R.java文件、工程源碼文件、aidl.java文件, 在這一步通過javac生成.class文件。

源碼.class文件和第三方jar或者library通過dx工具打包成dex文件

Android系統(tǒng)的Dalvik虛擬機的可執(zhí)行文件為DEX格式,所以這里會將上一步中生成的.class文件 和 引用的第三方jar等過程中的.class 一起通過dx工具打包成dex文件

apkbuilder工具會將所有沒有編譯的資源、.arsc資源、.dex文件打包到一個完成apk文件中

tips:

apksigner工具會對未簽名的apk驗證簽名。得到一個簽名后的apk(signed.apk)

apksigner 是google 退出的V2簽名方式

Jarsigner 是之前一直使用的V1簽名方式

可以通過在命令行中輸入apksigner --help來獲取詳情信息,如果沒有特殊需求,使用下面命令即可完成簽名

release mode 下使用 aipalign進行align,即對簽名后的apk進行對齊處理

所謂對齊,主要過程是將APK包中所有的資源文件距離文件起始偏移為4字節(jié)整數(shù)倍,這樣通過內(nèi)存映射訪問apk文件時的速度會更快。對齊的作用主要是為了減少運行時內(nèi)存的使用。

zipalign是一個android平臺上整理APK文件的工具,它對apk中未壓縮的數(shù)據(jù)進行4字節(jié)對齊,對齊后就可以使用mmap函數(shù)讀取文件,可以像讀取內(nèi)存一樣對普通文件進行操作。如果沒有4字節(jié)對齊,就必須顯式的讀取,這樣比較緩慢并且會耗費額外的內(nèi)存。

參考文章:

Android-Studio配置構建

淺談Android打包流程

apk打包流程

END!

Android的編譯打包流程詳解

下圖的是官網(wǎng)對于Android編譯打包流程的介紹。

官方的介紹非?;\統(tǒng),簡而言之,其大致流程就是:

編譯--DEX--打包--簽名和對齊

(好像什么都沒Get到,有一種意猶未盡的感覺……)

來一張外國大神的圖片(注:這張圖少了簽名的步驟)

用文字解釋一下上圖的流程:

首先,我們整理一下編譯的輸入部分是什么(圖中黃色部分):

接下來的步驟:

好了,編譯打包的詳細流程說完了,接下來我們看看是否能回答開篇的那些問題。

答:aapt工具對于每個資源文件生成了唯一的ID,這些ID保存在R.java文件中。如下是R.java文件的內(nèi)容:

資源ID是一個4字節(jié)的無符號整數(shù),在R.java文件中用16進制表示。其中,最高的1字節(jié)表示Package ID,次高1個字節(jié)表示Type ID,最低2字節(jié)表示Entry ID。

只有一個ID如何能引用到實際資源呢?實際上aapt工具還生成了一個文件resources.arsc,相當于一個資源索引表,或者你理解成一個map也行,map的key是資源ID,value是資源在apk文件中的路徑。resources.arsc里面還有其他信息,這個就不多說了。

通過R.java文件和resources.arsc配合,就能引用到實際的資源文件。

答:第7步已經(jīng)闡述了對齊所做的工作,為什么要進行對齊,這是為了加快資源的訪問速度。如果每個資源的開始位置都是上一個資源之后的 4*n字節(jié),那么訪問下一個資源就不用遍歷,直接跳到4*n字節(jié)處判斷是不是一個新的資源即可。

如果舉例子,那么對齊有點類似于資源數(shù)組化,數(shù)組的訪問速度當然比鏈表快。

答:xml里面都是各種字符,不利于快速遍歷。編譯成二進制文件,用數(shù)字替換各種符號,一方面能快速訪問,另一方面也能減少大小。

android編譯命令的說明

android源碼目錄下的build/envsetup.sh文件,描述編譯的命令

- m:?????? Makes from the top of the tree.

- mm:????? Builds all of the modules in the current directory.

- mmm:???? Builds all of the modules in the supplied directories.

要想使用這些命令,首先需要設置android腳本編譯環(huán)境,在源碼根目錄執(zhí)行 source build/envsetup.sh

m:編譯所有的模塊

mm:編譯當前目錄下的模塊,當前目錄下要有Android.mk文件

mmm:編譯指定路徑下的模塊,指定路徑下要有Android.mk文件

下面舉個例子說明,假設我要編譯android下的\framework\av\cmds\screenrecord模塊,

當前目錄為源碼根目錄,方法如下:

1、source build/envsetup.sh

2、mmm framework/av/cmds/screenrecord

或者 :

1、source build/envsetup.sh

2、cd framework/av/cmds/screenrecord

3、mm

Android系統(tǒng)編譯指令make 、mmm、mm優(yōu)缺點比較

Android 系統(tǒng)提供了三種指令用于編譯,他們分別為make、mmm、mm,這三個指令編譯的優(yōu)缺點如下:

例如:make MediaProvider z這種模式對應于單個模塊的編譯。它的優(yōu)點是:會把該模塊依賴的其他模塊一起跟著編譯。例如:make libmedia 就會把libmedia依賴庫全部編譯好。當然缺點也會很明顯,那就是它會搜索整個源碼來定位MediaProvider 模塊所使用的Android.mk文件。并且還要判斷該模塊依賴的其他模塊是否有修改。所以編譯時間比較長。

注意:一般的編譯方式都會采用增量編譯,即只編譯發(fā)生變化的目標文件,但有時則需要重新編譯所有目標文件,那么就可以使用make 命令行的-B選項。例如:mm -B 模塊名,或者mm -B、mmm -B。在mm 和 mmm內(nèi)部也是調(diào)用make命令的,而make的-B選項將強制編譯所有的目標文件。

android10編譯硬件要求

您的開發(fā)編譯機必須達到或超出以下硬件要求:

如果是 Gingerbread (2.3.x) 及更高版本(包括 master 分支),需要使用 64 位環(huán)境。如果是較低的版本,則可以在 32 位系統(tǒng)中進行編譯。

如果是校驗代碼,至少需要 100GB 可用磁盤空間;如果要進行編譯,則還需要 150GB。如果要進行多次編譯或使用 ccache,則需要更多空間。

如果您在虛擬機中運行 Linux,則至少需要 16GB 的 RAM/交換空間(swap)。

Android系統(tǒng)編譯命令make

在編譯Android系統(tǒng)時,需要先執(zhí)行2條命令,來設置必要的環(huán)境變量。

接下來就可以執(zhí)行make系列命令,來完成不同的需要。

make clean 用來清除編譯歷史,開始一個全新的編譯。

make -j 或 make -j8 啟動編譯過程。 -j 后面的數(shù)字代表要使用的cpu thread的數(shù)目。

在完成了全編譯后,才能執(zhí)行生成OTA升級包的操作。

注意事項:

當前題目:android編譯,android編譯target_fileszip
當前地址:http://jinyejixie.com/article2/dsecioc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供用戶體驗、App開發(fā)網(wǎng)站改版、自適應網(wǎng)站、外貿(mào)網(wǎng)站建設、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設計公司
静宁县| 太仆寺旗| 拉萨市| 海兴县| 蓬安县| 怀集县| 和静县| 华亭县| 红河县| 怀集县| 临江市| 密云县| 南京市| 同仁县| 华容县| 阿巴嘎旗| 曲沃县| 东乡族自治县| 松滋市| 霍州市| 丹东市| 什邡市| 平山县| 新邵县| 鄂温| 龙泉市| 麻栗坡县| 翁牛特旗| 武隆县| 施秉县| 景泰县| 卓资县| 桐庐县| 上杭县| 同江市| 河津市| 吴桥县| 剑河县| 乐昌市| 左云县| 宜君县|