如何在productFlavors中添加一些我可以从java代码中读取的东西

时间:2015-05-01 10:36:59

标签: android android-gradle build.gradle android-productflavors

我正在尝试使用不同的通道名称构建多个apks,我需要在java代码中读取通道名称。所以我正在尝试使用productFlavors,目前我正在尝试将以下代码添加到我的build.gradle

 productFlavors {
    GooglePlay {
    }

    Amazon {
    }
}

sourceSets {
    GooglePlay {
        assets.srcDirs = ['assets-GooglePlay', 'assets']
    }

    Amazon {
        assets.srcDirs = ['assets-Amazon', 'assets']
    }
}

我还要在两个资产文件夹channelNameassets-GooglePlay中添加文件名assets-Amazon。我希望生成的apk将包含此channelName文件,但事实是它不存在。那么我该如何处理这个问题呢?感谢

我目前正在使用Gradle 2.2.1

3 个答案:

答案 0 :(得分:1)

你想要实现的目标可以通过分离两个字符串文件来完成,每个字符串都有一个。

所以目前你可能在src / main / res / values中有一个名为strings.xml的文件。让我们说这个文件包含你想要GooglePlay的字符串,然后你需要做的是在src / Amazon / res / values中创建另一个,它将包含亚马逊的字符串。

完成此操作后,您可以通过从活动内部调用getResources().getString(R.string.STRING_NAME)来从代码中访问该字符串。

答案 1 :(得分:1)

找到一个更简单的解决方案

//changing image using didSet              

didSet 
{
  if (self.isChecked == true)
  {
      self.setImage(checked, forState: .Normal)
  }
  else
  {
      self.setImage(unChecked, forState: .Normal)
  }
}

然后通过productFlavors { GooglePlay { buildConfigField "String", "ChannelName", "\"GooglePlay\"" } Amazon { buildConfigField "String", "ChannelName", "\"Amazon \"" } }

访问频道名称

答案 2 :(得分:0)

在每个productFlavor中添加resValue也是一种巧妙的方法。