SlideShare une entreprise Scribd logo
1  sur  38
Архитектура Android приложений
  Полезные и вредные советы

       Дмитрий Малыханов

        DataArt Solutions Inc.
Встречаем по одежке



• Современная платформа

• Простота использования

• Сотни тысяч приложений

• Удобные средства
  разработки
А надо ли провожать?




• Является ли Android мобильной
  платформой в традиционном понимании?

• Как нам быстрее разрабатывать
  качественные приложения?

• Можем ли мы свободно использовать
  знания других платформ/библиотек?
Традиционные мобильные
                 платформы

• Ограниченные ресурсы



• Упрощенный интерфейс


• Урезанные возможности
  программирования
Нет ограничений:
                    аппаратная часть

• 512 Mb RAM

• dual core CPU at 1Ghz

• Open GL ES 2.0

• аппаратная поддержка
  кодирования/декодирования multimedia

• 32Gb на внешнем носителе
Нет ограничений:
                  интерфейс




• Cенсорный (как
  правило, ёмкостный
  экран)

• Высокое разрешение (WVGA и выше)

• Множество аппаратных кнопок
Нет ограничений:
                  разработка


                          LD A,23
                          LD B,100
• Java 1.5, JIT           LD C,53
                          ADD A,B
• SQLite                  SUB C


• XML/JSON

• HttpClient
Что же общего?




Ёмкость аккумулятора конечна!

   Небходимо минимизировать нагрузку
(выполняемые действия) с целью экономного
          расходования энергии.
Архитектура платформы


"Официальная" диаграмма. Слишком универсально, чем
же это отличается от, например, JVM?




                                      ?
Законы архитектуры




1.Немедленный отклик на входящий звонок
2.Повторное использование компонентов
3.Тесная интеграция компонентов
Архитектура приложения




• Границы "приложения" размыты
• Как такового "приложения" нет
• Набор взаимодействующих компонент -
  "задача" (task).
Строим приложение: как?
Строим приложение:
повторное использование
Строим приложение:
повторное использование
Строим приложение:
повторное использование
Строим приложение:
повторное использование
Приложение: нити и
                  процессы

• Свободное использование нитей
  (threads)
• Свободное использование многих
  процессов
• Автоматическое разнесение компонентов
  по разным процессам

  Платформа обеспечивает управление
     процессами и межпроцессное
     взаимодействие компонентов.
Нити и процессы
Критерий: отзывчивость


Требование:
мгновенный ответ на
входящий звонок.

Вывод:
приложение должно
уметь моментально
уходить в фоновый
режим.
Android: MVC


MVC - это архитектурный шаблон.

Android не реализует какой-то конкретный framework.
Android, Real MVC: View


"Отвечает за отображение информации
(пользовательский интерфейс)."

android.view.*, android.widget.*
Android, Real MVC: Model


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

android.content.*, android.database.*
Android, Real MVC: Controller

"Интерпретирует данные, введённые пользователем, и
информирует модель и представление о необходимости
соответствующей реакции."

android.widget.*Adapter, android.widget.*:event callbacks
Правило №1


              Java




Минимум средние знания Java 1.5.
Правило №1: Java!


                     Java
            нет, не так, лучше вот так:



               Java
   Минимум средние знания Java 1.5.

Если знаний Java нет - хорошее приложение
           создать не удастся.
"Настоящая" Java -
                     "настоящий" код?

Далеко не все подходы (design patterns & best
practices) из JSE/JEE применимы.




Критерии оценки JEE приложения и Android
приложения в корне различаются.
Singleton


Шаблон Singleton: масса
широко известных
недостатков


    Платформа гарантирует наличие
    единственного экземпляра класса
      android.app.Application.
Data Access Object




1.Мы не можем реально использовать что-
  либо вместо SQLite
2.SQLite тесно итегрирован с другими
  компонетами платформы.
Value Object

Value Object (Data Transfer Object)
                 +
               EJB
                 =
 минимум накладных расходов на
 сериализацию/десериализацию
Все уже интегрировано




Все компоненты платформы Android созданы с
учетом их тесного взаимодействия и максимально
интегрированы друг с другом.
Безопасность: права
                         доступа

Интеграция имеет свои
недостатки.

Какое приложение имеет
больше шансов напугать
пользователя?
Права доступа: что же
                          сломано?




