首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Android项目中的Gradle覆盖具有相同包的类

使用Android项目中的Gradle覆盖具有相同包的类
EN

Stack Overflow用户
提问于 2016-09-01 14:07:07
回答 1查看 1.2K关注 0票数 3

我要去不同的来源树。在第二个源树中,两个类覆盖第一个源树中的tose。看上去:

  • 项目
    • source-tree-1/src/com/companyname/MyClass.java
      • ..。

代码语言:javascript
复制
- source-tree-2/src/com/companyname/MyClass.java  
    - ...

在使用Gradle编译时,我得到了错误:(20,8)错误:重复类: com.companyname.MyClass

是否有任何方法指定从源树2中获取类而忽略另一个类?使用exclude无法工作,因为这将删除包和类名指定的所有类。

代码语言:javascript
复制
sourceSets {
    main.java.srcDirs += '../../sourcetree-1/'
    main.java.srcDirs += '../../sourcetree-2/'
    main {
        java {
            exclude 'com/companyname/MyClass.java'            
        }
   }
}

我需要使用gradle覆盖它们,因为首先,源树1中的类使用java.awt包中的类,而我不能在Android项目中使用这些类。源树2中的第二个类将覆盖第一个类,而不使用来自禁用包的任何类。

不幸的是,我不能使用这个类修改源树1中的类或任何其他类。所以我需要重写这个类。

EN

回答 1

Stack Overflow用户

发布于 2016-09-02 13:54:35

我已经定义了两个不同的源集。

代码语言:javascript
复制
android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets {
        seccomdev {
            java {
                srcDirs '../../SecCommerce-Dev/'
        exclude '....'
        exclude '....'
        exclude '....'
            }
        }

        main {
            java {
                srcDirs '../../SecCommerce-Android/src/'
                srcDirs '../../SecCommerce-Android/gen/'
            }
        }
    }
}

因此,问题是如何在编译项目时组合这些源集。如果你在谷歌上搜索,你会发现这样的东西:

代码语言:javascript
复制
main {
        java {
           compileClasspath += seccomdev.output
           runtimeClasspath += seccomdev.output
        }
    }

在本例中,我得到了错误:错误:(122,0)无法获得.的未知属性'compileClasspath‘

另一个找到的解决方案是添加依赖项:

代码语言:javascript
复制
dependencies {
    compile android.sourceSets.seccomdev
}

但我得到的错误:错误:(134,0)不能将所提供的符号转换为类型依赖的对象:源集seccomdev.

使用这样的方法:

代码语言:javascript
复制
dependencies {
    compile files(android.sourceSets.seccomdev.java)
}

I get:错误:无法将所提供的符号转换为文件或URI: src/seccomdev/java,.././SecCommerce-Dev/.

和使用

代码语言:javascript
复制
dependencies {
    seccomdevCompile ':...'
}

将至少编译gradle文件,并开始整个编译过程。不幸的是,第一个源树/sourceSet中的java文件根本没有编译。因此,我得到了数百个错误,因为无法找到第二个源集的java类中的导入。

因此,问题仍然是,由于代码依赖关系,如何将两个不同的源代码树组合在一个编译中?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39273749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档