當前位置:首頁 » 安卓系統 » android應用打包

android應用打包

發布時間: 2023-09-09 03:57:55

1. Android APK打包流程備忘

APK文件的組成部分及apk打包流程是Android開發中的基礎知識點,做一個簡單的記錄。

apk文件是Android應用包文件格式,其本質是一個壓縮文件。將apk文件拖動到Android Studio中即可查看裡面的內容,如下圖:

從上圖中可以看到apk包里的幾個重要組成部分:

打包流程的經典流程圖如下:

其中七個橢圓形內容對應了打包流程中的七個重要步驟,也對應著打包中的七個重要工具,具體如下:

對上面七個重要的打包流程進一步說明。

aapt打包資源文件,生成R.java文件,resources.arsc等文件。

aapt在打包資源文件之前會檢測 AndroidManifest.xml 文件的合法性,對res目錄下的資源目錄進行掃描合法性,因此資源命名有問題時會在編譯階段就會直接報錯。

需要注意的是xml文件會被編譯為二進制的,因此我們並不能直接打開apk包中的xml文件。

AIDL是Android介面定義語言,是Android進程間通訊的一種實現方式。

此步驟中會對aidl文件進行處理,生成java文件。

通過javaCompiler對java文件進行編譯,生成class文件。

dx工具將class文件轉變為Android系統Dalvik虛擬機可執行的Dex文件。

將classes.dex,res文件夾等所有文件打包成apk文件。

生成APK包之後還需要進行簽名處理,Release簽名需要我們自己去進行配置。

常用的簽名方式有兩種:jarsigner和apksigner。

Zipalign是Android平台上APK文件對齊的整理工具,能夠對APK中未壓縮的數據進行4位元組對齊。

需要注意的是根據採用簽名方式的不同,對齊處理的先後順序有所區別。

APK打包流程備忘。

2. (五)Android多渠道打包:美團多渠道打包原理以及使用

1.傳統打包:
傳統的打包方法都是在AndroidManifest添加渠道標示,每打一次包修改一次標示的名稱。效率特別的低,一個稍微大一點的項目打上幾十個渠道包可能需要幾個小時半天的時間。
2.由於傳統的打包方式每次修改渠道都需要重新的構建項目,時間都浪費構建上面了,美團提供了一種新的打包方案:
Android應用使用的APK文件就是一個帶簽名信息的ZIP文件,根據 ZIP文件格式規范,每個ZIP文件的最後都必須有一個叫 Central Directory Record 的部分,這個CDR的最後部分叫」end of central directory record」,這一部分包含一些元數據,它的末尾是ZIP文件的注釋。注釋包含Comment Length和File Comment兩個欄位,前者表示注釋內容的長度,後者是注釋的內容,正確修改這一部分不會對ZIP文件造成破壞,利用這個欄位,我們可以添加一些自定義的數據,Packer-Ng方式打包就是在這里添加和讀取渠道信息。打包神器,100個渠道包只需5s 哈哈 。
原理很簡單,就是將渠道信息存放在APK文件的注釋欄位中。

第一步:直接將PackerNg作為Utils拷貝到項目中。

第二步:創建一個保存渠道包名的txt文件,可以放在項目主目錄下:比如命名market.txt
渠道名可以按照需求隨便添加
an

huawei
legend
letv
meizu
oppo
qq
PC
sougou
UC
update
update1
vivo
wandoujia
woshangdian
xiaomi

第三步:ChannelUtil這個工具類是用於取出文件里的渠道名

第四步:打開第二步中的PackerNg類,首先配置一下此類main函數中接受的參數信息。本事例通過Android Studio的方式進行配置直接上圖:

圖中標注3的位置就是PackerNg類配置main函數中接受的兩個參數: 第一個參數為默認的release包的apk源文件,包名為ChannelUtil起初默認的包名

拿到這個包名可以傳給後台進行統計或進行其它的操作。

第六步:運行PackerNg類,會在項目目錄下自動生成文件夾apks(在PackerNg.java文件中配置好的apk渠道包存儲路徑)

注意點:第四步中ChannelUtil起初默認的包名為源文件,其它所有的的渠道包都是通過PackerNg打包方式都是以這個源文件為模版,進行復制,將不同的渠道名復制給這個源文件。如果是360渠道上線的話需要將這個包名默認改為360的渠道單獨打包,因為360上線需要加固,會把之前通過源文件復制渠道名給抹掉,所以對於360加固的文件需要單獨把360作為源文件來打包不改為360默認的渠道包後會統計不到360渠道的信息。

3. 如何應用安卓APK文件進行解包打包和修改

不需要解包跟打包,直接修改就可以,修改的的方法。

如下參考:

1.將需要修改的apk包復制到100apktool的路徑中。注意:您需要將文件名更改為123apk,如下圖。

4. 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

5. Android簡單的打包配置

在android studio中的打包,通常使用以下兩個選項之一,兩個方式都可以構建出apk包

這兩個有什麼區別?

概括一句話:根據gradle中現有的簽名配置進行自動簽名打包
通常debug和dev環境是系統自行配置的debug-sing簽名,不需要手動進行配置,但是release環境是對外發布的環境,必須要求手動在gradle中進行簽名配置才可以打包(後邊說)
所以在gradle配置好了簽名的情況下,直接點擊 Build APK(s) 就可以進行打包

一句話概括:通過手動選擇簽名文件進行簽名打包
這種方式則不需要在gradle中進行配置,直接選擇你已經創建好的簽名文件,輸入對應的密碼等信息,就可以進行打包

然後就可以進行打包了

debug 和 dev 等測試/開發環境 因為系統自動配置了debug-sing 可以直接使用 Build APK(s) 進行打包。
但是release環境需要對外發布,所以需要手動在gradle中進行簽名配置才可以使用 Build APK(s) ,或著自己選擇 Generate Signed Bundle or APK 通過簽名文件進行打包(效果和gradle中配置好了簽名文件完全相同)

那麼就有以下兩個問題:

在 Generate Signed Bundle or APK 中選擇 Create new ...

在mole的gradle.android中輸入:

然後在配置環境的buildTypes中,想使用 signingConfigs 簽名配置的環境加上一句話: signingConfig signingConfigs.release

這樣,就在gradle中配置好了簽名,可以直接使用 Build APK(s) 進行打包
注意這里的 minifyEnabled true 也就是要使用混淆文件(一般測試環境為false 編譯更快)。如果release環境打包,沒有配置好混淆文件的話,會導致apk安裝之後,秒退。(如果沒有簽名強行打包,則無法安裝)

熱點內容
夏新手機初始密碼是什麼 發布:2025-02-01 06:58:23 瀏覽:790
ppt存儲路徑 發布:2025-02-01 06:55:06 瀏覽:115
aspx腳本 發布:2025-02-01 06:44:13 瀏覽:999
訪問策略更新 發布:2025-02-01 06:39:29 瀏覽:498
pythoneditplus 發布:2025-02-01 06:31:57 瀏覽:275
bmp轉png源碼 發布:2025-02-01 06:30:08 瀏覽:470
魔獸聯盟人多的伺服器是什麼 發布:2025-02-01 06:25:25 瀏覽:41
c語言字元串子串刪除 發布:2025-02-01 06:25:23 瀏覽:534
怎麼改電腦鎖屏密碼 發布:2025-02-01 06:16:55 瀏覽:472
存儲卡不能格式化怎麼辦 發布:2025-02-01 06:02:55 瀏覽:691