簡體   English   中英

如何使用Gradle中的不同資源文件夾為每個flavor創建兩個應用程序?

[英]How to create two applications for each flavor with different assets folders in Gradle?

目前我正在開發一個有5種口味的應用程序,這是我的build.gradle文件的一部分:

buildscript {
   repositories {
       mavenCentral()
   }
   dependencies {
       classpath 'com.android.tools.build:gradle:0.14.0'
   }
}

apply plugin: 'com.android.application'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 20
    buildToolsVersion '20.0.0'

    signingConfigs {
        release {
            storeFile file("")
            storePassword "password"
            keyAlias "alias"
            keyPassword "password"
        }
    }

    lintOptions {
        abortOnError false
    }

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 20

        applicationId 'application.package'
        signingConfig signingConfigs.release
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }

    productFlavors {
        flavor1{
            applicationId 'com.flavor1.package'
        }
        flavor2{
            applicationId 'com.flavor2.package'
        }
        flavor3{
            applicationId 'com.flavor3.package'
        }
        flavor4{
            applicationId 'com.flavor4.package'
        }
        flavor5{
            applicationId 'com.flavor5.package'
        }
    }
}

dependencies {
    compile project(':SDK')
}

我不得不在文件中做一些更改,但基本上就是這樣。

問題是:我要求在assets文件夾中為每一種風格提供一組不同的資產文件,這些文件將創建一個不同的apk文件,但具有相同的包名。 這些apk文件將作為相同的應用程序上傳到Google Play,但針對不同的地區。

所以包名必須保持不變。 所以基本上我需要創建一種機制,當它們中的每兩個具有相同的包名但具有不同的資產文件夾時,而不是5種風格將創建10種風味。 如何使用gradle完成?

我嘗試使用BuildTypes實現這一點,如下所示:

buildTypes {
    release {
        signingConfig signingConfigs.release
        sourceSets.main.assets.srcDirs = ['assets']
    }
    releaseAlt {
        signingConfig signingConfigs.release
        sourceSets.main.assets.srcDirs = ['assetsalt']
    }
}

但由於某種原因,releaseAlt還會獲取位於assets目錄中的文件,而不是assetsalt目錄。

您可以使用buildTypes。

buildTypes {
  release {
    // ... the usual stuff here
  }
  releaseAlt {
    // .. the usual stuff here too like signing config etc...
  }
}

現在文件層次結構:

你應該有

project/
- app/
 - src/
  - main/
   - assets/
    - logo.png // Generic assets go here
   - java/
   - res/
   - ...

  - flavor1/
   - assets/
    - logo.png // Specific assets for all the flavor1 Variants

  - releaseAlt/
   - asset/
    - logo.png // Specific assets for all the releaseAlt Variants.

  - flavor1ReleaseAlt/
   - assets/
    - logo.png // very specific assets for the flavor1ReleaseAlt Variant
- SDK/

使用此文件層次結構,當您構建flavor1Release變體時,您將獲得來自flavor1/assets/的logo.png文件,但是當您構建flavor1ReleaseAlt變體時,此png將替換為來自flavor1ReleaseAlt/assets/文件夾的on。

說明:

Gradle使用約定而不是配置(默認情況下)。 特別是在項目結構方面。 當構建flavor1ReleaseAlt Variant時,Gradle(實際上是Android插件;))正在尋找一個名為flavor1ReleaseAlt /的文件夾,里面有一些資產,資源,java等... 這些是Gradle可以為此Variant找到的最具體的應用資源。 然后Gradle會為一些不太具體的應用資源尋找一個名為flavor1 /的文件夾。 然后到一個名為releaseAlt /的更小的特定文件夾,最后到通用文件夾(main /)。

不同的文件夾必須具有非常嚴格的名稱才能匹配Variant查找:

  • flavorBuildType /。 (順序很重要)。
  • 味道/
  • buildType /
  • 主要/

希望這可以幫助。

暫無
暫無

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

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