【问题标题】:How do I setup gradle for different product flavors and different icons depending on releas/debug?如何根据发布/调试为不同的产品风格和不同的图标设置 gradle?
【发布时间】:2016-12-19 09:51:51
【问题描述】:

我想根据产品风格拥有不同的图像,如果它是调试或发布,那么 res 文件夹的正确设置是什么?

在我的 build.gradle 中:

productFlavors {
    flavor1 {
        applicationId   "com.myapp.flavor1"
    }
    flavor2 {
        applicationId   "com.myapp.flavor2"
    }
}

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

在我的文件夹结构中,我现在有:

src/flavor1/res
   /flavor2/res
   /main/res
   /debug/res

我尝试在我的调试文件夹中将flavor1 和flavor2 作为包含资源的子文件夹,但这并不适用。只有在调试中有一个 res 文件夹会导致两种风格的资产相同,而我希望它们不同。那么如何设置项目,以便根据调试/发布和不同的产品风格获得不同的图像?

编辑:

更新的文件夹结构

【问题讨论】:

  • 您可以在每个包含特定资源的文件夹中拥有一个 res 文件夹
  • 是的,我有。但我无法根据调试/发布获得不同的资源。所以我想要4组不同的图片资源;风味 1/调试、风味 1/发布、风味 2/调试、风味 2/发布。

标签: android gradle android-gradle-plugin


【解决方案1】:

来自安卓build variants docs

Gradle 会根据您的构建类型和产品风格自动创建构建变体,并根据 product-flavor Build-Type 命名它们

因此,在您的情况下,您已经有 4 个变体。如果您想要为它们提供不同的源集,您可以按如下方式使用它们 src/flavor1Debug src/flavor2Release 等等..注意命名约定

【讨论】:

    【解决方案2】:

    这实际上比你想象的要容易。

    您目前拥有:

    src/flavor1/res
       /flavor2/res
       /main/res
       /debug/res
    

    只需添加:

    src/flavor1Debug/res
       /flavor1Release/res
       /flavor2Debug/res
       /flavor2Release/res
    

    那里的资源将覆盖不太具体的文件夹中的资源。

    Android Studio 中的“构建变体”用户界面有助于确认最终的可能性。

    我自己将这种模式用于 Google Maps API 密钥,在我的情况下,每个客户(口味)需要不同,并且由于应用签名的不同,在发布和调试之间已经不同。

    【讨论】:

      【解决方案3】:

      你应该试试这个

      productFlavors {
                  flavor1 {
                          applicationId   "com.myapp.flavor1"
                          }
                  flavor2 {
                          applicationId   "com.myapp.flavor2"
                          }
                  }
      
                  sourceSets.flavor1 {
                      res {
                          srcDir 'flavor1'
                      }
                      resources {
                          srcDir 'flavor1'
                      }
                  }
      
                  sourceSets.flavor2 {
                      res {
                          srcDir 'flavor2'
                      }
                      resources {
                          srcDir 'flavor2'
                      }
                  }
          }
      

      【讨论】:

      • 不同的资源适用于发布(即 src/flavor1、src/flavor2),但不适用于调试。我不明白为什么你的解决方案会解决这个问题?
      猜你喜欢
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 2020-06-17
      • 2015-11-26
      • 2013-11-13
      相关资源
      最近更新 更多