2015-02-24 69 views
0

我们开发了一些模块并使用相同的连接器类。我们在静态数据中使用Mow。调用服务器在应用程序和开发/生产之间是不同的。在运行时从gradle获取数据

我有一些问题:

  1. 是有可能在运行时得到数据的gradle?

  2. 当gradle构建模块(通过构建类型使用)和gradle.properties时,是否可以在我的类的变量中生成/设置数据?

回答

0

我认为productFlavors正是你想要什么:

要使用它们,你必须添加到您的build.gradle你的模块下面的代码:

android{ 
    ... 
    productFlavors { 
     test1 { 
      applicationId "your.package.application.test1" 
     } 
     test2 { 

     } 
    } 
    ... 
} 

后那么您必须在src文件夹中创建与构建变体名称相同的文件夹:例如对于test1您必须创建test1文件夹

在接下来的步骤中,您必须添加res文件夹TEST1文件夹,例如添加values/strings.xml

要测试你可以添加:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="app_name">Your app 2</string> 
</resources> 

现在,当您选择test1的构建变量您应用程序将具有名称“您的应用程序2”

要更改构建变体,您必须使用任务或您可以在下面的视图中设置它:

enter image description here

+0

如果他只想要在开发/调试和发布之间进行区分的东西,那么构建产品风味是过度的。 – Dodge 2015-02-24 08:26:27

+0

据我所知,你也可以在productFlavors中配置'buildConfigField'。对我来说,productFlavors提供了更多的可能性。这就是我提出这个建议的原因。 :) – 2015-02-24 08:42:53

+0

当然可以。但产品风味的目标是提供不同版本的应用,例如免费vs付费或playstore vs亚马逊,而不是发展vs发布。而我的建议(buildTypes中的'buildConfigField'在这个特定情况下更有意义) – Dodge 2015-02-24 13:47:05

4

你也可以用你在你的应用程序代码的build.gradle

buildTypes { 
    release { 
     // ... 

     buildConfigField "boolean", "CHROMECAST", "false" 
     buildConfigField "boolean", "NOTIFICATION_COVER", "false" 
     buildConfigField "String", "API_URL", "\"https://your/production/url/\"" 
    } 
    debug { 
     // ... 

     buildConfigField "boolean", "CHROMECAST", "false" 
     buildConfigField "boolean", "NOTIFICATION_COVER", "true" 
     buildConfigField "String", "API_URL", "\"https://your/development/url\"" 
    } 
} 

buildConfigField可以通过例如访问这些变量BuildConfig.CHROMECASTBuildConfig.API_URL

对于资源,您可以为您的调试版本创建特定资源src/debug/res例如,一个特殊的应用程序图标或覆盖应用程序名称