国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android 7.0中新簽名對多渠道打包的影響詳解

2019-12-12 03:42:34
字體:
來源:轉載
供稿:網(wǎng)友

老簽名多渠道打包原理

前言

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

Android打包流程

Android打包過程大致如圖所示,整個流程就是將Java代碼,資源文件以及第三方庫整合成一個Apk文件,并對整合后的文件進行簽名和優(yōu)化對齊。整個過程可以簡

單分為以下幾個步驟:

  1. 資源預編譯  為每一個非assert資源生成一個ID并保存在一個R文件中。
  2. Java文件編譯  把手動編寫的Java文件和前面步驟生成的Java文件一起編譯成.class文件
  3. Dex文件生成  把前面生成的class文件和第三方庫的class文件一起整合成.dex文件,相當于所有.class文件的索引表,可以通過這個文件找到每一個.class文件
  4. 資源文件打包  對資源進行大小進行優(yōu)化,并把所有有ID的資源對應的配置信息收錄生成resource.arsc文件中,相當于資源的索引表。
  5. APK文件生成  把之前生成的.dex文件和resource.arsc文件以及資源文件(res文件,里面包含一些已編譯成二進制的文件如布局文件等和一些未編譯成二進制的文件如圖片等)和未分配ID的文件(assert文件)等整合成一個APk文件(特殊的.zip文件)。
  6. 簽名  對生成的APK進行簽名,添加唯一標識,從而保證能夠正常安裝和覆蓋安裝,不會被惡意覆蓋,以及說明APK的來源和擁有者。
  7. 對齊處理  對APK中一些資源的二進制上的位置進行調(diào)整,從而加快APk運行時的速度。

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

主站蜘蛛池模板: 大港区| 太仆寺旗| 普定县| 弋阳县| 南郑县| 定结县| 营口市| 昭通市| 雷山县| 张家川| 平谷区| 平定县| 林口县| 正安县| 固始县| 松江区| 温宿县| 新密市| 孟连| 万山特区| 滨海县| 贺州市| 墨江| 阿瓦提县| 洛宁县| 七台河市| 龙江县| 诸城市| 嘉义县| 永和县| 克山县| 水城县| 安阳县| 天台县| 博白县| 旺苍县| 邯郸县| 延寿县| 句容市| 台北市| 彰化市|