- 精通Cocos2d-x游戲開發(進階卷)
- 王永寶
- 1793字
- 2020-11-28 22:36:58
2.4 使用加固工具
除了對腳本、圖片等資源進行加密之外,還可以使用360加固保、騰訊樂固等第三方工具對生成的安卓安裝包進行加固,可以提高應用的安全性,在一定程度上防止應用被破解。
? 360加固保http://jiagu.360.cn/;
? 騰訊樂固http://legu.qcloud.com/。
這兩款加固產品比較類似,這里就簡單介紹一下360加固保的使用。使用360加固保能有效防止應用被破解、反編譯、二次打包、惡意篡改,保護應用數據信息不會被黑客竊取,而且操作簡單快捷,既不增加包體的體積,也不影響程序的性能。可以直接在加固保的網站上傳應用進行加固,也可以下載加固助手對應用進行加固。
2.4.1 360加固保加固步驟
在網站上選擇要加固的已簽名應用,然后上傳到360加固保的網站。如果是使用加固助手,則可以設置簽名和密碼,直接進行加固,如圖2-8所示,填上keystore的路徑和密碼以及別名密碼(一般和keystore密碼一致),然后單擊左下角的“添加”按鈕即可。
360加固保為開發者提供加固基礎服務和可選增強服務,開發者根據使用需求選擇增強服務,選好后,再選擇上傳的apk簽名為正式簽名還是測試簽名,完成后,單擊“開始加固”按鈕進行加固。
如果使用加固助手,則可以在“加固選項”選項卡中根據使用需求選擇增強服務,如圖2-9所示,選好后將apk直接拖入或單擊加固應用并選擇要加固的apk,加固助手會自動加固。

圖2-8 360加固保設置簽名和密碼
下載應用后,需要對該apk進行再次簽名,且保證與加固前的簽名一致,否則加固后的應用無法在手機上運行。如果是使用加固助手,加固完之后會彈出加固成功的對話框,在對話框中可以打開加固后apk的存放目錄,可以直接使用加固后的apk,如圖2-10所示。
如果使用了增強服務,包體大概會增加幾百KB,加固之后再解壓我們的apk,可以發現AndroidManifest.xml文件已經無法用文本格式閱讀了,但圖片等資源并沒有被加密。
2.4.2 Android應用簽名
360加固保和樂固對安卓應用進行加固時,都需要我們提供簽名后的apk,只有經過簽名的apk才可以在手機或模擬器上安裝,由于我們打出的調試apk包會自動進行debug簽名,所以沒有對apk進行簽名也可以在手機或模擬器上安裝。這里說的簽名與前面介紹的數字簽名是一個意思。那么為什么要對apk進行簽名呢?這是為了區別apk的合法開發者,因為Android可以通過應用的包名和簽名來區分應用,如果騰訊的QQ手機應用直接使用了調試簽名,那么只需要做一個包名相同的QQ給用戶安裝,就可以覆蓋正版的QQ軟件,所以通過簽名就可以區分出這是誰開發的應用。我們應該使用同一個證書對開發的多個apk進行簽名,這樣可以帶來很多好處。

圖2-9 360加固保的加固選項

圖2-10 360加固助手的加固列表
? App升級時,使用相同簽名的升級軟件可以正常覆蓋老版本的軟件,簽名不一致是無法覆蓋安裝的,這也是最關鍵的一點。
? 可以實現App模塊化,Android系統允許具有相同簽名的App運行在同一個進程中,就像是一個App一樣,但是可以單獨對其中的某個App升級更新。
? 可以在App之間共享代碼和數據,Android中提供了一個基于簽名的Permission標簽。設置該標簽可以實現對不同App之間的訪問和共享,Google并不建議使用這個標簽。
? 可以使用ADK自帶的zipalign工具對apk文件進行字節對齊優化,可以提升App的性能,但會略微增加包體的大小。
如何為我們的應用簽名呢?首先需要生成一個證書,使用Java自帶的keytool工具即可生成證書(位于Java的bin目錄下),將keytool工具所在的目錄配置到環境變量中,或直接進入該目錄,執行keytool -genkey -alias test -keystore test.keystore -keyalg RSA -validity 100000命令可以生成證書:
? -genkey參數表示生成證書。
? -alias參數表示證書的別名(使用證書時需要用到)。
? -keystore參數表示證書存儲的路徑。
? -keyalg參數表示使用的算法,一般是RSA。
? -validity參數表示證書的有效期。
按Enter鍵執行上述命令之后,控制臺會讓輸入一些信息,如密碼、姓名、單位、國家、地區等信息,全部輸入完成之后會生成證書,如圖2-11所示。

圖2-11 使用keytool生成證書
使用Java自帶的jarsigner工具結合我們的證書可以對應用進行簽名,但在Eclipse中自動生成的調試apk是不能進行簽名的,需要在Eclipse的工程上右擊,然后選擇Android Tools-Export Unsigned Application Package導出未簽名的apk。輸入jarsigner -verbose-keystore test.keystore -signedjar testsigned.apk test.apk test指令可以對apk進行簽名,如圖2-12所示。

圖2-12 使用jarsigner對應用簽名
? -keystore參數表示證書的位置。
? -signedjar參數表示簽名,需要傳入簽名后、簽名前以及證書的別名作為參數。
實際上Eclipse、AndroidStudio、IntelliJ IDEA等開發工具都支持直接導出簽名后的apk。
Eclipse通過對項目右擊Export,在彈出的快捷菜單中選擇Android→Export Android Application命令,單擊“下一步”按鈕,出現如圖2-13所示窗口中,可以選擇已有的keystore或創建一個新的keystore,最后導出一個已簽名的apk。

圖2-13 AndroidStudio的keystore選擇界面
AndroidStudio和IntelliJ IDEA都是通過選擇上方的Build→Generate Signed APK命令,在彈出的窗口中選擇keystore并導出已簽名的apk。