【问题标题】:Android separate string values for release and debug buildsAndroid 为发布和调试构建单独的字符串值
【发布时间】:2016-03-16 15:18:21
【问题描述】:

每次我发布我的应用程序时,我都会将我的所有 url 字符串 和一些 keys 从测试更改为生产。我这样做的方式只是在发布之前注释掉测试字符串。有没有更好的方法来处理基于构建类型的字符串?

【问题讨论】:

  • 正在寻找这个..很好的问题和答案..
  • 不要那样做。使用您的方法在生产代码中出现错误字符串的可能性非常高。这样做:developer.android.com/tools/building/configuring-gradle.html
  • @RusheelJain 是否有针对 android 资源值的解决方案?
  • @spaceMonkey 是的,我给你的链接。我知道这一点,因为我今天只亲自尝试过:P 我在下面的答案中编写了步骤。如果有不清楚的地方请告诉我:)

标签: android gradle android-build android-build-flavors


【解决方案1】:

假设您使用 Android Studio,默认情况下,系统会创建基本的 releasedebug 风格。因此,如果您在项目的 app/src 文件夹中添加 debugrelease 文件夹,则可以在其中声明单独的值。

所以你的结构应该是这样的:

project
  -app
    -src
      -debug
        -java
          ...
        -res
          -values
            -strings.xml
      -release
        -java
          ...
        -res
          -values
            -strings.xml
      -main
        -java
          ...
        -res
          -values
            -strings.xml

我还应该补充一点,如果您有一个未在 debugrelease 文件夹中定义的字符串,它将回退到您的 main 文件夹。

【讨论】:

  • 所以每次我做某事时我应该更新所有 3 个文件夹吗?
  • 如何将特定于 url 的字符串分隔成单独的“url-strings.xml”,然后拥有project/app/src/main/res/values/strings.xmlproject/app/src/debug/res/values/url-strings.xmlproject/app/src/release/res/values/url-strings.xml
  • 不,您只需将您的应用程序放在默认的main 文件夹中。在debugrelease 构建中需要不同的任何资源,您只需添加到strings.xml(或@k3b 提到的不同文件)。 Android Studio 将始终回退到 main 文件夹,因此您可以在 debug/release 文件夹中有 1 个 url 字符串,它只会占用这些。
  • 我必须将它用于 admob 广告单元,我在 3 个新资源文件(用于主文件、调试文件和发布文件)中创建了它。就我而言,不需要发布版本,尽管我仍然创建了它。但是我将admob.xml 的发行版和主要版本设置为相同(复制和粘贴),因为我正在移植到仅识别主文件夹中的文件的其他操作系统。
  • 还要确保在 Android Studio 中更改构建变体以管理集成的所有内容
【解决方案2】:

好吧,如果需要使用几个字符串,你可以使用 Gradle

buildTypes {
    release {
        resValue 'string', 'adUnitIdMain', '"production-id-value-should-be-here"'
        resValue 'string', 'adUnitIdList', '"production-id-value-should-be-here"'
        resValue 'string', 'adUnitIdDetail', '"production-id-value-should-be-here"'
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
    debug {
        resValue 'string', 'adUnitIdMain', '"test-id-value-should-be-here"'
        resValue 'string', 'adUnitIdList', '"test-id-value-should-be-here"'
        resValue 'string', 'adUnitIdDetail', '"test-id-value-should-be-here"'
    }
}

【讨论】:

【解决方案3】:

只需在 build.gradle 中制作两种口味。然后是两个目录,同样在链接中给出(developer.android.com/tools/building/configuring-gradle.html)。 由于您只需要更改字符串,只需将您的 strings.xml 文件复制到新目录(即开发和生产) 删除你原来的strings.xml

就是这样。 :)

无需移动您的 java 文件或其他布局文件。

简而言之,将所有构建风格都应保持一致的所有内容都保留在“主”目录中。 将依赖于构建风格的值覆盖到它们各自的目录中。

【讨论】:

  • 构建口味?您是指“构建类型”还是“产品风味”?
  • 对不起。是的产品口味,如测试和生产
猜你喜欢
  • 2010-10-07
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
相关资源
最近更新 更多