我想用Ant自动化我的Android项目构建。目前,我必须在其中一个类中更改一些静态字符串和布尔字段,以用于不同市场的同一应用程序的不同类型的版本。
是否可以使用Ant设置这些变量,而无需复制带有一些奇怪标记的文件?我希望能够继续使用Eclipse中的文件。
答案 0 :(得分:2)
你可以,但你不应该。不要让你的Ant构建文件弄乱代码;它会导致难以发现的奇怪和混乱的错误。
相反,请使用java Properties。
以下是如何在static final
块中初始化static
的一个小例子:
class Junk {
public static final int j ;
static {
// Use java.lang.Properties here to get the values
j = 42;
}
public static void main(String[] argv){
System.out.printf("The answer is %d\n" , j);
}
}
答案 1 :(得分:1)
是的,你可以。
复制时,请使用filterset。在文本文件中包含一些要替换的过滤器令牌,并在filterset中指定令牌和要替换它的值。
<copy todir="../backup/dir">
<fileset dir="src_dir"/>
<filterset>
<filter token="TITLE" value="Foo Bar"/>
</filterset>
</copy>
请注意,您必须在尝试编译文件之前执行此操作,因此您可能需要重新编写一些编译逻辑以与过滤后的副本兼容。
就个人而言,我创建一个build / processed-src目录并将所有内容复制到其中进行过滤(复制只会更新过时的文件),然后重新编译编译链以从那里编译。
答案 2 :(得分:1)
可能你可以创建一个存根“java”文件,它作为ant构建的一部分被“回显”。
<echo file="com/corp/product/Version.java">
package com.corp.product;
public class Version {
public static final int MAJOR = ${version.major};
public static final int MINOR = ${version.minor};
public static final String full = "${version.major}-${version.minor}";
}
</echo>
它解决了大多数关于必须复制的抱怨,但它确实意味着必须在ant构建文件(或包含的ant构建文件)中维护该类。