gradle 配置Android构建变体时重新声明类出错

w8biq8rn  于 2023-04-21  发布在  Android
关注(0)|答案(6)|浏览(159)

在我的Android项目中,我配置了一个具有3个变量的维度(例如:mock,dev,prod)。我也有默认的构建类型(debug,release),其中我有它们的Application实现:

  • src/debug/java/package/MyApplication.kt
  • src/release/java/package/MyApplication.kt

所以我可以生成6个构建(mockDebug、mockRelease、devDebug、devRelease等)
现在我的mockDebug变体需要MyApplication. kt的特定实现。
正如我在这里读到的,我可以在这个路径中创建一个类MyApplication:src/mockDebug/java/package/MyApplication.kt
然而,我在Android Studio中收到一个错误,说“重新声明:MyApplication”。
我确信我可以解决这个问题,将所有调试/发布MyApplication.kt实现移动到

  • 模拟调试
  • mockRelease
  • DevDebug
  • devRelease
  • prodDebug
  • prodRelease

目录,但我不明白为什么文档说这是可能的,即使我收到的错误
谢谢你帮我

sgtfey8w

sgtfey8w1#

在我的情况下,删除/build文件夹解决了这个问题。

bzzcjhmw

bzzcjhmw2#

“再次声明:MyApplication”你看到上面的错误,因为它存在于主要和你的味道或变体
方法应该是类或文件你想改变不应该在主使该文件的副本,并将它们添加到风味或变体,并做你想看到的变化。

yiytaume

yiytaume3#

您可以尝试以这种方式实现Gradle。在Build.gradle中:

buildTypes {
    release {
        debuggable false
        minifyEnabled true
        zipAlignEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
        debuggable true
        zipAlignEnabled false
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }

  productFlavors {
    mock {
        minSdkVersion 17
        applicationId 'com.test.mock'
        targetSdkVersion 23
        testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
        versionCode 1
        versionName '1.0'
    }
    dev {
        minSdkVersion 17
        applicationId 'com.test.dev'
        targetSdkVersion 23
        testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
        versionCode 1
        versionName '1.0'
    }
    prod {
        minSdkVersion 17
        applicationId 'com.test.prod'
        targetSdkVersion 23
        testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
        versionCode 1
        versionName '1.0'
    }
}

所以,现在你可以有这样的文件夹结构:

/src/mock/Application.kt
  /src/dev/Application.kt
  /src/prod/Application.kt

因此,一旦您构建了项目,请从BuildVariant选项卡中选择变体,以便它将采用相应的Application.kt。
希望这将有助于解决您的问题。

vawmfj5a

vawmfj5a4#

正如文档中所指定的,您必须从主包中删除该类。

dly7yett

dly7yett5#

您应该只看到debugreleasejava 文件夹为“sources root”取消标记未活动的文件夹。在android studio中,右键单击Java文件夹-〉将目录标记为-〉取消标记为源根

ahy6op9u

ahy6op9u6#

正如这里所解释的,你不能这样做。你需要使用main以外的另一个源文件夹。
注意事项:对于给定的构建变体,如果Gradle遇到两个或多个源集目录定义了相同的Kotlin或Java类,则会抛出构建错误。例如,在构建调试应用时,不能同时定义src/debug/Utility.kt和src/main/Utility.kt,因为Gradle在构建过程中会同时查看这两个目录,并抛出“重复类”错误。如果您需要不同版本的Utility。kt对于不同的构建类型,每个构建类型必须定义自己的文件版本,并且不将其包含在main/ source集中。

相关问题