我们有一个活动菜单,允许测试用户在多个测试/登台数据库/ REST服务器之间切换。在发布时,我想删除此菜单甚至被看到。我不希望代码中的变量需要手动修改。我希望我们的CI能为我做这件事。只是不确定动态构建以删除它的最佳方法。我想在清单中添加debuggable,然后当Jenkins构建它以进行发布时,它会将manifest debuggable更改为false,这反过来代码将隐藏用户的菜单。这是最好的方式还是有更好的方法? (也许在清单中使用testOnly?)
答案 0 :(得分:0)
目前我在清单中使用了debuggable属性,该属性最初未在文件中设置,因为Eclipse对此不满意。然后在我的ant脚本中,我创建了一个custom_rules.xml,我根据目标false手动设置了清单中的属性,如果是release,则为true,如果是调试版本,则为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}"true"${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}"false"${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
}