当前位置: 首页 > 面试题库 >

使用gradle为不同的应用程序风格使用不同的资源(图形和字符串)

杜浩壤
2023-03-14
问题内容

对此已经有几个问题了(不同的图标不起作用,而不同的名称起作用了),但是对于这些问题的答案还不足以使我的应用程序按我需要的方式工作。我是Gradle的新手,昨天才刚开始转换。对我来说,有几件事我还没弄清楚。

我有3个以上的应用程序在相同的代码库下工作,每个应用程序使用不同的应用程序启动器图标和名称,URL,但是现在我无法获得适用于每个应用程序的不同图标和应用程序名称。在添加sourceSets之前,我的appName和其他自定义字符串有效,但是图标无效,现在没有任何效果。

在我的src目录下,我有4个目录:flav1flav2flav3,和main(包含所有我的核心代码和默认资源)。Android
Studio
.resflav每个目录的每个末尾添加了标签。每个目录都有一个drawable和values目录,目录中分别包含自定义的strings.xml和icon.png。我不认为drawable应该有一个特定的名称:drawable,drawable-
mdpi等。如果这是我所决定的,我就想要drawable。

我没有任何错误,只是其中定义的默认字符串main和默认图标Android Studio,但我内部的默认AndroidManifest.xml
main不再能够识别我的图标和它们了。

这是我的build.gradle:

apply plugin: 'android'

android {
   compileSdkVersion 19
   buildToolsVersion '19.0.2'

   defaultConfig {
      minSdkVersion 8
      targetSdkVersion 19
   }

   buildTypes {
      release {
         runProguard false
         proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
      }
   }

   productFlavors {
      flav1 {
         packageName "com.example.flav1"
         versionCode 32
         versionName "1.0.5"
      }

      flav2 {
         packageName "com.example.flav2"
         versionCode 33
         versionName "1.0.6"
      }

      flav3 {
         packageName "com.example.flav3"
         vershtml" target="_blank">ionCode 27
         versionName "1.0.0"
      }
   }

   sourceSets {
      main {
          // I don't understand how these are supposed to work
          java.srcDirs = ['java']
          resources.srcDirs = ['src']
          aidl.srcDirs = ['src']
          renderscript.srcDirs = ['src']
          // res.srcDirs = ['res']
          assets.srcDirs = ['assets']
      }

      flav1 {
          // I can't figure out the path to these
          res.srcDirs = ['res', '/flav1']
      }

      flav2 {
          res.srcDirs = ['res', '/flav2']
      }

      flav3 { 
          res.srcDirs = ['res', '/flav3']
      }
   }

   // I read that these are necessary, but I don't know how to use them
   sourceSets.flav1 {
      res {
          srcDir 'flav1'
      }
      resources {
          srcDir 'flav1'
      }
   }
   sourceSets.flav2 {
      res {
          srcDir 'flav2'
      }
      resources {
          srcDir 'flav2'
      }
   }
   sourceSets.flav3 {
      res {
          srcDir 'flav3'
      }
      resources {
          srcDir 'flav3'
      }
   }
}

dependencies {
   // code
}

感谢您的帮助!


问题答案:

如果您可以重新排列文件,那是解决此问题的最简单方法。

您想要这样放置它们:

yourApp/
  src/
    main/
      java/
      res/
    flav1/
      java/
      res/
    flav2/
      java/
      res/
    flav3/
      java/
      res/

然后在build.gradle中,您可以完全摆脱sourceSets。保持产品的香味。

至于资源的覆盖,它应该是自动的:“构建系统会合并所有源目录中的所有资源。如果不同的文件夹包含具有相同名称的构建变体资源,则优先级顺序如下:类型资源会覆盖产品类中的资源,后者会覆盖主源目录中的资源。”



 类似资料:
  • 问题内容: 我的gradle文件中设置了两种构建类型:debug和release。我希望能够为debug构建类型设置其他应用程序图标。有没有办法通过构建类型来实现此目的而又不涉及产品风味?build.gradle文件在下面。 问题答案: 弄清楚了。您需要做的是创建一个单独的src文件夹debug,其中包含不同的图标。例如,如果您的项目布局如下,并且启动器图标称为ic_launcher.png: 然

  • 我正在构建一个具有多种不同风格的应用程序。我的问题是,如果我为基于flavor的活动使用不同的代码,我是否需要在所有flavor directores中包含该代码的副本,或者如果我只将代码副本保留在app/src/main/java目录中,如果我不将其包含在flavor目录中,其他所有flavor是否会使用main/java中的文件。 我有 app/src/main/java/com/mycomp

  • 我必须制作一个非常简化的联合银行账户程序(在这个例子中,有3个用户都可以访问银行账户资源),但是我在正确使用Java线程时遇到了问题。 以下是该程序的工作原理。有些“用户”都可以访问一个具有任意设置的初始余额的联合银行账户(我使用了5000)。他们每个人都可以在一次运行的程序中提取或存款三次(无论是提取还是存款,每次都是随机生成的)。 他们存款或取款的金额也是随机生成的,唯一的规则是金额永远不能超

  • 我正在为我的应用程序准备抽屉。经过一些研究,我知道需要考虑的3个参数是屏幕大小、密度和分辨率。 1.)因为对于特定的屏幕尺寸,如果密度变化,那么相应的分辨率将自动变化。此外,对于特定的密度,如果屏幕尺寸变化,那么相应的分辨率将自动变化。 按照这一逻辑,我不再考虑分辨率,计划只关注屏幕大小和密度。我的方法正确吗? 2.)现在根据文档,如果您正在为mdpi准备100x100映像,那么您应该分别为ldp

  • 问题内容: 在python2中: 在python3中: 为什么这里有字节? 编辑 : 我认为当字符串具有非ascii字符时,python3会将字节附加到字符串中。(如@Ashraful伊斯兰教所说) 那么如何在python3中避免这种情况呢? 问题答案: 考虑以下代码片段: 使用Python 2运行此命令,然后使用以下命令查看结果: 等等。不出意外;从到128个字节。 对Python 3做同样的事

  • 我使用的是Spring boot Jersey Spring security,我想要公共和私有endpoint,我想要一个模式,如下所示: /rest--我的根上下文 我想把我的公共endpoint放在这个上下文中,它必须在根上下文中,比如 我想把我的私有endpoint放在这个上下文中,它必须在根上下文中,比如 我的配置如下: 泽西配置: Spring安全配置: 问题是如何在my/rest上下