应用场景:最近做支付,微信支付,和支付包支付,支付宝官方文档提供了混淆代码,微信开放平台却没有提供混淆代码,怕代码混淆后微信支付不能用,上网搜了下,一堆代码混淆后微信支付不能用,麻溜的搜了下微信的混淆代码,微信平台官网没有提供但是万能的百度总是给你答案!
答案如下
Android 微信支付 代码混淆后打包,导致不能支付的原因
代码混淆
-libraryjars libs/libammsdk.jar
-keepclasscom.tencent.** { *;}
如果您的项目中也引用了dom4j.jar,那么就添加上下面的代码:
-libraryjars libs/dom4j-1.6.1.jar
-keepclassorg.dom4j.** {*;}
按照上述在混淆文件proguard-rules.pro中加入了上述两行代码,但是问题来了!
问题来了
加号混淆后打正式包时出现问题
Error:Execution failed for task ‘:app:proguardRelease’.
java.io.IOException: The same input jar [xx:\xx\app\libs\XX.jar] is specified twice.
也就是说混淆规则文件中,我们指定了2次,有点蒙圈,全局搜了下没写过,纳闷的给删了,再次打包,好了!得弄清楚,不能记吃不记打,麻溜又进入了百度的大数据库中。
原因
jar包大部分发布时就已经做了混淆处理,sdk 通过 proguard 混淆代码时默认已经将 lib目录中的 jar 都已经添加到打包脚本中,所以不需要再次手动添加,如果再次混淆必然会报错。
思考
我们自己做的jar包可以在发布是做混淆处理吗?
答案是可以滴,点击即可
总结
自己杞人忧天,白忙活了半天,但是也同时也了解到了打包可能会出现的The same input jar is specified twice问题,去混淆文件删除提示的jar包,重新编译打包就可以了,虽然是个小问题,但是也值得总结,希望自己以后不会犯同样的错误。