SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
Конвейерное производство
приложений.
Архитектура и инструменты
Мельников Андрей
Rambler&Co
an.melnikov@rambler-co.ru
andrey7melnikov@gmail.com
Постановка задачи
Варианты реализация
 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">
web.support@bolshoikino.ru
</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=“betaUser@ramble-co.ru,
betaUser2@rambler-co.ru"
 ext.betaDistributionGroupAliases=”ramblerCinema”
Continuous Integration
 Для CI используется Jenkins
 Сервер автоматически скачивает код из
репозитория по событиям
 Собираются все проекты
 Автотесты проходят для всех проектов
 Собранные apk доступны для скачивания и более
детального анализа.
 Доступен анализ покрытия кода тестами и
успешности выполнения
Управление аккаунтами
 Приложение выкладывается из под аккаунта
предоставленного заказчиком
 К данному аккаунту привязываются сторонние
сервисы, предоставляется доступ к статистике.
 Публикация в google play и app store также
происходит от лица заказчика.
 Возможно использование Publishing API
https://developers.google.com/android-publisher/
Конверсия в приложениях
Отзывы пользователей
Спасибо за внимание!
Смотрите кино!

Weitere ähnliche Inhalte

Was ist angesagt? (8)

Raschet
RaschetRaschet
Raschet
 
Отладка веб-приложений на Javascript
Отладка веб-приложений на JavascriptОтладка веб-приложений на Javascript
Отладка веб-приложений на Javascript
 
создание живых сайтов
создание живых сайтовсоздание живых сайтов
создание живых сайтов
 
Дополнительные приёмы работы в DOM
Дополнительные приёмы работы в DOMДополнительные приёмы работы в DOM
Дополнительные приёмы работы в DOM
 
Тестовое задание для веб-программиста
Тестовое задание для веб-программистаТестовое задание для веб-программиста
Тестовое задание для веб-программиста
 
Drupal и возможности его применения
Drupal и возможности его примененияDrupal и возможности его применения
Drupal и возможности его применения
 
RequireJS і Magento 2
RequireJS і Magento 2RequireJS і Magento 2
RequireJS і Magento 2
 
Ubercart7 Dynamic properties ru
Ubercart7 Dynamic properties ruUbercart7 Dynamic properties ru
Ubercart7 Dynamic properties ru
 

Andere mochten auch

JULIANA_BACCHUS_RESUME 2015
JULIANA_BACCHUS_RESUME 2015JULIANA_BACCHUS_RESUME 2015
JULIANA_BACCHUS_RESUME 2015
Juliana Bacchus
 
Google Plus SignIn : l'Authentification Google
Google Plus SignIn : l'Authentification GoogleGoogle Plus SignIn : l'Authentification Google
Google Plus SignIn : l'Authentification Google
Mathias Seguy
 
Reklamok Ertelmezese felkeszules a vizsgara
Reklamok Ertelmezese felkeszules a vizsgaraReklamok Ertelmezese felkeszules a vizsgara
Reklamok Ertelmezese felkeszules a vizsgara
Zoltan Havasi
 

Andere mochten auch (16)

Economical Sodium Ion Concentration Meter by ACMAS Technologies Pvt Ltd.
Economical Sodium Ion Concentration Meter by ACMAS Technologies Pvt Ltd.Economical Sodium Ion Concentration Meter by ACMAS Technologies Pvt Ltd.
Economical Sodium Ion Concentration Meter by ACMAS Technologies Pvt Ltd.
 
JULIANA_BACCHUS_RESUME 2015
JULIANA_BACCHUS_RESUME 2015JULIANA_BACCHUS_RESUME 2015
JULIANA_BACCHUS_RESUME 2015
 
Resume_RajeeshunArudchelvam_ver2
Resume_RajeeshunArudchelvam_ver2Resume_RajeeshunArudchelvam_ver2
Resume_RajeeshunArudchelvam_ver2
 
Presentation
PresentationPresentation
Presentation
 
Reklamok Ertelmezese 2
Reklamok Ertelmezese 2Reklamok Ertelmezese 2
Reklamok Ertelmezese 2
 
Seismic performance of a rc frame with soft storey criteria
Seismic performance of a rc frame with soft storey criteriaSeismic performance of a rc frame with soft storey criteria
Seismic performance of a rc frame with soft storey criteria
 
基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid
 
Lambdas and Generics (long version) - Bordeaux/Toulouse JUG
Lambdas and Generics (long version) - Bordeaux/Toulouse JUGLambdas and Generics (long version) - Bordeaux/Toulouse JUG
Lambdas and Generics (long version) - Bordeaux/Toulouse JUG
 
Animate me, If you don't do it for me do it for Chet :)
Animate me, If you don't do it for me do it for Chet :)Animate me, If you don't do it for me do it for Chet :)
Animate me, If you don't do it for me do it for Chet :)
 
Google Plus SignIn : l'Authentification Google
Google Plus SignIn : l'Authentification GoogleGoogle Plus SignIn : l'Authentification Google
Google Plus SignIn : l'Authentification Google
 
Reklamok Ertelmezese felkeszules a vizsgara
Reklamok Ertelmezese felkeszules a vizsgaraReklamok Ertelmezese felkeszules a vizsgara
Reklamok Ertelmezese felkeszules a vizsgara
 
Lec.6 strength design method rectangular sections 2
Lec.6   strength design method rectangular sections  2Lec.6   strength design method rectangular sections  2
Lec.6 strength design method rectangular sections 2
 
Vernacular Architecture of Central india
Vernacular Architecture of Central indiaVernacular Architecture of Central india
Vernacular Architecture of Central india
 
