App 打包

成都創(chuàng)新互聯(lián)是專業(yè)的原平網(wǎng)站建設(shè)公司,原平接單;提供成都網(wǎng)站制作、成都做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行原平網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
aapt是android中的資源打包工具,打包資源就用它。
打包大致流程:
aapt把resources目錄下的資源生成R.java文件,并為AndroidManifest.xml生成Manifest.java類。
aidl把項(xiàng)目中自定義的aidl文件生成對(duì)應(yīng)的java類。
JavaCompiler把所有的Java源文件編譯成class文件,包括:aapt生成的、aidl生成的、項(xiàng)目中自有的java源文件
使用proguard混淆,并生成一個(gè)proguardMapping.xml文件(可選項(xiàng):可以混淆也可以不混淆)
使用dex工具把所有的class文件生成.dex文件
使用aapt資源打包工具把resources、assets目錄下的資源打包成一個(gè)_ap文件
使用apkbuilder把所有的dex、_ap文件、AndroidManifest.xml文件打包成一個(gè)未簽名的apk
使用jarsinger生成一個(gè)簽名過(guò)的apk包
使用zipalign工具對(duì)要發(fā)布的apk文件進(jìn)行對(duì)齊操作,以便在運(yùn)行時(shí)節(jié)約內(nèi)存。
該腳本是我在獨(dú)立開(kāi)發(fā)過(guò)程中,為了提升 Android 應(yīng)用打包和運(yùn)營(yíng)的效率而開(kāi)發(fā)的腳本。項(xiàng)目地址是,
如項(xiàng)目中的語(yǔ)言構(gòu)成展示的,該腳本完全使用 Python 語(yǔ)言開(kāi)發(fā)完成。
使用起來(lái)非常簡(jiǎn)單,首先你要準(zhǔn)備如下的環(huán)境,
然后,通過(guò)編輯配置文件 config.yml 對(duì)腳本進(jìn)行配置。比如,
YAML 格式也不算新穎,早在幾年之前的 SpringBoot 里面就已經(jīng)采用了這種格式。相比于使用 json 或者 properties 等格式的配置文件,它更加簡(jiǎn)潔。
1、使用 gradle 指令自動(dòng)打包,區(qū)分 32 位和 64 位 :因?yàn)楝F(xiàn)在有些應(yīng)用市場(chǎng)明確要求區(qū)分 32 位和 64 位,所以,打包的時(shí)候要分開(kāi)進(jìn)行打包。
2、打包完成之后將 APK 拷貝到指定的目錄 :主要用來(lái)做本地的 APK 文件備份,后面也會(huì)用這里拷貝的 APK 文件進(jìn)行自動(dòng)化加固。
3、使用 diffuse 輸出相對(duì)于上一個(gè)版本的 APK 版本差異報(bào)告 :diffuse 是 JakeWharton 開(kāi)發(fā)的 APK, AAB, AAR 和 JAR 的對(duì)比工具。這里我用它對(duì)比當(dāng)前版本和上一個(gè)版本的 APK 的信息,以實(shí)現(xiàn)對(duì) APK 質(zhì)量的監(jiān)控。diffuse 項(xiàng)目的地址是
3、拷貝多語(yǔ)言資源到指定的目錄,并自動(dòng)提交到 Github 倉(cāng)庫(kù)以便于協(xié)助翻譯 :對(duì)做國(guó)際化的應(yīng)用的開(kāi)發(fā)者而言,我們可以通過(guò)應(yīng)用內(nèi)的協(xié)助翻譯功能借助社區(qū)的力量實(shí)現(xiàn)應(yīng)用的多語(yǔ)言。這里我盡量將這個(gè)過(guò)程做得更加自動(dòng)化。即在應(yīng)用打包完成之后將應(yīng)用內(nèi)的多語(yǔ)言資源按照版本信息拷貝到指定的目錄下。然后使用 Git 工具將其推送到 Github 等。具體的效果可以參考 .
4、自動(dòng)打 tag 并提交到遠(yuǎn)程倉(cāng)庫(kù) :該功能用來(lái)在打包完成之后使用為當(dāng)前版本添加 Git tag,以便于后續(xù)根據(jù)版本回滾到指定的 Git 提交記錄。
5、根據(jù) Git 提交記錄自動(dòng)生成更新日志 :上面做了為項(xiàng)目自動(dòng)添加 Git tag 的功能之后,我們可以根據(jù)當(dāng)前版本到上一版本之間的 Git 提交記錄的 comment 信息自動(dòng)生成版本更新日志。雖然,這個(gè)這樣生成的更新日志并不能直接用作發(fā)布時(shí)的更新記錄,但在至少可以讓我們直觀得看到這個(gè)版本修改了什么。
6、使用 360 加固 對(duì)上述 APK 進(jìn)行加固并輸出到指定的目錄 :加固操作其實(shí)非常簡(jiǎn)單,只需要一個(gè) command 指令就可以完成了,
不過(guò)在使用上述命令之前需要先通過(guò) GUI 的形式修改你在 360 加固中的渠道和簽名信息(直接手動(dòng)改文件也可以)。
7、上傳打包 APK 到藍(lán)奏云 :藍(lán)奏云是現(xiàn)在很多開(kāi)發(fā)者用來(lái)分享軟件的一個(gè)云存儲(chǔ)平臺(tái),100M 以下的文件可以免費(fèi)存儲(chǔ),類似于百度云。上傳藍(lán)奏云之前需要先修改配置文件,
這里需要填入的 ylogin 和 phpdisk_info 可以在登錄之后通過(guò) Chrome 的開(kāi)發(fā)工具查看 cookie 信息得到。目前能夠做到自動(dòng)化的一個(gè)方案就是使用上述兩個(gè)信息。
8、通過(guò) Telegram bot 將打包完成的渠道包和更新日志信息發(fā)送到 Telegram 群組 :對(duì)海外的用戶我們可以通過(guò) Telegram 作為一個(gè)交流的渠道。Telegram 是一個(gè)非常好用的聊天軟件。它提供了 bot 功能,即一個(gè)可以推送消息的機(jī)器人。我們可以通過(guò)這個(gè)功能來(lái)在群組中推送消息、圖片和文件。Telegram 的 bot 有非常強(qiáng)大的自定義性。其實(shí)我們完全可以基于爬蟲(chóng)和 bot 維護(hù)一個(gè)社區(qū),然后通過(guò)在社區(qū)內(nèi)推送廣告來(lái)獲得一些利益。這也不失為一個(gè)賺錢的渠道。使用 Telegram bot 之前需要在配置文件中填入如下信息,
這里的 token 是注冊(cè) bot 的時(shí)候得到的信息。chat_id 可以通過(guò)如下方式獲取到:
即將 token 信息填入到上述 YourBOTToken 處。在返回的 json 結(jié)果中可以獲取到 chat id 信息。
向群組推送信息的方式非常簡(jiǎn)單,一個(gè) http 請(qǐng)求即可完成,
更多的協(xié)議可以參考這個(gè)文檔:
9、完成上述操作之后使用郵件通知打包結(jié)果 :最后就是在完成了最終的打包操作之后通過(guò) Email 發(fā)送一封郵件,內(nèi)部包含了本次打包的 diff 信息等給指定的用戶。使用郵件功能需要在配置文件中填寫,
這里我們使用的是 QQ 郵箱來(lái)發(fā)送郵件。這里需要填寫的 user 和 password 字段分別是郵箱和開(kāi)通 smtp 服務(wù)時(shí)系統(tǒng)提供的密碼信息。QQ 郵箱開(kāi)通 SMTP 服務(wù)器其 官方文檔 即可。
上述是該打包腳本的主要功能。后續(xù)我會(huì)添加更多功能。因?yàn)闀r(shí)間有限,有些功能需要修改一下才能使用。不過(guò),許多功能我都封裝成了獨(dú)立的 Python 腳本,如果需要的話可以自己做細(xì)微的修改。對(duì)于這個(gè)腳本,如果你有更好的建議和想法,可以跟我交流~
打包后的apk是一個(gè)壓縮包,解壓之后,內(nèi)容如下:
詳細(xì)可參考 apk簽名原理
無(wú)論我們?cè)趺磁渲胓radle文件去自定義打包,但是都是要走上圖所畫(huà)的七個(gè)流程。七個(gè)深綠色的橢圓代表了七個(gè)不可或缺的打包步驟,并且每一個(gè)步驟都一個(gè)打包工具
所用到的工具:
zipalign 字節(jié)對(duì)齊:
為什么要以4字節(jié)整數(shù)倍為起始偏移?
在文件對(duì)齊后, 就可以使用mmap來(lái)直接讀寫apk文件
mmap映射
上面涉及到的Android打包流程是以gradle task鏈的形式串聯(lián)起來(lái)的。
下面看一下常見(jiàn)的task
件
我可以想到的:
Transform API
APK文件的組成部分及apk打包流程是Android開(kāi)發(fā)中的基礎(chǔ)知識(shí)點(diǎn),做一個(gè)簡(jiǎn)單的記錄。
apk文件是Android應(yīng)用包文件格式,其本質(zhì)是一個(gè)壓縮文件。將apk文件拖動(dòng)到Android Studio中即可查看里面的內(nèi)容,如下圖:
從上圖中可以看到apk包里的幾個(gè)重要組成部分:
打包流程的經(jīng)典流程圖如下:
其中七個(gè)橢圓形內(nèi)容對(duì)應(yīng)了打包流程中的七個(gè)重要步驟,也對(duì)應(yīng)著打包中的七個(gè)重要工具,具體如下:
對(duì)上面七個(gè)重要的打包流程進(jìn)一步說(shuō)明。
aapt打包資源文件,生成R.java文件,resources.arsc等文件。
aapt在打包資源文件之前會(huì)檢測(cè) AndroidManifest.xml 文件的合法性,對(duì)res目錄下的資源目錄進(jìn)行掃描合法性,因此資源命名有問(wèn)題時(shí)會(huì)在編譯階段就會(huì)直接報(bào)錯(cuò)。
需要注意的是xml文件會(huì)被編譯為二進(jìn)制的,因此我們并不能直接打開(kāi)apk包中的xml文件。
AIDL是Android接口定義語(yǔ)言,是Android進(jìn)程間通訊的一種實(shí)現(xiàn)方式。
此步驟中會(huì)對(duì)aidl文件進(jìn)行處理,生成java文件。
通過(guò)javaCompiler對(duì)java文件進(jìn)行編譯,生成class文件。
dx工具將class文件轉(zhuǎn)變?yōu)锳ndroid系統(tǒng)Dalvik虛擬機(jī)可執(zhí)行的Dex文件。
將classes.dex,res文件夾等所有文件打包成apk文件。
生成APK包之后還需要進(jìn)行簽名處理,Release簽名需要我們自己去進(jìn)行配置。
常用的簽名方式有兩種:jarsigner和apksigner。
Zipalign是Android平臺(tái)上APK文件對(duì)齊的整理工具,能夠?qū)PK中未壓縮的數(shù)據(jù)進(jìn)行4字節(jié)對(duì)齊。
需要注意的是根據(jù)采用簽名方式的不同,對(duì)齊處理的先后順序有所區(qū)別。
APK打包流程備忘。
網(wǎng)站題目:android文件打包,安卓安裝包文件
路徑分享:http://chinadenli.net/article24/dsiepce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站改版、定制開(kāi)發(fā)、App設(shè)計(jì)、域名注冊(cè)、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)