Платформа Android            Android Market не
поддерживает гибкое          поддерживает зависимости
управление permissions.      между приложениями.
Права доступа:
                     уменьшать!




• Не запрашивать больше, чем реально нужно
  для работы приложения.


• Не использовать третьесторонних библиотек,
  требующих дополнительных permissions.
Права доступа: разделять




• Выделить permissions, не критичные для
  основной функциональности приложения, и
  вынести их в отдельные модули (APK)
Права доступа: зависимости




Минус: Android Market не поддерживает
зависимости между приложениями.

Плюс: пользователи уже привыкли к такому
подходу, так как много приложений уже
используют его.
Разнообразие рынка




Совет от Google:

Не раздражайте пользователя, не заставляйте его искать
альтернативы Вашему приложению.
Архитектура Android приложений
  Полезные и вредные советы



          Вопросы?
Архитектура Android приложений
  Полезные и вредные советы

       Дмитрий Малыханов

        DataArt Solutions Inc.

Contenu connexe

Tendances

Свой проект на Drupal.org от идеи до первого релиза
Свой проект на Drupal.org от идеи до первого релизаСвой проект на Drupal.org от идеи до первого релиза
Свой проект на Drupal.org от идеи до первого релизаKonstantin Komelin
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesAliaksandr Ikhelis
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовSQALab
 
Эволюция управления зависимостями в коде
Эволюция управления зависимостями в кодеЭволюция управления зависимостями в коде
Эволюция управления зависимостями в кодеAlexander Byndyu
 
Komelin drupalconf report_komelin_v2
Komelin drupalconf report_komelin_v2Komelin drupalconf report_komelin_v2
Komelin drupalconf report_komelin_v2drupalconf
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllMykyta Hopkalo
 
Gradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidGradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidSQALab
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Инструменты разработки ПО в *nix
Инструменты разработки ПО в *nixИнструменты разработки ПО в *nix
Инструменты разработки ПО в *nixAlexander Gerasiov
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0AlexeyParhomenko
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаYandex
 
Introduction into Test Driven Development
Introduction into Test Driven DevelopmentIntroduction into Test Driven Development
Introduction into Test Driven DevelopmentIvan Dyachenko
 
C++ осень 2012 лекция 12
C++ осень 2012 лекция 12C++ осень 2012 лекция 12
C++ осень 2012 лекция 12Technopark
 
UI Kit and design developig workflow
UI Kit and design developig workflowUI Kit and design developig workflow
UI Kit and design developig workflowArtem Molokov
 

Tendances (20)

Свой проект на Drupal.org от идеи до первого релиза
Свой проект на Drupal.org от идеи до первого релизаСвой проект на Drupal.org от идеи до первого релиза
Свой проект на Drupal.org от идеи до первого релиза
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 
Эволюция управления зависимостями в коде
Эволюция управления зависимостями в кодеЭволюция управления зависимостями в коде
Эволюция управления зависимостями в коде
 
Komelin drupalconf report_komelin_v2
Komelin drupalconf report_komelin_v2Komelin drupalconf report_komelin_v2
Komelin drupalconf report_komelin_v2
 
Lecture 11 1
Lecture 11 1Lecture 11 1
Lecture 11 1
 
Lecture 11 1
Lecture 11 1Lecture 11 1
Lecture 11 1
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controll
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
 
Gradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidGradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для Android
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Инструменты разработки ПО в *nix
Инструменты разработки ПО в *nixИнструменты разработки ПО в *nix
Инструменты разработки ПО в *nix
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проекта
 
Refactoring
RefactoringRefactoring
Refactoring
 
Introduction into Test Driven Development
Introduction into Test Driven DevelopmentIntroduction into Test Driven Development
Introduction into Test Driven Development
 
лек11 1
лек11 1лек11 1
лек11 1
 
C++ осень 2012 лекция 12
C++ осень 2012 лекция 12C++ осень 2012 лекция 12
C++ осень 2012 лекция 12
 
Software Development
Software DevelopmentSoftware Development
Software Development
 
UI Kit and design developig workflow
UI Kit and design developig workflowUI Kit and design developig workflow
UI Kit and design developig workflow
 

En vedette

Андроид для чайников
Андроид для чайниковАндроид для чайников
Андроид для чайниковArseniy Finbeкg
 
