Ⅰ AAPT簡介
AAPT 是Android Asset Packaging Tool的縮寫,它存放在SDK的tools目錄下,AAPT的功能相對比較強大,可以通過它查看、創建、更新壓縮文件(如.zip文件,.jar文件,.apk文件),它可以把 資源 編譯為二進制文件,同時生成resources.arsc,AAPT這個工具在APK打巧神包過程中起到了非常重要的作用,在打包的過程中,用AAPT對APK中使用到的資源進行打包,這里不對AAPT這個工具做過多的討論。
我們來看一下AAPT打包的流程:
AAPT這個工具在 打包 的過程中主要做了以下工作:
1.把「assets」和「res/raw」目錄下的所有資源進行打包(會根據不同的文件後綴選擇壓縮或不壓縮),「孝型虧res/」目錄下的其他資源進行編譯或者其他處理(具體的處理方式視文件後綴的不同而不同,例如:「.xml」會編譯成二進制文件,「.png」文件會進行優化等等)後才進行打包。
2.會對除 assets資源 之外的所有資源賦予一個資源ID常量,並且會生成一個資源索引表resources.arsc;
3.編譯租鏈AndroidManifest.xml成二進制的XML文件。
4.把上面3個步驟中生成結果保存在一個「.ap_」文件,並把各個資源ID常量定義在一個R.java中;
.ap_文件會在生成APK時放入APK包中,.ap_這個文件本身是一個zip包,他裡麵包含了resources.arsc、AndroidManifest.xml、assets以及所有的資源文件。
Ⅱ android app 打包流程
App 打包
aapt是android中的資源打包工具,打包資源就用它。
打包大致流程:
aapt把resources目錄下的資源生成R.java文件,並為AndroidManifest.xml生成Manifest.java類。
aidl把項目中自定義的aidl文件生成對應的java類。
JavaCompiler把所有的Java源文件編譯成class文件,包括:aapt生成的、aidl生成的、項目中自有的java源文件
使用proguard混淆,並生成一個proguardMapping.xml文件(可選項:可以混淆也可以不混淆)
使用dex工具把所有的class文件生成.dex文件
使用aapt資源打包工具把resources、assets目錄下的資源打包成一個_ap文件
使用apkbuilder把所有的dex、_ap文件、AndroidManifest.xml文件打包成一個未簽名的apk
使用jarsinger生成一個簽名過的apk包
使用zipalign工具對要發布的apk文件進行對齊操作,以便在運行時節約內存。
Ⅲ 新一代Android渠道打包工具:1000個渠道包只需要5秒
♥♥♥ 原文轉自 極分享 更多詳情及更新 查看原文 ♥♥♥
最新版本
v1.0.4 - 2016.01.19 - 完善獲取APK路徑的方法,增加MarketInfo
v1.0.3 - 2016.01.14 - 增加緩存,新增ResUtils,更有好的錯誤提示
v1.0.2 - 2015.12.04 - 兼容proctFlavors,完善異常處理
v1.0.1 - 2015.12.01 - 如果沒有讀取到渠道,默認返回空字元串
v1.0.0 - 2015.11.30 - 增加Java和Python打包腳本,增加文檔
v0.9.9 - 2015.11.26 - 測試版發布,支持全新的極速打包方式
源碼:https://github.com/mcxiaoke/packer-ng-plugin
項目介紹
packer-ng-plugin 是下一代Android渠道打包工具Gradle插件,支持極速打包,1000個渠道包只需要5秒鍾,速度是 gradle-packer-plugin 的1000倍以手局嘩上,可方便的用於CI系統集成,支持自定義輸出目錄和最終APK文件名,依賴包:com.mcxiaoke.gradle:packer-ng:1.0.+ 簡短名:packer,可以在項目的 build.gradle 中指定使用,還提供了命令行獨立使用的Java和Python腳本。實現原理見本文末尾。
使用指南
Maven Central
.
.
.
.
.
實現原理
PackerNg原理
優點
使用APK注釋欄位保存渠道信息和MAGIC位元組,從文件末尾讀取渠道信息,速度快
實現為一個Gradle Plugin,支持定製輸出APK的文件名等信息,方便CI集成
提供Java版和Python的獨立命令行腳本,不依賴Gradle插件,支持獨立使用
由於打包速度極快,單個包只需要5毫秒左右,可用於網站後台動態生成渠道包
缺點
沒有使用Android的proctFlavors,無法利用flavors條件編譯的功能
文件格式
Android應用使用的APK文件就是一個帶簽名信息的ZIP文件,根據 ZIP文件格式規范,每個ZIP文件的最後都必須有一個叫Central Directory Record 的部分,這個CDR的最後部分叫"end of central directory record",這一部分包含一些元數據,它的末尾是ZIP文件的注釋。注釋包含Comment Length和File Comment兩個欄位,前者表示注釋內容的長度,後者是注釋的內容,正確修改這一部分不會對ZIP文件造成破壞臘枯,利用這個欄位,我們可以添加一些自定義的數據,PackerNg項目就是在這里添加和讀取渠道信息。
細節處理
原理很簡單,就是將渠道信息存放在APK文件的注釋欄位中,但是實現起來遇到不少坑,測試了好多次。
同類工具
gradle-packer-plugin - 舊版渠道打包工具,完全使用Gradle系統實現,能利用Android提供的proctFlavors系統的條件編譯功能,無任何兼容性問題,方便集成,但是由於每次都要重新打包,速度比較慢,不適合需要大量打包的情況。(性能:200個渠道包需要一到兩小時)
Meituan-MultiChannelTool - 使用美團方案的實現,在APK文件的META-INF目里增加渠道文件,打包速度也非常快,畢行但讀取時需要遍歷APK文件的數據項,比較慢,而且以後可能遇到兼容性問題
MultiChannelPackageTool - 將渠道寫入APK文件的注釋,這個項目沒有提供Gradle插件,只有命令行工具,不方便CI集成,使用ZIP文件注釋的思路就是來自此項目
轉自 極分享 閱讀原文
Ⅳ ANDROID多渠道快速打包實踐
參考資料:
美團Android自動化之旅—生成渠道包
Android批量打包提速
AndroidMultiChannelBuildTool
背景
隨著發版需要,每次發版所需渠道包越來越多(現在差不多有一百個左右了),正常gradle打包由於耗時效率過低已無法滿足需求,開始了android多渠道快速打包實踐。
方法
下面主要介紹兩種快速打包的方式:
1、類似美團的方式,在META-INF中寫入渠道名的空文件,用於讀取空文件。 美團Android自動化之旅—生成渠道包
2、在apk末尾動態寫入渠道信息。 一種動態為apk寫入信息的方案
其實這兩種方式都是同一個原理,替換以前從manifest中讀取渠道號的方式,而使用新的獲取方式(渠道號如何寫入就如何讀取)。
所以這首先需要客戶端(重要!):
1、統一應用中獲取渠道的方式並替換之前的(最好兼容)。
2、注意第三方SDK渠道號的傳入,比如友盟sdk,否則第三方會使用默認從manifest中讀取的方式。
下面介紹一種已經測試過的方法(git上開源項目 AndroidMultiChannelBuildTool )
1、安裝環境由於腳本環境是使用python語言,所以需要我們 安裝環境 。
2、導入項目導入開源項目 AndroidMultiChannelBuildTool ),並把悔拿想要批量打包的apk文件拷貝到PythonTool目錄下(與py同級),運行py腳本即可打包完成。
以上基本實現快速好前滾打包,經過測試一分鍾百十個無壓力。另外需要注意這種方式只適用於打包需求一致渠道號不同,不適用特殊定製渠道。
備註:9月21日友余補充快速打包java版本,詳見 AndroidMultiChannelBuildTool-Java-master
Ⅳ android 工程 如何一鍵編譯打包成apk
打包步驟:
1、生成keystore
按照下面的命令行在C:ProgramFilesJavajdk1.6.0_10in>目錄下,輸入keytool-genkey-aliasandroid.keystore-keyalgRSA-validity100000-keystoreandroid.keystore
參數意義:-validity主要是證書的有效期,寫100000天;空格,退格鍵都算密碼。
命令執行後會在C:ProgramFilesJavajdk1.6.0_10in>目錄下生成android.keystore文件。如圖-1
圖-2EclipseAndroid打包工具
接下來的步驟就是不斷的next。下面僅貼出圖片,不解釋。
step2:選擇打包的項目
step3:選擇生成的EclipseAndroid.keystore文件並輸入密碼
step4:選擇aliaskey並輸入密碼
step5:最後選擇生成androidapk文件的目錄及文件名
最終生成的apk文件。
Ⅵ 如何應用安卓APK文件進行解包打包和修改
不需要解包跟打包,直接修改就可以,修改的的方法。
如下參考:內
1.將需要修改的apk包復制到100apktool的路徑中容。注意:您需要將文件名更改為123apk,如下圖。
Ⅶ 請教如何使用android studio同時打包多個apk
渠道信息一般在 AndroidManifest.xml中修改以下值:
<meta-data android:name="UMENG_CHANNEL" android:value="wandoujia" />
首先你必須在AndroidManifest.xml中的meta-data修改以下的樣子:
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
其中${UMENG_CHANNEL_VALUE}中的值就是你在gradle中自定義配置的值。
build.gradle文件就利用proctFlavors這樣宴高寫:
proctFlavors {
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
{
manifestPlaceholders = [UMENG_CHANNEL_VALUE: ""]
}
c360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360"]
}
uc {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "uc"]
}
}
其中[UMENG_CHANNEL_VALUE: "wandoujia"]就是對應${UMENG_CHANNEL_VALUE}的值。
最新更新
後來發現上面的重復代碼太多,就在網上又發現了一個更簡潔的寫法
proctFlavors {
wandoujia {}
{}
c360 {}
uc {}
proctFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
其中name的值對相對應各個proctFlavors的選項值,這樣就達到自動替換渠道值的目的了。
這樣生成apk時,選擇相應的Flavors來生成指定渠道的包就可以了,而且生成的apk會自動幫你加上相應渠道的後綴,非常方便和直觀。大家可以自己反編譯驗證。
一次生成所有渠道包
在android studio底欄中有個命令行工具Terminal,打開後就CMD可以自動切換到當前項目的目錄下。
有的項目下會有graldew.bat這個文件,你就可以輸入這個命令:
gradlew assembleRelease
就可以一次性生成所有的渠道包了
不過我一般不建議大家使用這個命令,gradlew這個命令的gralde的版本無法控制,有時候會莫名其妙的下載老版本的gradle
所以我個人推薦大家使用以下的用法。
先找到gralde的根目錄,在系統變數里添加兩個環境變悄吵量:
變數名為:GRADLE_HOME,變數值就為gradle的根目錄;
所以變數值為:C:\Users\yazhou\.gradle\wrapper\dists\gradle-2.1-all\27drb4udbjf4k88eh2ffdc0n55\gradle-2.1
還有一個在系統變數里PATH裡面添加gradle的bin目錄
我的就是C:\Users\yazhou\.gradle\wrapper\dists\gradle-2.1-all\27drb4udbjf4k88eh2ffdc0n55\gradle-2.1\bin
這里配置完成了,接著在Terminal中敲下 gradle assembleRelease就可以一次性生成所有的渠道包了。
所有生成的apk在項目的build\outputs\apk下。
如果只是想生成單個渠道的包呢?
打開Android Studio的Gradle tasks面板(右邊側邊欄),會發現模塊啟祥侍多了很多任務
Ⅷ android友盟集成測試需要生成apk么
看一些博客的流程是需要生成apk的,如下:
1、安裝DeviceID.apk(用來查看設備信息)
2、安裝成功後,在設備上打開(推薦 海馬玩模擬器)
3、軟體會自動獲取到 IMEI 和WIFI MAC Address ,這兩個值在友盟的後台需要用到
4、在友盟的 集成測試後台 中添加設備,如下圖所示
輸入獲取到的device_id,mac,例如:{"device_id":"xxxx","mac_address":"xxxx"姿慎} 名稱孝伍:填設備名稱
註:前提是應用已集成友盟SDK
5、打包APK,安裝好在模擬器上,啟動APP,在友盟巧冊或的後台日誌就會實時刷新,如下圖所示