androidzipalign
A. Android APK編譯流程
apk 是Android Package的簡寫, 在平時的開發過程中,通過點擊 Run app 按鈕 或者 在命令行中輸入
這樣Android Studio就會啟動構建流程,最終輸出一個我們想要的APK。
直達官網介紹
對於小白來說,上面一張圖已經可以解釋apk的構建過程了,不過對於Andoid開發者而言還需要了解一些更詳細的構建過程。
詳細的對應步驟 和 使用工具如下:
資源文件(res文件夾下的文件)通過 AAPT(Android Asset Packaging Tool)打包生成R.java類(資源索引表)、.arsc資源文件 和res文件。
resources.arsc 是一個App的資源索引表,通過R.java 文件 和 resources.arsc 可以定位到資源的內存地址,resources.arsc文件的作用是通過一樣的ID,根據不同的配置索引到最佳的資源顯示在UI中。
AIDL (Android Interface Definition Language), 是Android介面定義語言,是Android提供的IPC (Inter Process Communication,進程間通信)的一種獨特實現。
如果有aidl文件,這個階段會生成對應的Java介面文件。
R.java文件、工程源碼文件、aidl.java文件, 在這一步通過javac生成.class文件。
源碼.class文件和第三方jar或者library通過dx工具打包成dex文件
Android系統的Dalvik虛擬機的可執行文件為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位元組整數倍,這樣通過內存映射訪問apk文件時的速度會更快。對齊的作用主要是為了減少運行時內存的使用。
zipalign是一個android平台上整理APK文件的工具,它對apk中未壓縮的數據進行4位元組對齊,對齊後就可以使用mmap函數讀取文件,可以像讀取內存一樣對普通文件進行操作。如果沒有4位元組對齊,就必須顯式的讀取,這樣比較緩慢並且會耗費額外的內存。
參考文章:
Android-Studio配置構建
淺談Android打包流程
apk打包流程
END!
B. 如何搭建android運行環境
1.Android運行環境的搭建
進行安卓系統的軟體設計,那麼JDK的開發環境搭建必須是首要的。我們選擇Windows10 64位操作系統。同時在JDK版本的選擇中選用Windows x64版本的Java SE Development Kit 8u5,該版本穩定,應用廣泛而且開源免費,獲取方便。在安裝的過程中要注意不要重復安裝,應安裝完畢後立即刪除安裝包,否則如果不小心再次點到安裝包,該安裝包會立刻刪除所安裝的程序並詢問是否重新安裝。在JDK的安裝過程中,要注意開發工具,源代碼,公共JRE三項都要選中,而且要安裝到C盤默認目錄下,同時將其附帶的JRE同樣安裝到相同目錄下,同時硬碟至少應該留有2G的空間。
選擇好JDK的版本並進行安裝後,我們的JAVA環境就安裝好了,眾所周知,安卓系統是由JAVA語言架構的,所以在搭建安卓運行環境之前必須要先安裝JAVA環境。安裝完JAVA環境之後,我們進行安卓開發環境的搭建。我們就要進行Android SDK版本的選擇。我們這里選擇android-sdk_r24.4.1-windows版本。這個版本是與安卓8.0同時發布的,同時它的發布時間也在我們的安卓測試機紅米NOTE5A型號之後,可以完美兼容我們的安卓測試機所運行的安卓7.1.2版本。
5. 總結
本次主要介紹了系統軟體環境的搭建與生成,從Android運行環境的搭建,Windows系統環境變數設置,Android SDK的配置, SDK介面和APK生成幾個方面分別介紹了具體步驟,讓我們了解了本文安卓系統軟體開發的環境配置。
以上就是安卓環境和下載和安裝啦,按步驟來操作對小白來說也是相對簡單的,只要注意一些文中說明的細節,現在就開始行動起來一起學unity吧。
C. 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文件進行對齊操作,以便在運行時節約內存。
D. Android中APK簽名工具之jarsigner和apksigner詳解
轉自 https://www.cnblogs.com/slysky/p/9780015.html
一.工具介紹
jarsigner是JDK提供的針對jar包簽名的通用工具,
位於JDK/bin/jarsigner.exe
apksigner是Google官方提供的針對Android apk簽名及驗證的專用工具,
位於Android SDK/build-tools/SDK版本/apksigner.bat
不管是apk包,還是jar包,本質都是zip格式的壓縮包,所以它們的簽名過程都差不多(僅限V1簽名),
以上兩個工具都可以對Android apk包進行簽名.
1.V1和V2簽名的區別
在Android Studio中點擊菜單 Build->Generate signed apk... 打包簽名有兩種簽名選項 V1(Jar Signature) V2(Full APK Signature),
從Android 7.0開始, 谷歌增加新簽名方案 V2 Scheme (APK Signature);
但Android 7.0以下版本, 只能用舊簽名方案 V1 scheme (JAR signing)
V1簽名:
V2簽名:
V2簽名優點很明顯:
注意: apksigner工具默認同時使用V1和V2簽名,以兼容Android 7.0以下版本
2.zipalign和V2簽名
位於Android SDK/build-tools/SDK版本/zipalign.exe
zipalign 是對zip包對齊的工具,使APK包內未壓縮的數據有序排列對齊,從而減少APP運行時內存消耗
zipalign -v 4 in.apk out.apk //4位元組對齊優化
zipalign -c -v 4 in.apk //檢查APK是否對齊
zipalign可以在V1簽名後執行
但zipalign不能在V2簽名後執行,只能在V2簽名之前執行!!!
二.簽名步驟
1.生成密鑰對(已有密鑰庫,可忽略)
Android Studio在Debug時,對App簽名都會使用一個默認的密鑰庫:
1.生成密鑰對
進入JDK/bin, 輸入命令
參數:
提示: 可重復使用此條命令,在同一密鑰庫中創建多條密鑰對
例如: 在debug.keystore中新增一對密鑰,別名是release
keytool -genkeypair -keystore debug.keystore -alias release -validity 30000
2.查看密鑰庫
進入JDK/bin, 輸入命令
keytool -list -v -keystore 密鑰庫名
參數:
例如:
keytool -list -v -keystore debug.keystore
現在debug.keystore密鑰庫中有兩對密鑰, 別名分別是androiddebugkey release
2.簽名
1.方法一(jarsigner,只支持V1簽名)
進入JDK/bin, 輸入命令
從JDK7開始, jarsigner默認演算法是SHA256, 但Android 4.2以下不支持該演算法,
所以需要修改演算法, 添加參數 -digestalg SHA1 -sigalg SHA1withRSA
參數:
例如:
用JDK7及以上jarsigner簽名,不支持Android 4.2 以下
jarsigner -keystore debug.keystore MyApp.apk androiddebugkey
用JDK7及以上jarsigner簽名,兼容Android 4.2 以下
jarsigner -keystore debug.keystore -digestalg SHA1 -sigalg SHA1withRSA MyApp.apk androiddebugkey
2.方法二(apksigner,默認同時使用V1和V2簽名)
進入Android SDK/build-tools/SDK版本, 輸入命令
若密鑰庫中有多個密鑰對,則必須指定密鑰別名
禁用V2簽名
apksigner sign --v2-signing-enabled false --ks 密鑰庫名 xxx.apk
參數:
例如:
在debug.keystore密鑰庫只有一個密鑰對
apksigner sign --ks debug.keystore MyApp.apk
在debug.keystore密鑰庫中有多個密鑰對,所以必須指定密鑰別名
apksigner sign --ks debug.keystore --ks-key-alias androiddebugkey MyApp.apk
3.簽名驗證
1.方法一(keytool,只支持V1簽名校驗)
進入JDK/bin, 輸入命令
keytool -printcert -jarfile MyApp.apk (顯示簽名證書信息)
參數:
2.方法二(apksigner,支持V1和V2簽名校驗)
進入Android SDK/build-tools/SDK版本, 輸入命令
apksigner verify -v --print-certs xxx.apk
參數:
例如:
apksigner verify -v MyApp.apk