繁体   English   中英

在 gradle Android Studio 中排除一个 class 文件

[英]Exclude one class file in gradle Android Studio

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

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

两者都包含相同BundleJSONConverter class。因此,我无法生成签名的 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。 编译。

希望它有效......

在导入 jar 后,我遇到了类似的重复类问题。在我的例子中,冲突发生在 jar 中的 class 和我自己项目中的 class 之间。 下面我分享了您可以用来丢弃您自己的源代码树中可用的类的解决方案,假设 jar 中的那个是正确的:

android {
   sourceSets {
     main {
       java {
            filter.excludes = [
                    "com/package/Duplicated.java",                      
            ]
       }
     }
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM