Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

369 views

Published on

Rambler.Android #3: Конвейерное производство приложений (Мельников Андрей)

Published in: Software
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Конвейерное производство приложений. Архитектура и инструменты Мельников Андрей Rambler&Co an.melnikov@rambler-co.ru andrey7melnikov@gmail.com
  2. 2. Постановка задачи
  3. 3. Варианты реализация  Product flavors - нескольких версий  buildTypes – настройки отдельных параметров и ключей  Android library – выделение основной версии в библиотеку
  4. 4. Flavors  productFlavors { kassa35mm { applicationId "ru.rambler.kassa35mm" versionName "2.0" } kassabel { applicationId "ru.rambler.kassabel" versionName "2.2" versionCode 9 } }
  5. 5. Flavors  Отдельные ресурсы  Отдельный код  Отсутствие возможности проверки корректности других веток  Легкая сборка  buildConfigField "boolean", "SUPPORT_FONTS", "true"
  6. 6. BuildTypes  Несколько видов сборки  Настройки для тестирования  Подмена ключей
  7. 7. Архитектура  «Проект заготовка»  Многоуровневая архитектура, версии для менеджеров и теста flavors.  Специальные версии для отладки пушей и оплаты
  8. 8. Архитектура  Вся настройка с помощью главной фабрики public class KassaApp extends Application { public void onCreate() { … } protected MainFactory createMainFactory() { return new MainFactory(); } }
  9. 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. 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. 11. Архитектура Основные компоненты:  MainFactory – фабрика основных сущностей  UIManager – тонкая настройка view элементов  FragmentManager – фабрика фрагментов
  12. 12. Архитектура Работа с фрагментами: KassaFragmentManager: … @Override public Fragment getOneCinemaFragment() { return new CustomInfoFragment(); }
  13. 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. 14. Получение дизайна  Дизайн создается по аналогии с основной версий. Все элементы поставляются в таком же формате.  Для цветовых настроек выделяется отдельный файл colors.xml: <color name="kassa_delimiter">#bbe2f9</color>
  15. 15. Настройка ресурсов Информация относительно кинотеатра хранится в отдельном файле : <string name="support_custom_email"> web.support@bolshoikino.ru </string> <string name="app_name"> КиносетьЧарли </string>
  16. 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(); }
  17. 17. Пример меню
  18. 18. Добавление webView  За работу с webView отвечает отдельный фрагмент.  Подменяем ссылку: private String getUrl();  <string name="custom_url_news"> http://kassa.rambler.ru </string>
  19. 19. Добавление элементов  При добавлении элементов характерных для всех типовых кинотеатров, мы добавляем их в основной проект  При добавлении нетипичных элементов, мы используем подмену фрагментов  @Override public Place getPlace() { Place customPlace = new Place(); customPlace.setId(52); … return customPlace; }
  20. 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. 21. Continuous Integration  Для CI используется Jenkins  Сервер автоматически скачивает код из репозитория по событиям  Собираются все проекты  Автотесты проходят для всех проектов  Собранные apk доступны для скачивания и более детального анализа.  Доступен анализ покрытия кода тестами и успешности выполнения
  22. 22. Управление аккаунтами  Приложение выкладывается из под аккаунта предоставленного заказчиком  К данному аккаунту привязываются сторонние сервисы, предоставляется доступ к статистике.  Публикация в google play и app store также происходит от лица заказчика.  Возможно использование Publishing API https://developers.google.com/android-publisher/
  23. 23. Конверсия в приложениях
  24. 24. Отзывы пользователей
  25. 25. Спасибо за внимание! Смотрите кино!

×