Могу ли я использовать Ant для установки статических переменных в моем проекте Android при сборке? - PullRequest
1 голос
/ 17 марта 2011

Я бы хотел автоматизировать сборку проекта Android с помощью Ant.В настоящее время я должен изменить некоторые статические поля String и Boolean в одном из классов для разных видов версий одного и того же приложения для разных рынков.

Можно ли установить эти переменные с помощью Ant, не прибегая к копированию файла со странными маркерами в нем?Я хочу продолжать использовать файлы в Eclipse.

Ответы [ 3 ]

2 голосов
/ 17 марта 2011

Вы можете , но не должны.Не путайте ваш файл сборки 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 голос
/ 17 марта 2011

Возможно, вы можете создать заглушку "java" -файл, который "echo" вычеркнут как часть сборки 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).

1 голос
/ 17 марта 2011

Да, вы можете.

При копировании используйте набор фильтров. Включите несколько токенов фильтра для замены в текстовом файле, а в наборе фильтров укажите токен и значение для его замены.

 <copy todir="../backup/dir">
    <fileset dir="src_dir"/>
    <filterset>
      <filter token="TITLE" value="Foo Bar"/>
    </filterset>
 </copy>

Обратите внимание, что вы должны сделать это до попытки скомпилировать файл, поэтому вам, возможно, придется переделать немного логики компиляции, чтобы она была совместима с отфильтрованной копией.

Лично я создаю каталог build / processing-src и копирую в него все отфильтрованное (копирование будет обновлять только устаревшие файлы), а затем переделываю цепочку компиляции для компиляции оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...