簡體   English   中英

在Android項目中使用Gradle覆蓋具有相同包的類

[英]Override classes with same package with Gradle in an Android project

我有不同的源樹。 在第二個源樹中,幾個類重寫了第一個源樹中的tose。 看起來像:

  • 項目|
    • 源樹-1 / SRC / COM /公司名稱/ MyClass.java
      • ...
    • 源樹-2 / SRC / COM /公司名稱/ MyClass.java
      • ...

使用Gradle編譯時出現錯誤錯誤:(20,8)錯誤:重復類:com.companyname.MyClass

有沒有辦法指定從源樹2中取出Class並忽略另一個? 使用exclude不會工作,因為這將刪除package和classname指定的所有類。

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或任何其他類中的類。 所以我需要覆蓋這個類。

我已經定義了兩個不同的源集。

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/'
            }
        }
    }
}

所以問題是如何在編譯項目時組合這些源集。 如果你谷歌你會發現類似的東西:

main {
        java {
           compileClasspath += seccomdev.output
           runtimeClasspath += seccomdev.output
        }
    }

在這種情況下,我得到錯誤: 錯誤:(122,0)無法獲取未知屬性'compileClasspath'為...

另一個找到的解決方案是添加依賴項:

dependencies {
    compile android.sourceSets.seccomdev
}

但是我收到錯誤: 錯誤:(134,0)無法將提供的表示法轉換為依賴類型的對象:源集seccomdev。

使用這樣的東西:

dependencies {
    compile files(android.sourceSets.seccomdev.java)
}

我得到: 錯誤:無法將提供的表示法轉換為文件或URI:[src / seccomdev / java,../../ SecCommerce-Dev /]。

並使用

dependencies {
    seccomdevCompile ':...'
}

至少會編譯gradle文件並開始整個編譯過程。 不幸的是,根本沒有編譯來自第一個源樹/ sourceSet的java文件。 所以我得到了數百個錯誤,因為無法找到第二個源集的java類中的導入。


所以問題仍然是如何在一次編譯中將兩個不同的源樹組合起來,因為代碼依賴性?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM