一、前提:
由于工作需要需接入微信分享但是通过微信官方文档嵌入完成后发现微信官方SDK依赖库('com.tencent.mm.opensdk:wechat-sdk-android:+')统一包含了分享、登录、支付等功能及代码,而且也没有提供不包含支付的依赖库。由于第三方渠道不允许包涵其它支付插件和相关代码明显微信官方的依赖库不符合规则所以需要解决方案处理这个问题,考虑了下解决方案有以下几种:
1、旧版ShareSDK内部是通过调用微信接口协议实现的微信分享功能不包含微信官方API所以可以把ShareSDK的接口包一层来实现想要的功能。
2、反编译微信官方SDK资源删除支付相关代码。
以上两种方法因为最初游戏就是用的ShareSDK实现的分享相关功能无疑这种方法是比较简单且靠谱的但是感觉这样做意义不大(何不干脆继续沿用老版本ShareSDK)所以选用了第二种方法,以下是我操作流程;
二、详细操作流程
2.1、获取微信官方SDK jar包进行反编译
操作思路:首先反编译微信官方SDKjar包资源为.java文件全局搜索pay关键字,然后再次反编译成.smali文件参照对应.java搜索涵盖pay类及方法进行代码删除。
(1)、在androidStudio中找到对应添加微信官方SDK依赖库下载下来的jar包资源 (对应微信SDK删除支付模块资源中的wechat-sdk-android-without-mta-6.8.0.jar文件)
(2)、通过jd-gui工具打开微信官方SDKjar包资源以压缩包形式导出.java文件
(3)、通过Android逆向助手反编译微信官方SDKjar为.dex文件后再次反编译.dex文件为.smali;在进行反编译微信官方SDKjar为.dex这个步骤的时候一直报错试了很多方法编译不过去不知道是APKTool的问题还是微信官方SDKjar做了相关限制,无奈只能探索其它方式。
2.2、androidStudio项目获取添加微信官方依赖库后编译生成的.dex文件进行反编译
由于直接反编译微信官方SDKjar为.dex行不通所以想到能不能直接找到androidStudio工程下编译生成的.dex文件最终在(app/build/intermediates/dex/debug/out/)文件下找到了(对应微信SDK删除支付模块资源中的project_wechat-6.8.0classes.dex)还是之前逆向思路(反编译为.java文件全局搜索pay关键字,然后再次反编译成.smali文件参照对应.java搜索涵盖pay类及方法进行代码删除)
(1)、右击project_wechat-6.8.0classes.dex通过APKDB工具选择查看源码打开—>选择全部保存导出.java文件并且删除非微信方SDK外其它多余资源(对应微信SDK删除支付模块资源中project_wechat-6.8.0classes_java文件)
(2)、选中project_wechat-6.8.0classes.dex通过APKDB工具选择使用APKDB编译,反编译为.smali文件并且删除非微信方SDK外其它多余资源(对应微信SDK删除支付模块资源中project_wechat-6.8.0classes_smali文件)
(3)、打开导出的.java文件全局搜索pay关键字,参照.java文件删除更改对应搜索到的.smali下相关类和对应代码,在操作过程中发现这种方式太繁琐而且看不懂smail语言经常会有改完后回编译jar包报错的问题所以想到能不能直接改.java文件然后导出jar包,所以先暂停了该步骤的操作延伸了以下处理方式;
2.3、更改反编译生成的project_wechat-6.8.0classes_java中代码并导出jar包
(1)、Eclipse下新建测试工程并且复制project_wechat-6.8.0classes_java下资源代码到工程src目录下如下图:
(2)、全局搜索pay字段然后删除对应类和代码—>修改报错代码,如下图:
(3)、由于一些类之前经过混淆报错不能有效修改后来发现这几个类耦合性不强并且都在同一个包名下所以这几个同包下的类特殊处理不参与jar包导出,我们先把其它改好的导出jar包(对应微信SDK删除支付模块资源中Wechat_DeletePay0.jar文件)如下图;
(4)、打开project_wechat-6.8.0classes_smali文件删除本文档2.3.3中除未参与jar包编译资源外的其它所有资源,然后右击删除完成后的project_wechat-6.8.0classes_smali文件夹通过APKDB工具选择使用APKDB编译 回编译为.dex文件,(图1)(对应微信SDK删除支付模块资源中project_wechat-6.8.0classes_classes1.dex文件),然后通过Android逆向助手工具转为jar文件(图2)(对应微信SDK删除支付模块资源中Wechat_DeletePay1.jar文件)
(5)、最后合并Wechat_DeletePay0.jar和Wechat_DeletePay1.jar为一个jar包,具体jar包合并方法这里就不写了详情可自行百度(不合并也可以),至此删除微信SDK支付相关代码所有操作流程完成,最终生成的jar包在Demo下自测未发现问题。
三、资源下载地址
微信SDK删除支付模块资源.zip-Android文档类资源-CSDN下载https://download.csdn.net/download/zhao331863874/72331264
微信SDK删除支付模块所需工具.zip-Android文档类资源-CSDN下载https://download.csdn.net/download/zhao331863874/72337990四、微信SDK删除支付模块资源介绍
1、微信SDK删除支付模块流程.docx
当前操作流程文档
2、wechat-sdk-android-without-mta-6.8.0.jar
微信官方SDK jar包
3、project_wechat-6.8.0classes.dex
androidStudio项目下获取的添加微信官方依赖库后编译生成的.dex
4、project_wechat-6.8.0classes_classes.dex
添加微信官方依赖库后编译生成的.dex精简后的资源
5、project_wechat-6.8.0classes_java
反编译生成的java文件
6、project_wechat-6.8.0classes_smali
反编译生成的smali文件
7、Wechat_DeletePay0.jar
java文件去掉支付代码后导出的.jar
8、project_wechat-6.8.0classes_classes1.dex
java文件未参与jar包编译smali文件生成的.dex文件
9、Wechat_DeletePay1.jar
java文件未参与jar包编译smali文件生成的.jar文件
10、Wechat_DeletePay.jar
删除微信SDK支付模块最终jar包