Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

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

367 visualizaciones

Publicado el

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

Publicado en: Software
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

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

  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. Спасибо за внимание! Смотрите кино!

×