6

Google Analyticsなどの一部の Android ライブラリは、構成目的でリソースを使用します (例: 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マクロで条件付きコンパイルを使用します)

4

2 に答える 2

1

署名に依存する Google マップのキーでも同様の問題がありました。私がしたことは、リソースを条件付きでプロジェクトに生成/コピーするantスクリプトを使用することでした。Project>Properties>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>
于 2013-03-06T09:12:19.897 に答える