0

ベータ ユーザーが複数のテスト/ステージング データベース/REST サーバーを切り替えることができるアクティビティのメニューがあります。リリース時には、このメニューが表示されないようにしたいと考えています。手で変更しなければならない変数をコードに入れたくありません。CIにこれをやってもらいたい。これを削除するために動的にビルドする最良の方法がわからないだけです。マニフェストにデバッグ可能なものを追加することを考えていました.Jenkinsがリリース用にビルドすると、デバッグ可能なマニフェストがfalseに変更され、コードはユーザーからメニューを非表示にします. これが最善の方法ですか、それとももっと良い方法がありますか? (たぶん、マニフェストで testOnly を使用しますか?)

4

1 に答える 1

0

現在、Eclipseがこれに眉をひそめているため、最初はファイルに設定されていないマニフェストでデバッグ可能な属性を使用しています。次に、Ant スクリプトで custom_rules.xml を作成しました。ここで、リリースの場合はターゲット false に、デバッグ バージョンの場合は true に基づいて、手動でマニフェストのプロパティを設定します。

<target name="-set-debug-files" depends="-set-mode-check">
.....
    <!-- alter the app manifest to reflect the testing state -->
    <property name="match.start" value="android:debuggable="/>
    <property name="match.end" value=">"/>
    <replaceregexp file="AndroidManifest.xml"
               match="${match.start}.*${match.end}"
               replace="${match.start}&quot;true&quot;${match.end}">
    </replaceregexp>

    <echo level="info">${ant.project.name} 
        setting manifest debug state to true</echo>
</target>

<target name="-set-release-mode" depends="-set-mode-check">
......
    <property name="match.start" value="android:debuggable="/>
    <property name="match.end" value=">"/>
    <replaceregexp file="AndroidManifest.xml"
               match="${match.start}.*${match.end}"
               replace="${match.start}&quot;false&quot;${match.end}">
    </replaceregexp>

    <echo level="info">${ant.project.name} 
         setting manifest debug state to false</echo>

</target>

次に、カスタム Application クラスに配置したコードで、アクティビティで参照できる静的を作成しました。

DEBUG = (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;

次に、使用するものを非表示/表示する必要がある場合:

if (MyApplication.DEBUGGABLE) {
    ...show stuff
} else {
    ...hide stuff
}
于 2013-07-18T19:45:36.287 に答える