我想要的是一种具有依赖于构建配置的设置的方法。举一个具体的例子,我的android应用程序连接到Web服务。在开发中,我希望从可配置的值中提取服务URL。在测试中,我希望获得不同的值。在生产中,还有另一个值。
所以,在代码中我有这样的东西:
public class HttpRequestHelper
{
private static String GetServiceUrl(ServiceAction action)
{
return serviceUrl + action.toString();
}
}
默认情况下(调试/运行eclipse时),我希望该网址为http://localhost:1234
在测试中,我想要https://test.mydomain.com
在制作中我想要https://mydomain.com
我是eclipse和ant的新手,自从我使用java以来已经很久了。我该如何设置呢? build.xml应该是什么样的?据我所知,当我想构建test / prod版本时,我需要使用命令行。没关系。但我不知道如何使这个serviceUrl自动设置依赖于构建。我甚至不确定放置此信息的最佳位置(资源,属性文件?)。我真的想避免设置,构建,设置,构建等。
答案 0 :(得分:9)
如上所述,您必须将URL放在dev.properties,test.properties,prod.properties等属性文件中。
现在,您唯一需要做的就是让您的构建足够智能,根据环境选择属性文件。
可以通过将参数传递给ANT来完成,例如:
$ ant -file MyBuild.xml -DcurrentEnv = dev(适用于开发环境)
$ ant -file MyBuild.xml -DcurrentEnv = test(For Test)
$ ant -file MyBuild.xml -DcurrentEnv = prod(For Production)
在构建脚本中,这是您可以包含属性文件的方式:
<target name="jarMe">
<jar destfile="sample.jar" basedir="src" includes="${currentEnv}.properties"/>
</target>
有了这个,无论您在构建时提供什么名称,都会选择具有该名称的属性文件。
答案 1 :(得分:4)
您可以尝试在build.properties文件中包含以下属性文件:
service.url=*
您可以在local.properties中使用http://localhost:1234或https://test.mydomain.com进行开发和集成测试,并且可以在default.properties中将其设置为https://mydomain.com。
通过这样做,您将在不同的构建环境中获得service.url的不同价值。您可以使用该值生成配置文件,并将其解析为您的代码,或将其设置为env变量,或者只是将其放入资源文件中,Android将为您读取它:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="service-url">@@toben_to_be_replaced_during_build_time@@</string>
</resources>
答案 2 :(得分:2)
我首先将url放入属性文件中,然后将其放置到类路径中。制作测试和生产属性文件。然后根据构建将正确的文件放到类路径上并在运行时拉出属性。
答案 3 :(得分:0)
找到一个教程,详细介绍了使用ant来自动化构建系统,创建和使用构建配置,以及使用一个命令构建发布项目的所有细节。这是:http://www.androidengineer.com/2010/06/using-ant-to-automate-building-android.html
似乎有点长,但它涉及所有步骤和细节。