最近在使用极光推送,想要自定义铃声,极光要求铃声的文件放在/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:liweilcygunilcqsunpackagedebugandroid_debuglcqsalias.apk D:liweilcygunilcqsunpackagedebugandroid_debugandroid_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就可以成功安装了