Архитектура мобильных приложений - Тинькофф
Архитектура мобильных приложений - ТинькоффАрхитектура мобильных приложений - Тинькофф
Архитектура мобильных приложений - ТинькоффTatiana Smetanina
 
Клиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхКлиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхKirill Zotin
 
Android презентация
Android презентацияAndroid презентация
Android презентацияstaille
 
{HSE Inc} Разработка под Android
{HSE Inc} Разработка под Android{HSE Inc} Разработка под Android
{HSE Inc} Разработка под AndroidPavel Krivoruchko
 
JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!Alexey Fyodorov
 
Pragmatic functional refactoring with java 8 (1)
Pragmatic functional refactoring with java 8 (1)Pragmatic functional refactoring with java 8 (1)
Pragmatic functional refactoring with java 8 (1)RichardWarburton
 
Разработка приложений для android
Разработка приложений для androidРазработка приложений для android
Разработка приложений для androidInfoShell
 
мифы о спарке
мифы о спарке мифы о спарке
мифы о спарке Evgeny Borisov
 
Java EE 7: Developing for the Cloud at Geecon, JEEConf, Johannesburg
Java EE 7: Developing for the Cloud at Geecon, JEEConf, JohannesburgJava EE 7: Developing for the Cloud at Geecon, JEEConf, Johannesburg
Java EE 7: Developing for the Cloud at Geecon, JEEConf, JohannesburgArun Gupta
 
Scalable Java Application Development on AWS
Scalable Java Application Development on AWSScalable Java Application Development on AWS
Scalable Java Application Development on AWSMikalai Alimenkou
 
Advanced messaging with Apache ActiveMQ
Advanced messaging with Apache ActiveMQAdvanced messaging with Apache ActiveMQ
Advanced messaging with Apache ActiveMQdejanb
 

En vedette (13)

Андроид для чайников
Андроид для чайниковАндроид для чайников
Андроид для чайников
 
Архитектура мобильных приложений - Тинькофф
Архитектура мобильных приложений - ТинькоффАрхитектура мобильных приложений - Тинькофф
Архитектура мобильных приложений - Тинькофф
 
Клиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхКлиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталях
 
Android презентация
Android презентацияAndroid презентация
Android презентация
 
{HSE Inc} Разработка под Android
{HSE Inc} Разработка под Android{HSE Inc} Разработка под Android
{HSE Inc} Разработка под Android
 
JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!
 
Pragmatic functional refactoring with java 8 (1)
Pragmatic functional refactoring with java 8 (1)Pragmatic functional refactoring with java 8 (1)
Pragmatic functional refactoring with java 8 (1)
 
Разработка приложений для android
Разработка приложений для androidРазработка приложений для android
Разработка приложений для android
 
мифы о спарке
мифы о спарке мифы о спарке
мифы о спарке
 
Java EE 7: Developing for the Cloud at Geecon, JEEConf, Johannesburg
Java EE 7: Developing for the Cloud at Geecon, JEEConf, JohannesburgJava EE 7: Developing for the Cloud at Geecon, JEEConf, Johannesburg
Java EE 7: Developing for the Cloud at Geecon, JEEConf, Johannesburg
 
Karumi Dojo: Kata Maxibon
Karumi Dojo: Kata MaxibonKarumi Dojo: Kata Maxibon
Karumi Dojo: Kata Maxibon
 
Scalable Java Application Development on AWS
Scalable Java Application Development on AWSScalable Java Application Development on AWS
Scalable Java Application Development on AWS
 
Advanced messaging with Apache ActiveMQ
Advanced messaging with Apache ActiveMQAdvanced messaging with Apache ActiveMQ
Advanced messaging with Apache ActiveMQ
 

Similaire à JEE Conf: Архитектура Android приложений: полезные и вредные советы

SOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаSOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаPavel Treshnikov
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработкиIT-Доминанта
 
Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)Алексей Панфилов
 
Gradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidGradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidAnton Rutkevich
 
Преимущества создания кроссплатформенных приложений с использованием Phone ga...
Преимущества создания кроссплатформенных приложений с использованием Phone ga...Преимущества создания кроссплатформенных приложений с использованием Phone ga...
Преимущества создания кроссплатформенных приложений с использованием Phone ga...geekfamilyrussia
 
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindingsSelenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindingsCOMAQA.BY
 
