问题
当我们在进行第三方SDK的接入和调试的时候,往往第三方SDK要求我们必须使用在他们的平台上设置好签名,并且在打包输出的时候使用这个签名,才能够使用第三方SDK的相关功能,比如说微信的认证和分享功能。
但是,在实际的生产环境中,签名文件本身是一个比较重要的机密文件,只存在于打包机上,不会分发到开发小哥哥们的机器上。对于有的平台来说,会提供一个专门的debug keystore来让大家进行测试,但是由于不可考证的原因,这个keystore也遗失了(wtf)…
所以在过去我们曾经经历过,为了调试第三方相关内容,每写一段代码,就放到远程build一回,再用release包查看效果,不仅效率低下,而且还不能够断点调试。
解决方案
其实这个问题很简单,我们只要使用现有的keystore,生成一个debug专用的keystore,然后在打包机上新建一个任务,每次只要上传debugApk,然后使用debug专门用的keystore进行重签名,这样就可以快速的测试第三方SDK相关的内容了。
第一步:制作keystore
1)将release的keystore拷贝一份,我们命名为my.keystore
2)修改keystore密码
keytool -storepasswd -keystore my.keystore
复制代码
这时会提示输入旧密码,和新密码,新密码改为android
3)修改keystore的alias
keytool -changealias -keystore my.keystore -alias my_name -destalias androiddebugkey
复制代码
my_name是旧的alias的名字,注意替换
这一步是将alias改成androiddebugkey
这里会提示输入keystore的密码和alias的密码,注意,keystore的密码已经在上一步改成了android,而alias的密码还是旧的
4)修改alias的密码
keytool -keypasswd -keystore my.keystore -alias androiddebugkey
复制代码
这里会提示输入keystore密码,alias密码,新的alias密码,注意,keystore密码已经是android,而alias的密码还是旧的
我们这里要将alias的密码也改成android
这样就完成了keystore的制作
第二步:重新签名
因为我们的编译环境是部署在jenkins上的,所以这里针对的是jenkins的job,对于其他的CI环境来说应该也是类似的。
新建了一个job,添加一个File Parameter,用来进行debugApk的上传,参数名叫做source.apk。这个文件上传后,会存放在${Wordspace}/source.apk的位置
job编译执行以下脚本
unzip source.apk -d workdir
cd workdir
rm -rf META-INF
zip -r ../target.apk *
cd ..
jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore /your/path/to/my.keystore -storepass android -keypass android target.apk androiddebugkey
复制代码
注意替换脚本中的keystore路径
这样就会产生一个target.apk文件,就是签过名的apk,就可以愉快的调试了