Why Visual Content is Key for Oil & Gas Communications - Bill Roth [Energy Di...
Why Visual Content is Key for Oil & Gas Communications - Bill Roth [Energy Di...Why Visual Content is Key for Oil & Gas Communications - Bill Roth [Energy Di...
Why Visual Content is Key for Oil & Gas Communications - Bill Roth [Energy Di...
 
Brands & Publishers: A Symbiotic Relationship for the Digital Age - Stacy Mar...
Brands & Publishers: A Symbiotic Relationship for the Digital Age - Stacy Mar...Brands & Publishers: A Symbiotic Relationship for the Digital Age - Stacy Mar...
Brands & Publishers: A Symbiotic Relationship for the Digital Age - Stacy Mar...
 
Personal Branding: Career Management Strategies - Chris Westfall [Energy Digi...
Personal Branding: Career Management Strategies - Chris Westfall [Energy Digi...Personal Branding: Career Management Strategies - Chris Westfall [Energy Digi...
Personal Branding: Career Management Strategies - Chris Westfall [Energy Digi...
 

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

Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью GradleЛюбовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
GeeksLab Odessa
 
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
rit2011
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf Conference
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
Serghei Urban
 

Ähnlich wie Конвейерное производство приложений (20)

Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью GradleЛюбовь Поволоцкая_Сборка Android-приложений с помощью Gradle
Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
 
Описание и архитектура TFS 2008
Описание и архитектура TFS 2008Описание и архитектура TFS 2008
Описание и архитектура TFS 2008
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
презетация Visual basic
презетация Visual basicпрезетация Visual basic
презетация Visual basic
 
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеВладимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
 
Tfs Overview And Architecture (www.cmcons.com)
Tfs Overview And Architecture (www.cmcons.com)Tfs Overview And Architecture (www.cmcons.com)
Tfs Overview And Architecture (www.cmcons.com)
 
Google I/O 2016 для разработчиков
Google I/O 2016 для разработчиковGoogle I/O 2016 для разработчиков
Google I/O 2016 для разработчиков
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
 
SQL Server Denali
SQL Server DenaliSQL Server Denali
SQL Server Denali
 
Инсталляционные профили, создание сборок
Инсталляционные профили, создание сборокИнсталляционные профили, создание сборок
Инсталляционные профили, создание сборок
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки
 
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
 
Share Point Workflow
Share Point WorkflowShare Point Workflow
Share Point Workflow
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
 
Фичи н-н-нада? Или почему стоит использовать модуль Features.
Фичи н-н-нада? Или почему стоит использовать модуль Features.Фичи н-н-нада? Или почему стоит использовать модуль Features.
Фичи н-н-нада? Или почему стоит использовать модуль Features.
 
Автоматизация тестирования iOS приложений: от идеи к готовому решению
Автоматизация тестирования iOS приложений: от идеи к готовому решениюАвтоматизация тестирования iOS приложений: от идеи к готовому решению
Автоматизация тестирования iOS приложений: от идеи к готовому решению
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
 
Обзор и архитектура MS Visual Studio Team System 2008
Обзор и архитектура MS Visual Studio Team System 2008Обзор и архитектура MS Visual Studio Team System 2008
Обзор и архитектура MS Visual Studio Team System 2008
 

Mehr von Rambler Android

Mehr von Rambler Android (8)

Разбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayoutРазбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayout
 
Как мы измеряем наши проекты
Как мы измеряем наши проектыКак мы измеряем наши проекты
Как мы измеряем наши проекты
 
Feature-toggles
Feature-togglesFeature-toggles
Feature-toggles
 
Тестируемая RxJava
Тестируемая RxJavaТестируемая RxJava
Тестируемая RxJava
 
Vector Drawable API. Возможности применения
Vector Drawable API. Возможности примененияVector Drawable API. Возможности применения
Vector Drawable API. Возможности применения
 
Android M: опыт личного знакомства
Android M: опыт личного знакомстваAndroid M: опыт личного знакомства
Android M: опыт личного знакомства
 
Google Identity Platform
Google Identity PlatformGoogle Identity Platform
Google Identity Platform
 
Революционный Android. Ищем замену фрагментам
Революционный Android. Ищем замену фрагментамРеволюционный Android. Ищем замену фрагментам
Революционный Android. Ищем замену фрагментам
 

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

  • 1. Конвейерное производство приложений. Архитектура и инструменты Мельников Андрей Rambler&Co an.melnikov@rambler-co.ru andrey7melnikov@gmail.com
  • 3. Варианты реализация  Product flavors - нескольких версий  buildTypes – настройки отдельных параметров и ключей  Android library – выделение основной версии в библиотеку
  • 4. Flavors  productFlavors { kassa35mm { applicationId "ru.rambler.kassa35mm" versionName "2.0" } kassabel { applicationId "ru.rambler.kassabel" versionName "2.2" versionCode 9 } }
  • 5. Flavors  Отдельные ресурсы  Отдельный код  Отсутствие возможности проверки корректности других веток  Легкая сборка  buildConfigField "boolean", "SUPPORT_FONTS", "true"
  • 6. BuildTypes  Несколько видов сборки  Настройки для тестирования  Подмена ключей
  • 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(); } }
  • 11. Архитектура Основные компоненты:  MainFactory – фабрика основных сущностей  UIManager – тонкая настройка view элементов  FragmentManager – фабрика фрагментов
  • 12. Архитектура Работа с фрагментами: KassaFragmentManager: … @Override public Fragment getOneCinemaFragment() { return new CustomInfoFragment(); }
  • 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/