我可以在构建时使用Ant在我的Android项目中设置一些静态变量吗?

时间:2011-03-16 21:33:19

标签: java android ant build replace

我想用Ant自动化我的Android项目构建。目前,我必须在其中一个类中更改一些静态字符串和布尔字段,以用于不同市场的同一应用程序的不同类型的版本。

是否可以使用Ant设置这些变量,而无需复制带有一些奇怪标记的文件?我希望能够继续使用Eclipse中的文件。

3 个答案:

答案 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构建文件)中维护该类。