注意:如果使用的是AndroidStudio支持的多渠道打包方式的話,將不會出現(xiàn)此問題唱逢。
官方說明
Android 7.0 引入一項(xiàng)新的應(yīng)用簽名方案 APK Signature Scheme v2屋休,它能提供更快的應(yīng)用安裝時間和更多針對未授權(quán) APK 文件更改的保護(hù)。在默認(rèn)情況下痪枫,Android Studio 2.2 和 Android Plugin for Gradle 2.2 會使用 APK Signature Scheme v2 和傳統(tǒng)簽名方案來簽署您的應(yīng)用叠艳。
雖然我們建議您對您的應(yīng)用采用 APK Signature Scheme v2附较,但這項(xiàng)新方案并非強(qiáng)制性的。如果您的應(yīng)用在使用 APK Signature Scheme v2 時不能正確開發(fā)翅睛,您可以停用這項(xiàng)新方案捕发。禁用過程會導(dǎo)致 Android Studio 2.2 和 Android Plugin for Gradle 2.2 僅使用傳統(tǒng)簽名方案來簽署您的應(yīng)用。要僅用傳統(tǒng)方案簽署扎酷,打開模塊級 build.gradle 文件,然后將行 v2SigningEnabled false 添加到您的版本簽名配置中:
android {
...
defaultConfig { ... }
signingConfigs {
release {
storeFile file("myreleasekey.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
v2SigningEnabled false
}
}
}
注意:如果您使用 APK Signature Scheme v2 簽署您的應(yīng)用幅聘,并對應(yīng)用進(jìn)行了進(jìn)一步更改窃植,則應(yīng)用的簽名將無效。出于這個原因葛超,請在使用 APK Signature Scheme v2 簽署您的應(yīng)用之前延塑、而非之后使用 zipalign 等工具。
場景
當(dāng)我們需要多渠道打包時 且是使用了V2簽名的話 將有可能出現(xiàn) 包將無法在Android7.0上進(jìn)行安裝 并提示錯誤為:INSTALL_PARSE_FAILED_NO_CERTIFICATES
實(shí)質(zhì)原因是 在簽完名后進(jìn)行多渠道打包(會修改原先的包)造成了在安裝的時候簽名驗(yàn)證時 提示驗(yàn)證失敗 無法安裝侥涵。
簡述V2簽名原理:
簽名將在圖中粉色位置創(chuàng)建APKSigningBlock文件独令,保存簽名信息好芭。
當(dāng)用戶在Android7.0安裝的時候 如果發(fā)現(xiàn)簽完名后的apk包被修改過 則判斷為驗(yàn)證失敗 將無法安裝。
多渠道打包方式
修改后重新打包或簽名的招狸,例如在AndroidMainfest里面添加mata-data等(此處使用的就是AndroidStudio直接支持的方式)
修改后不需要重新簽名邻薯,主要有兩種: (自行編寫程序代碼 對于APK文件直接修改)
直接把a(bǔ)pk包看成一個zip包,然后在zip包的注釋段添加對應(yīng)的渠道信息
直接把a(bǔ)pk包看成一個zip包累榜,然后利用相關(guān)命令在META-INF內(nèi)注入${channel}.txt 文件
問題詳情與解決辦法
當(dāng)我們使用第二種打包方式的時候灵嫌,在V1簽名下是不會出現(xiàn)問題的寿羞。
但是如果使用的是V2簽名就會出現(xiàn)這些問題(V2驗(yàn)證更加嚴(yán)格)
解決辦法:
使用第一種打包方式
如果使用第二種打包方式的話 就可以使用 美團(tuán)新出的多渠道打包工具Walle
新一代開源Android渠道包生成工具Walle