老簽名多渠道打包原理
前言
由于Android7.0發(fā)布了新的簽名機制,加強了簽名的加固,導致在新的簽名機制下無法通過美團式的方式再繼續(xù)打多渠道包了。不過在說新的簽名機制對打包方案的
影響和為什么會影響我們原有的打包機制之前,需要先簡單理解下打包原理和簽名在整個打包過程中的作用。
Android打包流程

Android打包過程大致如圖所示,整個流程就是將Java代碼,資源文件以及第三方庫整合成一個Apk文件,并對整合后的文件進行簽名和優(yōu)化對齊。整個過程可以簡
單分為以下幾個步驟:
APK生成的步驟大概就是這個樣子,我們不需要糾結一些細節(jié)上的實現(xiàn),只要大概了解這些流程就能理解后面我們打包方案的原理了。當然,這么看會覺得APK
是一個很神奇的文件,能夠安裝并且運行。其實,APK只是一中比較特別的.zip文件而已,只是它可以被我們的Android機器識別并且安裝成一個應用,我們可以把APK文件解壓出來看一下里面的內(nèi)容。


可以看到文件內(nèi)容和我們前面說的基本一致,接下來再看看最重要的一個文件夾,就是第三章圖里的文件,這些文件都在META-INF文件夾里,這就是我們在簽名過程中加入的文件來作為APK的唯一標識。那么這對我們打包優(yōu)化來說有什么意義呢,這里先保留下懸念,待會兒來說。在了解這個之前必須先把簽名這件事情說清楚。
簽名的作用和原理
簽名的作用
Android App在開發(fā)時都有一個唯一的標識,我們把它叫做包名,比如大客戶端的包名是com.Quanr,包名就像身份證號一樣,是和每一個人一一對應的,在把App安裝時機器也是通過包名來識別應用的,一個機器中不能存在兩個包名一樣的應用,這就是App在機器中的唯一性。我們在給App升級的時候,比如覆蓋安裝,就是通過包名來進行識別和對應的覆蓋,這樣才能保證App可以順利升級而不會覆蓋了其他的App,同樣,別的App包名不同也無法覆蓋我們的App。雖然Android提供了一套包名識別機制,但僅有包名就可以了嗎。試想一下,如果別人用我們的包名新建一個App想要覆蓋我們的App亦或是不法分子破解我們的
App往里面添加一些自己的內(nèi)容,比如內(nèi)嵌廣告來牟利,把篡改過的App再發(fā)出去讓用戶覆蓋安裝,我們可能會受到巨大的損失。當然這種事情是不會發(fā)生的,Google為每一個App增加了一個簽名機制,就像我們?nèi)ャy行辦理業(yè)務,不但要提供身份證,還要簽字畫押,身份證號大家都可以看到,但簽字畫押只有自己才能做,別人是無法模仿的,App正是通過這種機制保證了自身的唯一性和安全性。
那么,簽名是如何做到這些的呢。
簽名的原理
對Apk簽名有好幾種工具,但原理都是大同小異的,這里拿signapk這個工具來說,對apk簽名只要用這個工具附帶一些參數(shù)以及我們的唯一的簽名文件就可以完成了,直接使用工具簽名是很簡單的,我們更需要關注的是它的原理和具體是怎么實現(xiàn)的,這樣才能幫助我們從中找出打渠道包的秘密。在使用簽名工具之前我們必須準備好簽名要用的私鑰和公鑰(a 主站蜘蛛池模板: 大港区| 太仆寺旗| 普定县| 弋阳县| 南郑县| 定结县| 营口市| 昭通市| 雷山县| 张家川| 平谷区| 平定县| 林口县| 正安县| 固始县| 松江区| 温宿县| 新密市| 孟连| 万山特区| 滨海县| 贺州市| 墨江| 阿瓦提县| 洛宁县| 七台河市| 龙江县| 诸城市| 嘉义县| 永和县| 克山县| 水城县| 安阳县| 天台县| 博白县| 旺苍县| 邯郸县| 延寿县| 句容市| 台北市| 彰化市|