解決華為手機無法安裝未簽名apk問題(該安裝包未包含任何證書)


  參考資料:

  https://www.cnblogs.com/onelikeone/p/10920629.html

  https://www.cnblogs.com/xiaoshen666/p/11008255.html

  今天在外網上下載了一個apk,想安裝到我的Huawei Mate20X 上,沒想到出現了這一幕:  

  提示我這個apk沒有包含任何證書?什么鬼,沒有證書這個apk是怎么發布的,在網上查找了資料,發現大部分都是在扯淡完全不解決問題。經過20多分鍾的折騰,我成功地使用了重簽名的方式解決了這個問題,這篇文章將是一個半教程的形式,需要讀者有一定的開發經驗和安全協議知識。

  1. 首先明確問題,這個apk的證書出現了問題

  由於Android系統的安全規范,apk必須進行簽名才能夠發布,如果系統驗證后發現簽名不一致,說明這個apk被篡改了。如果系統發現完全沒有簽名,那么它會直接拒絕簽名。找到問題后我們的解決方案應該完全圍繞簽名來走。

 

  2. 看看這個apk的簽名出現了什么問題

  上Java程設課安裝過jdk,直接運行keytools命令檢查一下apk的簽名狀態。(這里我把apk重命名成了myapp.apk)

  運行如下命令:

keytool -printcert -jarfile  你的apk文件

   看不出毛病啊,這不是有簽名嗎?只不過簽名的信息看起來比較少。看來並不是沒有簽名,而是這個簽名華為不認啊。

 

  3. 着手對apk進行重簽名

  我們使用解壓縮軟件打開myapp.apk,里面有一個META-INF文件夾,這里面就是apk數字簽名的存放位置。我們將它刪掉,使用壓縮軟件把這里面的東西重新壓縮成.zip文件,並重命名為usigned.apk。

   這樣我們就有了一個未被簽名的usigned.apk文件。

 

  4. 正式生成RSA簽名證書

  簽名就需要公私鑰了,正規發布的話可能就要用到CA了,但是我們不用這么麻煩,直接自簽發證書就好了。運行如下命令:

keytool -genkey -v -keystore myApp.keystore -alias myApp.keystore -keyalg RSA -validity 30000

  它會問你幾個信息,你的名字啊,國家啊,機構啊啥啥的。直接瞎填就好了,不過要記住你的密碼。運行完獲得了一個文件myApp.keystore,如果我沒猜錯的話這個就相當於給你弄了個私鑰證書了,不過是自簽發的。

  然后我們將myApp.keystore和usigned.apk放到同一個文件夾下,運行如下命令:

jarsigner -verbose -keystore myApp.keystore -signedjar sign.apk usigned.apk myApp.keystore

  這段代碼就是使用jarsigner這個簽名軟件對usigned.apk進行簽名,生成簽名后的apk。依據的RSA簽名證書就是自簽發的myApp.keystore。

  這樣我們就簽好名啦,放到手機上安裝一下:

   安裝正常且能正常打開~~ 一切正常。

   

  總結:因為華為嚴格的安全特性,導致有些apk簽名無法被識別,這時候我們可以用 keytools + jarsigner 進行重簽名。如果對這方面的操作不熟悉,是否可以考慮在線生成證書?如果在線生成證書不好使,是否可以考慮將其他apk的證書直接copy過去重打包?(因為經常會報錯簽名不一致,但還是讓我們安裝了)。我沒有進行嘗試,感興趣的朋友可以試一試。

  補充:另外看到有網友提到一個叫MT管理器的安卓app可以更方便地管理apk簽名,讀者可以一試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM