Android - 在开发和生产Web服务之间切换

Saa*_*ooq 3 java android

我想让我的应用程序在开发和生产Web服务之间切换,而不会在代码中进行太多改动(并且相对简单).

现在我将我的Web服务地址作为static final String类中的变量来执行实际的HTTP调用,并使用a在应用程序的其余部分中切换代码static final boolean.

现在虽然boolean非常方便,但我无法使用它来更改Web服务地址,因为它们本身就是static final变量.解决这个问题的最佳做法是什么?

我在SO上发现了一些关于使用Android SDK提供的debug变量的讨论但是虽然它可以取代它boolean,但它并没有解决其他问题.

注意:如果你想知道,我正在静态使用Web服务类,所以我没有一个构造函数,我可以检查debug变量和更改变量,而且我也喜欢它们static final.

Saa*_*ooq 5

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)

从我所读到的,因为booleanstatic final,编译器将优化,条件代码将被删除为无法访问.

这似乎是解决这个问题的合适解决方案,但Android文献指出方法调用通常比直接变量访问更昂贵,因此无法确定这是否是比Chuck提供的更好的解决方案.

编辑:记录.我已经转移到了@ Blundell的解决方案.哪个很棒.因此,如果您想快速完成此操作,我会建议您从此开始,但将其放在路线图上.