最近在使用極光推送,想要自定義鈴聲,極光要求鈴聲的文件放在/res/raw目錄下,這本是很簡單的放置操作,卻是令我苦惱,因為我是用uniapp項目來開發android的,文件目錄跟原生android根本不一樣,打包后也只是一個apk,后來網上了解到打包后的apk實際上也是一個壓縮包,可以解壓的。解壓后的文件目錄,活脫脫就是原生android。於是,就開始了添加/res/raw目錄資源的操作,同時也是一大推的坑。
一、uniapp打包apk
如果你還在uniapp社區官網繼續尋找“如何添加res/raw文件”的解決問題,我勸你停止,目前為止,uniapp暫不支持此類功能。所以,還是要我們從原生的問題去解決。首先你得先拿到apk,在這里我選擇的是自定義調試基座(你可以選擇正式包),拿到這個apk后,后面的操作基本上跟Hbuilder打包工具無關了,我理解為這個apk已經跟Hbuilder沒有聯系了
二、找到這個apk,並解壓
APK文件其實是zip格式,但后綴名被修改為apk,通過UnZip解壓后,可以看到Dex文件,Dex是DalvikVM executes的簡稱,即Android Dalvik執行程序,並非Java ME的字節碼而是Dalvik字節碼。Android在運行一個程序時首先需要UnZip,然后類似Symbian那樣直接,和Windows Mobile中的PE文件有區別。
三、 解壓的文件里有res文件夾,編輯文件夾
從上面的文件目錄可以看出,就是原生的android開發目錄,找到了res目錄,添加raw目錄和添加資源就變成了很簡單。文件添加完畢后,再將這些解壓出來的這些文件壓縮回去
然后將后綴名zip改為apk
四、解壓后的apk,簽名文件已經失效,需要重新簽名
因為你解壓了這apk,就已經是改動了這個apk,導致簽名文件失效了,所以手機上無法安裝。我們就要對改動后的apk進行重新簽名。我用的是jar工具來進行簽名的(安裝了Java環境)。將壓縮得apk解壓回去,我們還需要一個無簽名的apk,找到目錄META-INF,留下MANIFEST.MF這一文件,其余的刪除。然后再將這些文件夾壓縮回zip,改后綴名apk。一個無簽名的apk就有了
五、jar簽名打包
沒安裝java的道友,可去官網安裝,將一個無簽名的apk進行簽名,還需要一個自有證書,沒有自有證書的朋友也可以參考https://www.cnblogs.com/murenziwei/p/12937512.html,也是需要java環境,為了不出問題的使用jar,我直接找到了java的安裝目錄,在bin目錄下找到了jarsigner.exe,並且在此目錄下打開終端,開始進行命令簽名
終端命令很長,但我會一一注釋,最終命令:
./jarsigner.exe -digestalg SHA1 -sigalg MD5withRSA
-tsa http://sha256timestamp.ws.symantec.com/sha256/timestamp
-keystore ./lcqs.keystore -storepass 123456
-signedjar D:\liwei\lcyg\uni\lcqs\unpackage\debug\android_debug\lcqsalias.apk D:\liwei\lcyg\uni\lcqs\unpackage\debug\android_debug\android_debug.apk lcqsalias
參數說明
./jarsigner.exe -digestalg SHA1 -sigalg MD5withRSA
-tsa http://sha256timestamp.ws.symantec.com/sha256/timestamp
-keystore 自有證書文件路徑 -storepass 證書私鑰密碼
-signedjar 簽名后的apk保存路徑 無簽名的apk文件路徑 別名
其它參數
【-digestalg】 摘要算法的名稱 【-sigalg】簽名算法的名稱 【-tsa】時間戳機構的位置 【-alias】別名(證書有一個別名,最好取這個)
簽名成功的效果
不出問題的話,在簽名apk保存路徑下會生成一個apk,這個apk就可以成功安裝了