在Gradle Android Studio中排除一个类文件

在我的项目中,我需要导入第三方jar文件和Facebook SDK。

compile files('libs/SkinSDK.jar') compile 'com.facebook.android:facebook-android-sdk:4.14.0' 

两者都包含相同的BundleJSONConverter类。 所以,我无法生成签名APK。 它总是显示重复的条目com / facebook / internal / BundleJSONConverter。

所以,我想在Facebook或SkinSDK.jar中排除。 我试过了

 compile ('com.facebook.android:facebook-android-sdk:4.14.0') { exclude group: 'com.facebook.internal', module: 'BundleJSONConverter' } 

它不起作用并显示相同的错误。

依赖项的配置闭包的exclude方法排除了传递依赖项。 因此,如果您的模块依赖项依赖于其他模块,则可以从构建中排除它们。 您可以在其Maven存储库信息页面上查看'com.facebook.android:facebook-android-sdk:4.14.0'模块的传递依赖性。

如果BundleJSONConverter类存在于传递依赖项中,则可以使用与现在尝试相同的方式排除特定模块。 只需指定groupmoduleversion ,就像对依赖项一样。

如果您只想为依赖项jar排除一个类,请查看jar jar链接工具及其Gradle插件。 它允许您更改包含的jar,例如更改包或删除类。

以下(缩短)示例显示了插件的用法以及一些更改依赖关系jar的方法:

 compile jarjar.repackage { from 'org.apache.hive:hive-exec:0.13.0.2.1.5.0-695' archiveBypass "commons*.jar" archiveExclude "slf4j*.jar" classDelete "org.apache.thrift.**" classRename 'org.json.**', 'org.anarres.hive.json.@1' } 

陷入类似的情况。 这就是我所做的,不像我希望的那样优雅,但它有效:

  1. 重命名jar文件(在你的情况下为SkinSDK.jar):。zip而不是.jar

  2. 转到zip文件的“内部”(我正在使用DoubleCommander,还有许多其他实用程序),或将其解压缩到临时文件夹。

  3. 删除导致问题的重复类。 转到zip文件的“外部”。

  4. 将文件从.zip重命名(或重新打包)到.jar。 编译。

希望它有效……