SDK 嵌入问题记录

来源:互联网 发布:mac可以玩lol 编辑:程序博客网 时间:2024/04/29 21:26

在日常开发中,我们常常会遇到如统计 App 的日活、总用户量、错误信息等数据的场景,一般情况下,我们可以嵌入友盟统计、TalkingData 等开发商提供的 SDK 进行统计,而无须自己重复造轮子。

一般情况下,SDK 开发商都会提供相应的文档及 Demo 对如何使用该 SDK 进行详情的指导,同时还提供各种各样的嵌入方式,如常见的 Eclipse libs 嵌入方式,aar 库的嵌入方式,以及 Android Studio 的 module 嵌入方式,说到底嵌入SDK是一件很简单的事情。

但是,在实际开发工作中,有时我们可能不止嵌入一个 SDK,同时可能会有各种各样的限制,然后就可能出现各种奇奇怪怪的问题。

近日,在对开发中的应用进行嵌入两个不同的 SDK 时,遇到了这样一个场景,嵌入的两个 SDK 中含有相同的 jar 包。想想也简单,在 Eclipse 中,也许我们直接简单粗暴把所有的 jar 包放在 libs 文件夹下就完事了,相同的去掉即可。而在 Android Studio 中,我们可以去掉后引入那个 SDK 的 module 中冲突的 jar 包,或者我们可以使用一个公共的 module 给这两个不同的 SDK 的 module 引用,这不就完事了么?

问题就出现在这里,为了便于代码的管理及第三方库的重复方便使用,需要把 module 打包成 aar 库放在远程仓库,然后其他需要用到的工程直接引用即可。其实也很简单啊,使用 module 的时候,Clean 并且 Rebuild 一下工程就会自动帮我们生成 aar 库了。然后就很开心的导入到工程,进入第三方 modue 主页,正常,完事,其他的测试工作就交给第三方合作商了。呃,在后面的测试反馈中,就出现了问题了。经过跟踪 Log,发现了如下错误。

图片1

ClassNotFoundException ? 找不着类…… 既然是找不着类,那我们可以看看 build 文件夹里面是否真的找不着该类,在 build -> intermediates -> exploded-aar ->相应的 aar 库查找,发现信息如下图

图片2

abcdefg …… 原来啊,要使用的类被混淆了,难怪找不着,查看了下第一个 module 的配置文件,果然发现了 release 包混淆的配置语句

release {    minifyEnabled true    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'}

既然共用的 jar 包不能混淆代码,那我们只需要在混淆配置文件里面添加不混淆的配置即可。

-keep class com.bairuitech.** { *; }

再次查看 build 文件夹中 jar 包

图片3

终于没有各种 abcdefg 了,再次运行使用应用,也不再有 ClassNotFoundException 错误了。

其实整篇都是废话,总结如下:
在嵌入多个第三方 SDK 时,如果出现 jar 包冲突,可以使用公共的 module 存放共用 jar 包,如需使用 aar 库嵌入方式,切记共用的 jar 包不可以混淆,否则会出现找不着类的情况。

1 0
原创粉丝点击