在前一章節裏面,經過ionic run使app成功在手機上面跑起來,而且將android-debug.apk放到手機上後發現也能正常的安裝,debug版本和release版本到底什麼區別呢,這裏就須要瞭解安卓的apk簽名:爲了保證每一個應用程序開發商合法ID,防止部分開放商可能經過使用相同的Package Name來混淆替換已經安裝的程序,咱們須要對咱們發佈的APK文件進行惟一簽名,保證咱們每次發佈的版本的一致性(如自動更新不會由於版本不一致而沒法安裝)。
若是使用沒有統一簽名的debug版本進行覆蓋安裝時將會報錯,提示:應用未安裝。
android
進行簽名的好處都有啥呢:安全
應用程序升級:若是你但願用戶無縫升級到新的版本,那麼你必須用同一個證書進行簽名。這是因爲只有以同一個證書籤名,系統纔會容許安裝升級的應用程序。若是你採用了不一樣的證書,那麼系統會要求你的應用程序採用不一樣的包名稱,在這種狀況下至關於安裝了一個全新的應用程序。若是想升級應用程序,簽名證書要相同,包名稱要相同!app
應用程序模塊化:Android 系統能夠容許同一個證書籤名的多個應用程序在一個進程裏運行,系統實際把他們做爲一個單個的應用程序,此時就能夠把咱們的應用程序以模塊的方式進行部署,而用戶能夠獨立的升級其中的一個模塊ionic
代碼或者數據共享:Android 提供了基於簽名的權限機制,那麼一個應用程序就能夠爲另外一個以相同證書籤名的應用程序公開本身的功能。以同一個證書對多個應用程序進行簽名,利用基於簽名的權限檢查,你就能夠在應用程序間以安全的方式共享代碼和數據了。模塊化
不一樣的應用程序之間,想共享數據,或者共享代碼,那麼要讓他們運行在同一個進程中,並且要讓他們用相同的證書籤名。工具
簽名使用到的工具是Keytool:keytool 是個密鑰和證書管理工具。它使用戶可以管理本身的公鑰/私鑰對及相關證書,用於(經過數字簽名)自我認證(用戶向別的用戶/服務認證本身)或數據完整性以及認證服務。它還容許用戶儲存他們的通訊對等者的公鑰(以證書形式)
。
首先進入到工程目錄後輸入
$ keytool -genkey -v -keystore my-release-key.keystore -alias 你的應用名稱 -keyalg RSA -keysize 2048 -validity 10000
ui
成功生成簽名文件
spa
Releaese版本和Debug版本的區別:debug
debug簽名的應用程序不能在AndroidMarket上架銷售,它會強制你使用本身的簽名;Debug模式下簽名用的證書(默認是Eclipse/ADT和Ant編譯)自從它建立之日起,1年後就會失效。code
debug.keystore在不一樣的機器上所生成的可能都不同,就意味着若是你換了機器進行apk版本升級,那麼將會出現上面那種程序不能覆蓋安裝的問題,至關於軟件不具有升級功能!
使用命令ionic build android --release
進行release版本的發佈。在apk目錄下選中咱們須要的版本
輸入命令:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore sangcan.apk sangcan
這裏後面的sangcan.apk是咱們的目標apk版本,這裏是我的習慣將前面的目標文件重命名爲sangcan.apk。然後面的sangcan則是以前在生成簽名時填寫的應用名稱。
簽名成功後能夠看到成功進行覆蓋安裝
到這裏Release版本的APK成功發佈。