Android App的簽名打包
1.簽名的意義
為了保證每個應用程式開發商合法ID,防止部分開放商可能通過使用相同的Package Name來混淆替換已經安裝的程式,我們需要對我們釋出的APK檔案進行唯一簽名,保證我們每次釋出的版本的一致性(如自動更新不會因為版本不一致而無法安裝)。
2.簽名的步驟
a.建立key
b.使用步驟a中產生的key對apk簽名
3.具體操作
方法一: 命令列下對apk簽名(原理)
建立key,需要用到keytool.exe (位於jdk1.6.0_24jre\bin目錄下),使用產生的key對apk簽名用到的是jarsigner.exe (位於jdk1.6.0_24\bin目錄下),把上兩個軟體所在的目錄新增到環境變數path後,開啟cmd輸入
D:>keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000
-keystore demo.keystore /*說明:-genkey 產生金鑰 -alias demo.keystore 別名 demo.keystore -keyalg RSA 使用RSA演算法對簽名加密 -validity 40000 有效期限4000天 -keystore demo.keystore */ D:>jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk
demo.apk demo.keystore /*說明:-verbose 輸出簽名的詳細資訊 -keystore demo.keystore 金鑰庫位置 -signedjar demor_signed.apk demo.apk demo.keystore 正式簽名,三個引數中
依次為簽名後產生的檔案demo_signed,要簽名的檔案demo.apk和金鑰庫demo.keystore.*/
注意事項:Android工程的bin目錄下的demo.apk預設是已經使用debug使用者簽名的,所以不能使用上述步驟對此檔案再次簽名。正確步驟應該是:在工程點選右鍵->Anroid Tools-Export Unsigned Application Package匯出的apk採用上述步驟簽名。
方法二:使用Eclipse匯出帶簽名的apk
Eclipse直接能匯出帶簽名的最終apk,非常方便,推薦使用,步驟如下:
第一步:匯出。
第二步:建立金鑰庫keystore,輸入金鑰庫匯出位置和密碼,記住密碼,下次Use existing keystore會用到。
第三步:填寫金鑰庫資訊,填寫一些apk檔案的密碼,使用期限和組織單位的資訊。
第四步:生成帶簽名的apk檔案,到此就結束了。
第五步:如果下次釋出版本的時候,使用前面生成的keystore再簽名。
第六步:下一步,下一步,然後就OK了!
方法三:使用IntelliJ IDEA匯出帶簽名的apk
方法步驟基本和Eclipse相同,大概操作路徑是:選單Tools->Andrdoid->Export signed apk。
4.簽名之後,用zipalign(壓縮對齊)優化你的APK檔案。
未簽名的apk不能使用,也不能優化。簽名之後的apk谷歌推薦使用zipalign.exe(位於android-sdk-windowsools目錄下)工具對其優化:
D:>zipalign -v 4 demo_signed.apk final.apk
如上,zipalign能夠使apk檔案中未壓縮的資料在4個位元組邊界上對齊(4個位元組是一個效能很好的值),這樣android系統就可以使用mmap()(請自行查閱這個函式的用途)函式讀取檔案,可以在讀取資源上獲得較高的效能,
PS:1.在4個位元組邊界上對齊的意思就是,一般來說,是指編譯器吧4個位元組作為一個單位來進行讀取的結果,這樣的話,CPU能夠對變數進行高效、快速的訪問(較之前不對齊)。
2.對齊的根源:android系統中的Davlik虛擬機器使用自己專有的格式DEX,DEX的結構是緊湊的,為了讓執行時的效能更好,可以進一步用"對齊"進一步優化,但是大小一般會有所增加。
5.簽名對你的App的影響。
你不可能只做一個APP,你可能有一個巨集偉的戰略工程,想要在生活,服務,遊戲,系統各個領域都想插足的話,你不可能只做一個APP,谷歌建議你把你所有的APP都使用同一個簽名證照。
使用你自己的同一個簽名證照,就沒有人能夠覆蓋你的應用程式,即使包名相同,所以影響有:
1) App升級。 使用相同簽名的升級軟體可以正常覆蓋老版本的軟體,否則系統比較發現新版本的簽名證照和老版本的簽名證照不一致,不會允許新版本安裝成功的。
2) App模組化。android系統允許具有相同的App執行在同一個程式中,如果執行在同一個程式中,則他們相當於同一個App,但是你可以單獨對他們升級更新,這是一種App級別的模組化思路。
3) 允許程式碼和資料共享。android中提供了一個基於簽名的Permission標籤。通過允許的設定,我們可以實現對不同App之間的訪問和共享,如下:
- AndroidManifest.xml:<permission android:protectionLevel="normal" />
相關文章
- 簽名打包Android版apkAndroidAPK
- 蘋果企業簽名APP打包流程+iPhone12渲染圖蘋果APPiPhone
- IOS App簽名原理iOSAPP
- App簽名二三事APP
- 加固+美團walle簽名打包+Python一鍵打包Python
- Android空包Apk簽名AndroidAPK
- Android 應用簽名Android
- Android簽名機制Android
- 蘋果軟體打包簽名原理蘋果
- 蘋果簽名是怎樣給手機app簽名的呢?蘋果APP
- Android v1 簽名 和 v2+ 簽名Android
- Android之重新簽名APKAndroidAPK
- Android應用重簽名Android
- iOS逆向(3)-APP重簽名iOSAPP
- Android 多包名打包應用Android
- iOS APP簽名機制詳解iOSAPP
- 微信APP支付-簽名問題APP
- Android加固之後Apk重簽名AndroidAPK
- Xamarin Android使用自簽名證書Android
- app超級簽名是幹什麼用的?APP
- IOS 逆向開發(四)App重簽名iOSAPP
- 安卓簽名檔案打包錯誤 Invalid keystore format安卓ORM
- 群簽名與環簽名的介紹
- Android Studio生成簽名檔案,自動簽名,以及獲取SHA1和Android
- IOS企業簽名的APP怎麼做分發?iOSAPP
- APP簽名後的應用分發是什麼APP
- 蘋果企業簽名直接下載APP的原理及蘋果企業簽名現狀解析蘋果APP
- 蘋果企業簽名:講解APP ID蘋果APP
- NW.js Mac App 簽名公證流程JSMacAPP
- Android加固和簽名的那些坑(防掉坑技巧)Android
- iOS逆向之旅(進階篇) — 重簽名APP(二)iOSAPP
- iOS逆向之旅(進階篇) — 重簽名APP(一)iOSAPP
- app直播原始碼,uniapp隨機數生成簽名APP原始碼隨機
- APP釋出怎麼選擇蘋果簽名?APP蘋果
- iOS簽名、iOS企業簽名、iOS超級簽名工具使用iOS
- 純小白uni-app+Android Studio離線打包APPAndroid
- 電子簽名與手寫簽名的區別,電子簽名的優勢是什麼?
- 隱藏Android簽名檔案和金鑰資訊Android
- ios蘋果企業簽名APP最有發言權iOS蘋果APP