我有个问题。我有一个如下所示的项目结构:
P
| -SubP1
| -SubP2
两个软件包中都有两个存根类 android.media.IRemoteDisplay 。它们的实现方式有所不同,但这不是问题-当我将在Android上运行该应用程序时,它们将被系统类取代。
但是,存在一个问题-我无法构建项目,因为dexMerger失败-它表示存在两个冲突的类。我可以理解该错误-毕竟确实有两个相互冲突的类:)
但是当我尝试像这样在build.gradle中排除这些文件时:
sourceSets {
main {
java {
srcDir 'src'
exclude '**/android/media/**'
}
}
}
编译失败,因为找不到 android.media.IRemoteControlDisplay 类(及其嵌套类)。
我如何仍可以使用这些类,但将它们从生成的DEX文件中排除?
请不要问题,是否应该从编译的项目中排除该类-这是正确的事,我已经做到了,但是是手动进行的-通过将SubP1和SubP2预编译到jar中,然后从中手动删除IRemoteController.class这些jar文件,然后将这些jar文件包含在P中。
我也会对该解决方案感到满意:
1.建立SubP1
2.从SubP1.jar删除IRemoteControlDisplay.class
3.构建SubP2
4.从SubP2.jar删除IRemoteControlDisplay.class
5.将SubP1.jar和SubP2.jar作为依赖项添加到P
6.建立P
如果可以的话,请告诉我。
最佳答案
最后,我已经做到了。
我需要的是运行时依赖关系,而不是编译时依赖关系。因此,我为SubP1创建了一个名为SubSubP1的子模块(例如),将android.media.IRemoteDisplay移到SubSubP1中,并为SubP2创建了子模块SubSubP2,并对存根类进行了同样的操作。然后,我声明了SubP1和SubP2的依赖关系,如下所示:
dependencies {
provided project(':SubP1:SubSubP1')
}
和
dependencies {
provided project(':SubP2:SubSubP2')
}
那就成功了! Gradle假设没有在编译类时将在运行时加载它们。
关于android - 从生成的dex文件中排除类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28014615/