Как использовать разные среды сборки для Android?

#android

#Android

Вопрос:

У меня есть десятки ключей api для facebook и Twitter и многих других сервисов, каков стандартный способ получения разных значений для ключей в зависимости от того, создаю ли я сборку для разработки, промежуточную сборку или производственную сборку?

Ответ №1:

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

Если у вас действительно их так много для использования в нескольких проектах, я предлагаю вам добавить их во вспомогательный класс, чтобы свести к минимуму изменение кода в ваших классах. Что-то вроде:

 public class BuildHelper {
    public static final int DEBUG=0;
    public static final int STAGING=1;
    public static final int PRODUCTION=2;

    public static int BUILD;

    public static String getFbKey() {
      switch(BUILD) {
        case DEBUG: return "xxx";
        case STAGING: return "yyy";
        case PRODUCTION: return "zzz"; 
      }
      return null;
    }
    public static String getTwitterKey() {
      switch(BUILD) {
        case DEBUG: return "xxx";
        case STAGING: return "yyy";
        case PRODUCTION: return "zzz"; 
      }
      return null;
    }
}
  

и использовать его как:

 public class YourClass extends Activity {

    public static String FB_KEY;
    public static String TWITTER_KEY;
    //etc.

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    BuildHelper.BUILD=BuildHelper.DEBUG; // or STAGING or PRODUCTION
    FB_KEY = BuildHelper.getFbKey();
    TWITTER_KEY = BuildHelper.getTwitterKey();
    //etc.
  }
}
  

Комментарии:

1. В итоге я выполнил проверку во время выполнения для переменной strings, подобной этой

Ответ №2:

Я бы сохранил их в отдельных файлах свойств и ссылался на соответствующий файл свойств в вашем скрипте сборки / пути к классу eclipse в зависимости от того, что вы делаете.