android7.0應用安裝失敗的問題
背景
APK Signature Scheme v2官方介紹
Android 7.0 引入一項新的應用簽名方案 APK Signature Scheme v2,它能提供更快的應用安裝時間和更多針對未授權 APK 檔案更改的保護。在預設情況下,Android Studio 2.2 和 Android Plugin for Gradle 2.2 會使用 APK Signature Scheme v2 和傳統簽名方案來簽署您的應用。
如果您使用 APK Signature Scheme v2 簽署您的應用,並對應用進行了進一步更改,則應用的簽名將無效。出於這個原因,請在使用 APK Signature Scheme v2 簽署您的應用之前、而非之後使用 zipalign 等工具。
官方關於v2的詳細介紹:https://source.android.com/security/apksigning/v2.html
渠道或者開發者關於渠道包的解決方案
目前主流的渠道號方案主要有以下幾種:
- 修改後重新打包或簽名的,例如在AndroidMainfest裡面新增mata-data等
-
修改後不需要重新簽名,主要有兩種:
- 直接把apk包看成一個zip包,然後在zip包的註釋段新增對應的渠道資訊
- 直接把apk包看成一個zip包,然後利用相關命令在META-INF內注入${channel}.txt 檔案
其中下面兩種不需要重新簽名的方法,被各主要渠道廣泛使用。
渠道包與V2簽名的衝突
然而,為了提高Android系統的安全性,Google從Android N增強了簽名模式,該模式在原有的簽名模式上,增加校驗APK的SHA256雜湊值;這種新引入的簽名機制,會對整個檔案的每個位元組都會做校驗,包括 comment 區域。如果簽名後對APK作了任何修改,例如上面提到的修改註釋段或者注入檔案,在Android
7.0以上的機型安裝時都會校驗失敗,提示沒有簽名無法安裝。
解決方案
為了解決使用V2引起的問題,官方提供了不啟用V2簽名的方法,但是隨著Android越來越完善,這種方案最終肯定是要全面使用的。目前已經有團隊找到了基於V2簽名的新的渠道號方案,由於種種原因,暫時不詳細論述怎麼實現。這裡僅提供其餘的解決方案:
怎麼禁用V2簽名
對於怎麼禁用V2簽名,官方提供了對應的方法,下文內容為禁用方法
雖然我們建議您對您的應用採用 APK Signature Scheme v2,但這項新方案並非強制性的。如果您的應用在使用 APK Signature Scheme v2 時不能正確開發,您可以停用這項新方案。禁用過程會導致 Android Studio 2.2 和 Android Plugin for Gradle 2.2 僅使用傳統簽名方案來簽署您的應用。要僅用傳統方案簽署,開啟模組級 build.gradle 檔案,然後將行 v2SigningEnabled false 新增到您的版本簽名配置中:
android {
...
defaultConfig { ... }
signingConfigs {
release {
storeFile file("myreleasekey.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
v2SigningEnabled false
}
}
}
官方說明對應地址:https://developer.android.google.cn/about/versions/nougat/android-7.0.html
怎麼檢查一個apk是否使用了V2簽名以及V2校驗是否通過
對於渠道SDK的開發者或者渠道來說,如果開發者上傳的應用V2簽名校驗不能通過的話,那將是非常嚴重的問題,這樣的安裝包在Android 7.0以上版本的機器上是完全無法安裝的。目前官方提供了校驗一個apk簽名校驗是否通過的工具。
-
官方APK再簽名或者校驗簽名工具apksigner介紹:
https://developer.android.com/studio/command-line/apksigner.html
-
官方APK再簽名或者校驗簽名工具apksigner原始碼:
除了官方沒有提供的工具。通過閱讀原始碼發現在ApkSignatureSchemeV2Verifier.java
裡面也有對應的邏輯實現,目前個人已經把對應程式碼遷移出來製作了獨立的工具提供使用。
工具下載
-
下載地址:
-
MD5:
MD5 (./CheckAndroidV2Signature.jar) = 22646da1410256ce93979b33525c888e
使用事例
-
檢視幫助
➜ java -jar CheckAndroidV2Signature.jar usage: java -jar ./CheckAndroidV2Signature.jar [--version] [--help] [filePath] such as: java -jar ./CheckAndroidV2Signature.jar --version java -jar ./CheckAndroidV2Signature.jar --help java -jar ./CheckAndroidV2Signature.jar ./test.apk after check,the result will be a string json such as: {"ret":0,"msg":"ok","isV2":true,"isV2OK":true} ret: result code for check 0 : command exec succ -1 : file not found -2 : file not an Android APK file -3 : check File signature error ,retry again msg: result msg for check isV2: whether the file is use Android-V2 signature or not isV2OK: whether the file's Android-V2 signature is ok or not
-
檢視版本
➜ java -jar ./CheckAndroidV2Signature.jar --version com.tencent.ysdk.CheckAndroidV2Signature version 1.0.1 (CheckAndroidV2Signature - 2) homepage : https://github.com/bihe0832/AndroidGetAPKInfo blog : http://blog.bihe0832.com github : https://github.com/bihe0832
-
檢視應用資訊
➜ java -jar ./CheckAndroidV2Signature.jar ./YSDK_Android_1.3.1_629-debug-ysdktest-inner.apk {"ret":0,"msg":"ok","isV2":false,"isV2OK":false}
原始碼地址:
相關文章
- 如何解決應用安裝失敗錯誤碼-13的問題
- iOS應用安裝失敗原因排查iOS
- brew install mac安裝失敗的問題Mac
- Composer doctrine/dbal 2.0 安裝失敗問題
- Win8應用安裝失敗怎麼辦
- 安裝失敗????
- Wireshark安裝失敗或找不到網路介面問題
- [提問交流]安裝失敗IS_POST
- iOS應用安裝失敗原因排查 – HTTPS SSL 教程iOSHTTP
- Ubuntu中fcitx安裝失敗問題,及軟體換源問題Ubuntu
- 解決在ubuntu系統中安裝Chrome失敗的問題UbuntuChrome
- qq安裝出現提取安裝檔案失敗,qq安裝失敗
- 安裝scrapy失敗
- macOS High Sierra下pyenv安裝多版本失敗問題Mac
- Linux解決MySQL-python安裝失敗問題LinuxMySqlPython
- 解決npm 安裝部分依賴失敗問題總結NPM
- win10系統安裝失敗提示“無法安裝應用”的解決方法Win10
- win10安裝3dmax失敗怎麼辦_如何解決win10安裝3dmax失敗的問題Win103D
- 安裝Redmine2.3.0時,需要安裝Mysql20.3.11,總是安裝失敗問題MySql
- 用conda安裝庫時遇到環境查詢失敗問題解決方案
- Aix 7一次補丁安裝失敗問題處理AI
- 徹底解決docker build時安裝軟體失敗問題DockerUI
- ElasticSearch 安裝root使用者啟動失敗問題解決Elasticsearch
- pip安裝模組失敗
- 安裝失敗,求救(轉)
- 解決@vue/cli 建立專案是安裝chromedriver時失敗的問題VueChrome
- 問題解決--npm install 安裝依賴一直失敗NPM
- win10下安裝tesserocr失敗(問題已解決,見文末)Win10
- Eclipse 安裝 Axis2外掛失敗問題解決方案Eclipse
- Emgu.CV.Runtime.Windows nuget 安裝失敗問題解決方案Windows
- win10應用商店更新失敗無法安裝如何恢復Win10
- 解決debian7下安裝GD擴充套件失敗的問題套件
- 最失敗的 JavaScript 面試問題JavaScript面試
- MySQL建立表失敗的問題MySql
- VCSA6.7 安裝失敗
- pip 安裝 selenium 失敗
- matplotlib 安裝失敗,求解!
- oracle安裝補丁失敗Oracle