某些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
宏的条件编译)
答案 0 :(得分:2)
在src
文件夹下,您可能有一个main
文件夹,用于存储所有共享内容。但是你可以拥有特定的风味或构建类型的资源。
将名为debug
的文件夹放在src
文件夹下,您将在其中放置xml文件的副本,但文件内容正确。您必须在debug
下维护文件夹结构,因此global_tracker.xml
需要放在../src/debug/res/xml
您的文件夹结构应如下所示:
Android Studio会发现此xml文件有多个版本。
这是你应该在AS中看到的:
你可以将它用于所有类型的资源,即拥有相同文件的多个版本,并且它将会是#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="<?xml version='1.0' encoding='utf-8'?><resources><string name='google_maps_key'>${google.maps.key}</string></resources>" />
</target>
</project>