android技巧03:對APK進行重簽名

來源:互聯網
上載者:User

1.      產生Android APK包簽署憑證
1).     在doc中切換到jdk的bin目錄
cd C:\Program Files\Java\jdk1.6.0_18\bin
2).     運行下面的命令
keytool –genkey –alias android123.keystore –keyalg RSA –validity 20000 –keystore android123.keystore
/*解釋:keytool工具是Java JDK內建的認證工具
-genkey參數表示:要產生一個認證(著作權、身份識別的安全性憑證)
-alias參數表示:認證有別名,-alias mine.keystore表示認證別名為:mine
-keyalg RSA表示加密類型,RSA表示需要加密,以防止別人盜取
-validity 20000表示有效時間20000天( K3
-keystore mine123.keystore表示要產生的認證名稱為mine123
*/
 
輸入完斷行符號後螢幕顯示:
輸入keystore密碼:[密碼不回顯](一般建議使用20位,最好記下來後面還要用)
再次輸入新密碼:[密碼不回顯]
您的名字與姓氏是什嗎?
[Unknown]:lili
您的組織單位名稱是什嗎?
[Unknown]:snoopy
您的組織名稱是什嗎?
[Unknown]:snoopy team
您所在的城市或地區名稱是什嗎?
[Unknown]:beijing
您所在的州或省份名稱是什嗎?
[Unknown]:beijing
該單位的兩字母國家代碼是什麼
[Unknown]:CN
CN=lili, U=snoopy, O=snoopy team, L=beijing, ST=beijing, C=CN正確嗎?
[否]:Y
輸入< mine.keystore>的主密碼
(如果和keystore密碼相同,按斷行符號):

查看C:\Program Files\Java\jdk1.6.0_18\bin,產生了以後簽名用的認證Key:mine123.keystore

        這裡,大家如果試過在eclipse中產生一個簽名檔案時,它的大小也是2kb,同時產生過程中,還是會讓填寫別名的。

2.      刪除之前的簽名檔案
1).     用解壓工具解壓縮apk檔案(如:解壓到D:\Sign\PhoneBook)

壓縮包內容解析:

  • AndroidManifest.xml

該檔案是每個應用都必須定義和包含的,它描述了應用的名字、版本、許可權、引用的庫檔案等等資訊[ , ],如要把apk上傳到Google Market上,也要對這個xml做一些配置。在apk中的AndroidManifest.xml是經過壓縮的,可以通過AXMLPrinter2工具[ , ]解開,具體命令為:java -jar AXMLPrinter2.jar AndroidManifest.xml

  • META-INF目錄 

META-INF目錄下存放的是簽名資訊,用來保證apk包的完整性和系統的安全。在eclipse編譯產生一個apk包時,會對所有要打包的檔案做一個校正計算,並把計算結果放在META-INF目錄下。這就保證了apk包裡的檔案不能被隨意替換。比如拿到一個apk包後,如果想要替換裡面的一幅圖片,一段代碼, 或一段著作權資訊,想直接解壓縮、替換再重新打包,基本是不可能的。如此一來就給病毒感染和惡意修改增加了難度,有助於保護系統的安全。

  • res目錄 

      res目錄存放資源檔。包括圖片,字串等等。

  • lib目錄

lib目錄下的子目錄armeabi存放的是一些so檔案。這個地方多講幾句,都是在開發過程中摸索出來的。eclipse在打包的時候會根據檔案名稱的命名規則(lib****.so)去打包so檔案,開頭和結尾必須分別為“lib”和“.so”,否則是不會打包到apk檔案中的。其他非eclipse開發環境沒有測試過。如果你是用SDK和NDK開發的話,這部分很重要,甚至可以通過把一些不是so檔案的檔案通過改名打包到apk中,具體能幹些什麼那就看你想幹什麼了,呵呵呵!

  • assets目錄

assets目錄可以存放一些設定檔,這些檔案的內容在程式運行過程中可以通過相關的API獲得。具體的方法可以參考SDK中的例子:在sdk的 \SDK\1.6\android-sdk-windows-1.6_r1\platforms\android-1.6\samples\ApiDemos 例子中,有個com.example..android.apis.content 的例子,在這個例子中他把一個text檔案放到工程的asset目錄下,然後把這個txt當作普通檔案處理。處理的過程在ReadAsset.java中。同理,asset也可以放置其他檔案。

  • classes.dex檔案 

      classes.dex是java源碼編譯後產生的java位元組碼檔案。但由於Android使用的dalvik虛擬機器與標準的java虛擬機器是不相容的,dex檔案與class檔案相比,不論是檔案結構還是opcode都不一樣。目前常見的java反編譯工具都不能處理dex檔案。Android模擬器中提供了一個dex檔案的反編譯工具,dexdump。用法為首先啟動Android模擬器,把要查看的dex檔案用adb push上傳的模擬器中,然後通過adb shell登入,找到要查看的dex檔案,執行dexdump
xxx.dex。另,有人介紹到Dedexer是目前在網上能找到的唯一一個反編譯dex檔案的開源工具,需要自己編譯原始碼。

  • resources.arsc 

      編譯後的二進位資源檔  ”
 
2).     找到下面的目錄META-INF,刪除目錄META-INF
3).     將PhoneBook整個檔案夾用zip工具,重新打包成zip壓縮包,然後更改尾碼為apk (注意:產生的PhoneBook.zip中沒有二級根目錄)
 
3.      重新簽名APK檔案
1).     將認證複製到與需要重新簽名的apk檔案相同的目錄下(如:複製到D:\Sign)
2).     在doc中切換到需要重新前面的apk檔案的目錄下
cd D:\Sign
3).     運行下面的命令
jarsigner –verbose –keystore mine123.keystore –signedjar PhoneBook_signed.apk PhoneBook.apk mine.keystore
/*解釋:hjarsigner是Java的簽名工具
-verbose參數表示:顯示出簽名詳細資料
-keystore表示使用目前的目錄中的mine123.keystore簽署憑證檔案。
-signedjar PhoneBook_signed.apk表示簽名後產生的APK名稱,PhoneBook.apk表示未簽名的APK Android軟體, mine.keystore表示別名
*/
輸入完斷行符號後螢幕如顯示:

查看D:\Sign目錄,已產生重新簽名後的PhoneBook_signed.apk檔案

另外,有時候會發現這種方式打出的APK包在某些地方用不了,文章《簡單修改APK和重新簽名》提供了一個更為便捷的方案。

參考資料:

重新簽名APK檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.