友盟分享bug整理

来源:互联网 发布:linux mint 18.2 编辑:程序博客网 时间:2024/04/30 10:29

最近做项目用到了第三方登录和分享,于是就集成了友盟,具体功能是QQ、微信、新浪微博的登录和分享,测试阶段并没有出现很多的问题,和是混淆打包以后,问题就出来了,搞了两个小时,终于搞定了这些bug。
1:java.lang.RuntimeException Stub!
2:java.lang.ClassCastException com...MainApplication cannot be cast to android.app.Activity

起初有点奇怪为什么会出现ClassCastException,似乎并没有哪个地方用到了MainApplication,后来去研究友盟sdk,发现 UMShareAPI是单例模式,初始化方法是public static UMShareAPI get(Context context);这个方法参数类型是Context, 所以传入的参数可以是Activity, 也可以是Applicaion的Context。
但在SDK内部使用的时候,有的地方做了Context到Activity的强转,如果UMShareAPI初始化方法里传的参数是Applicaion的Context, 就会出问题。这尼玛,传入的一定要是activity你为什么参数是context,就算传入的是activity,这尼玛是严重的内存泄漏啊。。。先不管了,搞定bug再说,初始化的时候传入activity,果真就没问题了;

另一个bug就显得毫无头绪了,只有从混淆入手了,一路追踪,居然发现在引入的环信module中有一个org.apache.http.legacy.jar包,找的好辛苦啊,一想是不是这个包混淆的原因,于是在proguard-rules.pro中加入配置:

-dontwarn android.net.compatibility.**-dontwarn android.net.http.**-dontwarn com.android.internal.http.multipart.**-dontwarn org.apache.commons.**-dontwarn org.apache.http.**-keep class android.net.compatibility.**{*;}-keep class android.net.http.**{*;}-keep class com.android.internal.http.multipart.**{*;}-keep class org.apache.commons.**{*;}-keep class org.apache.http.**{*;}

然后重新打包,果然就没有问题了。

0 0