Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重新声明类配置Android构建变体时出错_Android_Gradle_Build.gradle_Android Productflavors - Fatal编程技术网

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

重新声明类配置Android构建变体时出错,android,gradle,build.gradle,android-productflavors,Android,Gradle,Build.gradle,Android Productflavors,在我的Android项目中,我用3个变量(例如:mock、dev、prod)配置了一个维度。 我还有默认的构建类型(debug、release),其中我有应用程序的实现: src/debug/java/package/MyApplication.kt src/release/java/package/MyApplication.kt 所以我可以生成6个构建(mockDebug、mockRelease、devDebug、devRelease等) 现在,我的mockDebug变体需要MyAppl

在我的Android项目中,我用3个变量(例如:mock、dev、prod)配置了一个维度。 我还有默认的构建类型(debug、release),其中我有应用程序的实现:

  • 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.kt实现迁移到

  • 模拟调试
  • 模拟释放
  • 德夫德布格
  • 德夫雷莱斯
  • 产品调试
  • 产品发布
目录,但我不明白为什么文档说这是可能的,即使我收到了那个错误


感谢您的帮助

您可以尝试以这种方式实现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

希望这将有助于解决您的问题

“重新声明:我的应用程序” 您认为上述错误主要存在于您的口味或变体中


方法应该是你想更改的类或文件不应该是主文件,复制该文件并将它们添加到Flavor或variant中,然后进行你想看到的更改。

在我的例子中,删除
/build
文件夹解决了问题。

按照指定,你必须从主包中删除该类。

嗨,“MyApplication.kt”包含基于构建类型(debug/release)而非变体(mock/dev/prod)的不同逻辑,因此我不想将此类重构/复制到调试变体的mockDebug、devDebug和prodDebug,以及发布变体的mockRelease、devRelease和prodlease。我只想维护调试/发布实现,但我只想为mockDebug组合覆盖它。Android文档说这是可能的,但它不正常。。。那么您是否尝试过在Gradle中使用源集?另外,如果您使用的是源代码集,那么/src/main/->不应该有Application.kt;文件夹应该是这样的:-1)/src/main/2)/src/debug/Application.kt 3)/src/release/Application.kt这样你就可以在没有重复错误的情况下构建Gradle。我在main dir中没有任何MyApplication.kt,只有在debug和release中,它们是互斥的。但是,当我在mockDebug目录中创建第三个文件时,我在debug和mockDebug MyApplication类中都收到了“重新声明”错误,就好像它们之间存在冲突一样,我遇到了类似的问题。我需要为BuildType(调试和发布)使用不同的类,而不是productFlavor。但我在IDE上遇到了“重新声明”类错误。现在,我只是忽略它,因为
assemble
bundle
命令仍然有效。