调试和生产资源

时间:2013-03-06 08:44:56

标签: android debugging android-resources

某些Android库(例如Google Analytics)会将资源用于配置目的(例如ga_trackingId)。

在这些情况下,我有不同的调试和生产值。我目前所做的是在调试时手动注释生产值,反之亦然。它看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--  DEBUG -->
    <string name="ga_trackingId">UA-12345678-1</string>
    <integer name="ga_dispatchPeriod">1</integer>
    <bool name="ga_debug">true</bool>

    <!--  PRODUCTION -->    
    <!--string name="ga_trackingId">UA-87654321-1</string>
    <integer name="ga_dispatchPeriod">120</integer>
    <bool name="ga_debug">false</bool-->
</resources>

这种切换配置的方式繁琐且容易出错,如果我不小心,会产生不必要的存储库更改。还有更好的方法吗?

(例如:在iOS上我使用带有IF DEBUG宏的条件编译)

2 个答案:

答案 0 :(得分:2)

src文件夹下,您可能有一个main文件夹,用于存储所有共享内容。但是你可以拥有特定的风味或构建类型的资源。

将名为debug的文件夹放在src文件夹下,您将在其中放置xml文件的副本,但文件内容正确。您必须在debug下维护文件夹结构,因此global_tracker.xml需要放在../src/debug/res/xml

您的文件夹结构应如下所示:

enter image description here

Android Studio会发现此xml文件有多个版本。

这是你应该在AS中看到的:

enter image description here

你可以将它用于所有类型的资源,即拥有相同文件的多个版本,并且它将会是#34;神奇地&#34;选择得当。

答案 1 :(得分:1)

我在Google地图密钥方面存在类似问题,他们依赖于签名。我所做的是使用ant脚本有条件地为项目生成/复制资源。您可以在Project&gt; Properties&gt; Builders

下的Eclipse中包含ant脚本

如果需要在代码中使用DEBUG值,则可以创建一个带有静态值的java文件,这些值也将有条件地包含在内。

如果ant环境变量正常工作,请发表评论(执行脚本后,您可以在控制台中看到“Build type:”消息)。

<project name="build-res">
<property name="conditional.resources.dir" value="myresources" />
<property name="keys_file" value="res/values/keys.xml" />

<target name="copy-release" if="${build.mode.release}" >
    <property name="build.type" value="Release" />
    <echo message="Build type: ${build.type}" />
    <property name="google.maps.key" value="nanana-value-for-release" />
    <copy file="${conditional.resources.dir}/Release.java" tofile="gen/com/example/project/BuildInfo.java" />
</target>

<target name="copy-debug" if="${build.mode.debug}">
    <property name="build.type" value="Debug" />
    <echo message="Build type: ${build.type}" />
    <property name="google.maps.key" value="lalala-value-for-debug" />
    <copy file="${conditional.resources.dir}/Debug.java" tofile="gen/com/example/project/BuildInfo.java" />
</target>

<target name="build-res" depends="copy-debug,copy-release">
    <echo file="${keys_file}" message="&lt;?xml version='1.0' encoding='utf-8'?&gt;&lt;resources&gt;&lt;string name='google_maps_key'&gt;${google.maps.key}&lt;/string&gt;&lt;/resources&gt;" />
</target>
</project>