如何为每种口味的Gradle中的不同资产文件夹创建两个应用程序?

埃米尔·阿兹(Emil Adz):

目前,我正在开发具有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')
}

我必须在文件中进行一些更改,但是基本上就是这样。

问题:我要求在资产文件夹中为每种口味提供一组不同的资产文件,这将创建一个不同的apk文件,但具有相同的包名称。这些APK文件将以相同的应用程序上传到Google Play,但用于不同的地区。

因此,程序包名称必须保持不变。因此,基本上,我需要创建一种机制,当它们中的每两个具有相同的程序包名称但具有不同的Assets文件夹时,将创建10种口味。如何使用gradle完成此操作?

我试过使用BuildTypes来实现它,如下所示:

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

但是由于某种原因,releaseAlt也会获取位于资产目录而不是资产目录中的文件。

pdegand59:

您可以为此使用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变体时,将具有来自的logo.png文件flavor1/assets/,但是构建flavor1ReleaseAlt变体时,此png将被on from flavor1ReleaseAlt/assets/文件夹替换

说明:

Gradle在配置上使用约定(默认情况下)。特别是在项目结构方面。当构建flavour1ReleaseAlt Variant时,Gradle(实际上是Android插件;))正在寻找一个名为flavour1ReleaseAlt /的文件夹,其中包含一些资产,资源,java等。这些是Gradle为此版本可以找到的最具体的应用程序资源。然后Gradle将寻找一个文件夹,简称为flavour1 /,以获取一些不太具体的应用程序资源。然后到一个更小的特定文件夹(称为releaseAlt /),最后到通用文件夹(main /)。

为了匹配Variant查找,不同的文件夹必须具有非常严格的名称:

  • flavourBuildType /。(顺序很重要)。
  • 味道/
  • buildType /
  • 主要/

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

这两个应用程序的文件都安装在两个目标文件夹中

当我在 tomcat 中部署我的 angular 应用程序时,它会在 url 中创建两个文件夹名,导致 404 错误

在codeigniter中,如何通过将资产文件夹放在应用程序文件夹中使其工作?

如何为文件浏览器应用程序创建文件夹列表:android

我如何为我的Android应用程序创建一个文件夹,该文件夹将在DCIM,下载,铃声,图片等级别显示

如何为两个具有不同Ruby版本的Rails应用程序创建服务器设置?

如何同步两个不同系统中的两个文件夹

Nginx用于两个Rails应用程序-根文件夹和特殊子文件夹

如何为我的应用程序创建数据文件夹?

如何在GNOME应用程序菜单中创建应用程序文件夹?

如何为 django 中具有索引功能的两个应用程序创建一个 url?

在python中从两个不同的文件夹创建文本文件

创建预构建事件以将文件复制到Android应用程序中的资产文件夹

如何为单个 Windows 窗体应用程序发布两个不同的快捷方式?

Xcode:如何为指向两个不同团队帐户(企业和公司)的两个不同目标选择两个不同的应用程序组

在我的应用程序的资产目录中列出所有文件和文件夹(以及子文件夹),并检查资产是文件还是文件夹

是否可以为在两个不同应用程序中打开的单个文件创建实时链接?

如何比较两个不同文件夹中的文件并执行条件复制

我如何从python中的两个列表中创建包含多个子文件夹的多个文件夹

如何将相同程序集的两个版本从两个不同的子文件夹加载到两个不同的域中?

两个不同文件夹中的两个不同的wordpress网站

如何在Rails 3.2应用程序中从具有不同键的两个模型创建数组?

如何递归比较两个不同文件夹中的用户和组?

如何将代码推送到两个不同的文件夹中?

如何为两个几乎相同的应用程序删除 IoC 容器中的重复项?

如何从wwwroot azure应用程序服务下创建的子文件夹中启动应用程序

如何通过Electron-builder使用资产文件夹构建电子应用程序

在哪里编辑应用程序-在资产中还是在主文件夹中?

如何在UWP应用程序中创建文件夹?