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