3. Варианты реализация
Product flavors - нескольких версий
buildTypes – настройки отдельных
параметров и ключей
Android library – выделение
основной версии в библиотеку
5. Flavors
Отдельные ресурсы
Отдельный код
Отсутствие
возможности проверки
корректности других
веток
Легкая сборка
buildConfigField "boolean", "SUPPORT_FONTS", "true"
7. Архитектура
«Проект заготовка»
Многоуровневая
архитектура, версии
для менеджеров и
теста flavors.
Специальные версии
для отладки пушей и
оплаты
8. Архитектура
Вся настройка с помощью главной
фабрики
public class KassaApp extends Application {
public void onCreate() {
…
}
protected MainFactory createMainFactory() {
return new MainFactory();
}
}
9. Архитектура
public class MainFactory {
public FragmentManager createFragmentManager() {
return new FragmentManager();
}
public UIManager createUIManager() {
return new UIManager();
}
public String getLatLng() {
return LocationManager.getInstance().getLatLngParams();
}
public String getCustomUrl() {
return getContext.getString(R.string.custom_url);
}
}
10. Архитектура
public class BolshoyFactory extends MainFactory {
public FragmentManager createFragmentManager() {
return new BolshoyFragmentManager();
}
@Override
public String getLatLng() {
return getString(R.string.lat_lng);
}
@Override
public UIManager createUIManager() {
return new CustomUIManager();
}
}
13. Настройка ключей
Вся ключи предоставляются через в хранятся
в config.xml. Доступ через класс KeysProvider:
public class KeysProvider {
public String getAppKey() {}
public String getParseAppKey () {}
public String getAppKey() {}
}
Config.xml:
<string name="parse_app_key">***</string>
<string name=“flurry_key">***</string>
14. Получение дизайна
Дизайн создается по аналогии с основной
версий. Все элементы поставляются в таком
же формате.
Для цветовых настроек выделяется
отдельный файл colors.xml:
<color name="kassa_delimiter">#bbe2f9</color>
15. Настройка ресурсов
Информация относительно кинотеатра
хранится в отдельном файле :
<string name="support_custom_email">
web.support@bolshoikino.ru
</string>
<string name="app_name">
КиносетьЧарли
</string>
16. Удаление элементов
Для удаления (скрытия) элементов используется
UIManager:
public boolean hasPosterSearch() {
return getBoolean(R.bool.config_poster_search_enabled);
}
public boolean hasHeaderLocation() {
return getBoolean(R.bool. config_header_location_enabled);
}
Пример использования:
if (!uiManager. hasHeaderLocation()) {
disableHeaderLocationView();
}
18. Добавление webView
За работу с webView отвечает
отдельный фрагмент.
Подменяем ссылку:
private String getUrl();
<string
name="custom_url_news">
http://kassa.rambler.ru
</string>
19. Добавление элементов
При добавлении элементов характерных для всех
типовых кинотеатров, мы добавляем их в основной
проект
При добавлении нетипичных элементов, мы
используем подмену фрагментов
@Override
public Place getPlace() {
Place customPlace = new Place();
customPlace.setId(52);
…
return customPlace;
}
20. Тестирование и отладка
Для unit тестирования используется Robolectric,
для UI - espresso
Для деплоя и аналитики используется fabric.io (ex
Crashlytics)
gradle assembleRelease
crashlyticsUploadDistributionRelease
ext.betaDistributionReleaseNotes=”Исправлено
мигание превью.”
ext.betaDistributionEmails=“betaUser@ramble-co.ru,
betaUser2@rambler-co.ru"
ext.betaDistributionGroupAliases=”ramblerCinema”
21. Continuous Integration
Для CI используется Jenkins
Сервер автоматически скачивает код из
репозитория по событиям
Собираются все проекты
Автотесты проходят для всех проектов
Собранные apk доступны для скачивания и более
детального анализа.
Доступен анализ покрытия кода тестами и
успешности выполнения
22. Управление аккаунтами
Приложение выкладывается из под аккаунта
предоставленного заказчиком
К данному аккаунту привязываются сторонние
сервисы, предоставляется доступ к статистике.
Публикация в google play и app store также
происходит от лица заказчика.
Возможно использование Publishing API
https://developers.google.com/android-publisher/