Конвейерное производство приложений

25
Конвейерное производство приложений. Архитектура и инструменты Мельников Андрей Rambler&Co [email protected] [email protected]

Upload: rambler-android

Post on 18-Jan-2017

265 views

Category:

Software


0 download

TRANSCRIPT

Конвейерное производство

приложений. Архитектура и инструменты

Мельников Андрей

Rambler&Co

[email protected]

[email protected]

Постановка задачи

Варианты реализация

Product flavors - нескольких версий buildTypes – настройки отдельных

параметров и ключей Android library – выделение

основной версии в библиотеку

Flavors

productFlavors { kassa35mm { applicationId "ru.rambler.kassa35mm" versionName "2.0" } kassabel { applicationId "ru.rambler.kassabel" versionName "2.2" versionCode 9 } }

Flavors

Отдельные ресурсы

Отдельный код

Отсутствие возможности проверки корректности других

веток

Легкая сборка

buildConfigField "boolean", "SUPPORT_FONTS", "true"

BuildTypes

Несколько видов сборки

Настройки для тестирования

Подмена ключей

Архитектура

«Проект заготовка» Многоуровневая

архитектура, версии для менеджеров и теста flavors.

Специальные версии для отладки пушей и оплаты

Архитектура

Вся настройка с помощью главной фабрики

public class KassaApp extends Application { public void onCreate() {

… }

protected MainFactory createMainFactory() {

return new MainFactory();

}

}

Архитектура 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);

}

}

Архитектура

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();

}

}

Архитектура

Основные компоненты:

MainFactory – фабрика основных сущностей

UIManager – тонкая настройка view элементов

FragmentManager – фабрика фрагментов

Архитектура

Работа с фрагментами: KassaFragmentManager:

@Override public Fragment getOneCinemaFragment() { return new CustomInfoFragment(); }

Настройка ключей

Вся ключи предоставляются через в хранятся в 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>

Получение дизайна

Дизайн создается по аналогии с основной версий. Все элементы поставляются в таком же формате.

Для цветовых настроек выделяется отдельный файл colors.xml:

<color name="kassa_delimiter">#bbe2f9</color>

Настройка ресурсов

Информация относительно кинотеатра хранится в отдельном файле :

<string name="support_custom_email">

[email protected]

</string>

<string name="app_name">

Киносеть Чарли </string>

Удаление элементов

Для удаления (скрытия) элементов используется

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();

}

Пример меню

Добавление webView

За работу с webView отвечает

отдельный фрагмент.

Подменяем ссылку:

private String getUrl();

<string

name="custom_url_news">

http://kassa.rambler.ru

</string>

Добавление элементов

При добавлении элементов характерных для всех

типовых кинотеатров, мы добавляем их в основной

проект

При добавлении нетипичных элементов, мы

используем подмену фрагментов

@Override

public Place getPlace() {

Place customPlace = new Place();

customPlace.setId(52);

return customPlace;

}

Тестирование и отладка

Для unit тестирования используется Robolectric,

для UI - espresso

Для деплоя и аналитики используется fabric.io (ex

Crashlytics)

gradle assembleRelease

crashlyticsUploadDistributionRelease

ext.betaDistributionReleaseNotes=”Исправлено мигание превью.”

ext.betaDistributionEmails=“[email protected],

[email protected]"

ext.betaDistributionGroupAliases=”ramblerCinema”

Continuous Integration

Для CI используется Jenkins

Сервер автоматически скачивает код из репозитория по событиям

Собираются все проекты

Автотесты проходят для всех проектов

Собранные apk доступны для скачивания и более детального анализа.

Доступен анализ покрытия кода тестами и

успешности выполнения

Управление аккаунтами

Приложение выкладывается из под аккаунта предоставленного заказчиком

К данному аккаунту привязываются сторонние сервисы, предоставляется доступ к статистике.

Публикация в google play и app store также

происходит от лица заказчика.

Возможно использование Publishing API

https://developers.google.com/android-publisher/

Конверсия в приложениях

Отзывы пользователей

Спасибо за внимание! Смотрите кино!