Автоматизированное тестирование мобильных приложений
Автоматизированное тестирование мобильных приложенийАвтоматизированное тестирование мобильных приложений
Автоматизированное тестирование мобильных приложенийТранслируем.бел
 
CodeFest 2011. Андреев C. — Эффективные методики автоматизированного тестиров...
CodeFest 2011. Андреев C. — Эффективные методики автоматизированного тестиров...CodeFest 2011. Андреев C. — Эффективные методики автоматизированного тестиров...
CodeFest 2011. Андреев C. — Эффективные методики автоматизированного тестиров...CodeFest
 
Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...
Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...
Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...solit
 
Ценность платформы Octopod для разработчиков мобильных приложений
Ценность платформы Octopod для разработчиков мобильных приложенийЦенность платформы Octopod для разработчиков мобильных приложений
Ценность платформы Octopod для разработчиков мобильных приложенийMichael Kozloff
 
Тестирование мобильных приложений
Тестирование мобильных приложенийТестирование мобильных приложений
Тестирование мобильных приложенийAlexander Khozya
 
Кроссплатформенная разработка
Кроссплатформенная разработкаКроссплатформенная разработка
Кроссплатформенная разработкаValery
 
Presentation JavaME
Presentation JavaMEPresentation JavaME
Presentation JavaMEscassau
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
Аналитика мобильных приложений
Аналитика мобильных приложенийАналитика мобильных приложений
Аналитика мобильных приложенийAnatoly Sharifulin
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIMoscowJS
 
Tool View Interface of Integrated Development Environment / Исследование инте...
Tool View Interface of Integrated Development Environment / Исследование инте...Tool View Interface of Integrated Development Environment / Исследование инте...
Tool View Interface of Integrated Development Environment / Исследование инте...Ivan Ruchkin
 
методология Rad (46)
методология Rad (46)методология Rad (46)
методология Rad (46)romachka_pole
 

Similaire à JEE Conf: Архитектура Android приложений: полезные и вредные советы (20)

SOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаSOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайна
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
 
Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)
 
Gradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidGradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для Android
 
Преимущества создания кроссплатформенных приложений с использованием Phone ga...
Преимущества создания кроссплатформенных приложений с использованием Phone ga...Преимущества создания кроссплатформенных приложений с использованием Phone ga...
Преимущества создания кроссплатформенных приложений с использованием Phone ga...
 
Appery.io Ukraine_2016
Appery.io Ukraine_2016Appery.io Ukraine_2016
Appery.io Ukraine_2016
 
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindingsSelenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
 
Автоматизированное тестирование мобильных приложений
Автоматизированное тестирование мобильных приложенийАвтоматизированное тестирование мобильных приложений
Автоматизированное тестирование мобильных приложений
 
CodeFest 2011. Андреев C. — Эффективные методики автоматизированного тестиров...
CodeFest 2011. Андреев C. — Эффективные методики автоматизированного тестиров...CodeFest 2011. Андреев C. — Эффективные методики автоматизированного тестиров...
CodeFest 2011. Андреев C. — Эффективные методики автоматизированного тестиров...
 
Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...
Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...
Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...
 
Ценность платформы Octopod для разработчиков мобильных приложений
Ценность платформы Octopod для разработчиков мобильных приложенийЦенность платформы Octopod для разработчиков мобильных приложений
Ценность платформы Octopod для разработчиков мобильных приложений
 
Тестирование мобильных приложений
Тестирование мобильных приложенийТестирование мобильных приложений
Тестирование мобильных приложений
 
Кроссплатформенная разработка
Кроссплатформенная разработкаКроссплатформенная разработка
Кроссплатформенная разработка
 
Presentation JavaME
Presentation JavaMEPresentation JavaME
Presentation JavaME
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Аналитика мобильных приложений
Аналитика мобильных приложенийАналитика мобильных приложений
Аналитика мобильных приложений
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public API
 
Tool View Interface of Integrated Development Environment / Исследование инте...
Tool View Interface of Integrated Development Environment / Исследование инте...Tool View Interface of Integrated Development Environment / Исследование инте...
Tool View Interface of Integrated Development Environment / Исследование инте...
 
методология Rad (46)
методология Rad (46)методология Rad (46)
методология Rad (46)
 

JEE Conf: Архитектура Android приложений: полезные и вредные советы