我目前正在编写一个与外部服务器交互的Android应用程序。
我想确保在开发过程中,Android与测试服务器实例建立连接,但应用程序应该连接到生产服务器。
目前,服务器的URL存储在其中一个xml文件中 - res / values / strings.xml as
<string name="server_url">XYZ.example.com</string>
。
现在,我只是根据我的情况修改本地机器中的xml文件。
处理这种情况的惯用方法是什么?
答案 0 :(得分:1)
XML文件几乎就是这样。 mapview api密钥就是一个例子。
要开发mapview应用程序,您需要一个基于您的构建证书的密钥。大多数人使用调试密钥构建和测试,然后使用释放密钥进行部署。您需要为每个构建密钥请求不同的api密钥。我在我的资源文件中保留了两个map api键,然后在调试时注释掉了我不需要的那个。
另一种方法是在字符串文件中保留两个字符串,然后使用一些编程方法选择要使用的密钥。 AdMob使用这种方法,即如果您正在测试,则将测试设备添加到添加请求中。由于您不希望世界上使用相同手机的每个人只看到测试添加,因此您需要在检查测试与发布版本时包装调用。我使用xml文件中定义的整数资源值来控制它。这最终表现类似于C / C ++ DEBUG宏。我仍然需要更改资源值的值,但我只需要在一个地方执行此操作。或者,您可以使用注释来隐藏测试服务器:例如
String server = context.getString(R.string.realserver);
server = context.getString(R.string.testserver); //comment out this line prior to release
我不喜欢评论/取消评论方法,因为它很容易忘记,特别是如果你有多个地方可以访问资源。
如果有更好的方法来解决这个问题,我也会感兴趣。
答案 1 :(得分:0)
执行此操作的一种好方法是使用单独的配置文件在构建时指定这些值。这篇文章很有帮助。 Android - use ant to create build configurations that change configuration values
答案 2 :(得分:0)
如果您使用带有gradle的android studio,我认为这是一种麻烦的做法。
您可能需要查看此文章:http://tulipemoutarde.be/2013/10/06/gradle-build-variants-for-your-android-project.html
也可在YouTube视频中使用:https://www.youtube.com/watch?v=7JDEK4wkN5I
这也允许您为同一个应用程序提供两个不同的包名称。
它使用gradle风格来实现您正在寻找的内容,并且非常容易实现。