我想让我的应用程序在开发和生产Web服务之间切换,而不会在代码中进行太多改动(并且相对简单).
现在我将我的Web服务地址作为static final String类中的变量来执行实际的HTTP调用,并使用a在应用程序的其余部分中切换代码static final boolean.
现在虽然boolean非常方便,但我无法使用它来更改Web服务地址,因为它们本身就是static final变量.解决这个问题的最佳做法是什么?
我在SO上发现了一些关于使用Android SDK提供的debug变量的讨论但是虽然它可以取代它boolean,但它并没有解决其他问题.
注意:如果你想知道,我正在静态使用Web服务类,所以我没有一个构造函数,我可以检查debug变量和更改变量,而且我也喜欢它们static final.
UPDATE
使用gradle构建系统,这现在变得非常容易.您可以放置一个文件,例如Server.java开发服务器凭据src/debug/java和带有生产凭据的文件src/release/java(假设您使用默认的gradle项目配置,相应地调整自定义).然后构建系统使用基于您的相应文件buildType.
更妙的是,我现在有release文件使用static final变量,而对于debug构建我使用static了在完全相同的方式使用代码(例如变量Server.url,Server.username等等),但可以从发展的抽屉被改变.什么是开发抽屉?有关这方面的一个例子,请参阅Jake Wharton的u2020项目及相关演讲.
老答复
我最终使用静态方法来访问static final boolean定义调试状态的另一个地址.像这样:
public static String getWSAddress() {
if(DEVELOPMENT_MODE) {
return "http://dev.server.com";
}
return "http://prod.server.com";
}
Run Code Online (Sandbox Code Playgroud)
从我所读到的,因为boolean是static final,编译器将优化,条件代码将被删除为无法访问.
这似乎是解决这个问题的合适解决方案,但Android文献指出方法调用通常比直接变量访问更昂贵,因此无法确定这是否是比Chuck提供的更好的解决方案.
编辑:记录.我已经转移到了@ Blundell的解决方案.哪个很棒.因此,如果您想快速完成此操作,我会建议您从此开始,但将其放在路线图上.