Android Tips and Tricks

    В данном материале можно будет увидеть различные инструменты и подсказки, которые здорово облегчают жизнь Android разработчикам. Большая часть собрана напрямую от знакомых разработчиков и содержит вещи, которые должен знать каждый. Дополнения и расширения приветствуются, и если вы знаете о каком-то крутом механизме, который не был упомянут в статье, не поленитесь перейти в оригинал и открыть pull request.

    Знай свои инструменты


    Android Studio


    Не забывайте использовать шорткаты


    Описание Mac Linux/Win
    Быстрый поиск по настройкам, действиям в IDE Cmd+Shift+A Ctrl+Shift+A
    Переопределить метод родительского класса Cmd+O Ctrl+O
    Поиск файла по имени Cmd+Shift+O Ctrl+Shift+N
    Список недавно редактируемых файлов Cmd+Shift+E Ctrl+Shift+E
    Список недавно открытых файлов Cmd+E Ctrl+E
    Последний редактируемый файл Cmd+Shift+Backspace Ctrl+Shift+Backspace
    Найти все места, где используется метод / переменная Opt+F7 Alt+F7
    Как предыдущий пункт, только во всплывающем окне Cmd+Opt+F7 Ctrl+Alt+F7
    Приведение кода в соответствие code style Cmd+Opt+L Ctrl+Alt+L
    Окружить блок кода конструкцией(if, else, try) Opt+Cmd+T Alt+Ctrl+T
    Открыть терминал Opt+F12 Alt+F12
    Сгенерировать Setter/Getters/ Cmd+N Alt+Ins
    Поиска класса по имени CMD+O Ctrl+N
    Рефакторинг имени Shift+F6 Shift+F6
    Быстрое исправление Opt+Enter Alt+Enter
    Перейти к объявлению переменной, класса, метода Cmd+B Ctrl+B
    Показать список параметров для метода Cmd+P Ctrl+P
    Меню рефакторинга Ctrl+T Ctrl+Alt+Shift+T
    Убить процесс Cmd+F2 Ctrl+F2
    Поиск по всему проекту Shift+Shift Shift+Shift
    Удалить строку Cmd+Backspace Ctrl+Y
    Продублировать строку Cmd+D Ctrl+D
    Расширить/Уменьшить выделенное Opt+Up/Down Arrow key Shift +Ctrl+W
    Многострочное выделение Ctrl+G Alt+J
    Полный список шорткатов MacOSX Linux/Win

    Используйте плагины для повышения эффективности


    1. KeyPromoter
      Этот плагин заставит вас страдать, показывая большой уродливый попап с комбинацией клавиш, которую следовало бы использовать вместо нажатия на кнопку в IDE. Через какое-то время вы уже на автомате будете использовать шорткаты, лишь бы не видеть этот ужасный попап.

    2. String Manipulation
      Упрощает работу со строками, позволяет cортировать, переводить в другие кодировки, убирать дубликаты, триммить текст и ещё многое другое.

    3. Lines Sorter
      Добавляет иконку в меню для сортировки выбранных строк или целого файла, если ничего не выбрано.

    4. Findbugs
      Статический анализатор байткода для поиска багов в Java коде c помощью Android Studio.

    5. Sonar Lint
      Плагин, который в рантайме показывает информацию о новых багах и нарушениях качества кода на Java, JavaScript и PHP.

    6. Checkstyle
      Плагин, который сканирует Java файлы с помощью Android Studio и проверяет их на соответствие настройкам. Может быть интегрирован в вашу систему сборки, чтобы запрещать сборки с нарушениями.

    7. ADB Idea
      Плагин, который добавляет ADB команды (установка и удаление приложения, перезапуск приложения и тд.) в Android Studio и Intellij.

    Используйте Live Templates при разработке в Android Studio


    Template Описание
    newInstance Генерирует статический метод `newInstance` внутри Фрагмента
    Toast Генерирует Toast.makeText(context, "", Toast.LENGTH_SHORT).show();
    fbc findViewById с кастом к нужном типу View
    const Определить константу типа int
    logd Генерирует Log.d(TAG, "");
    logm Вынести в лог текущее имя метода и его аргументы.
    logr Вынести в лог результат текущего метода
    logt Статическая строка TAG для лога, с текущим именем класса
    psf public static final
    sout Печатает строку в System.out
    soutm Печатает имя класса и имя метода в System.out
    soutp Печатает аргументы и значения метода в System.out
    visible Установить видимость View к VISIBLE
    gone Установить видимость View GONE
    noInstance Приватный конструктор без аргументов, чтобы запретить создание сущностей

    Полный список Live Templates в Android Studio

    Постфиксное автодополнение кода в Android Studio


    В Android Studio/IntelliJ есть специальный механизм дополнения кода, который позволяет применить конструкцию к определённой переменной.
    Template Описание
    <expr>.null
    сгенерирует проверку на null if(<expr> == null)
    <expr>.notnull
    сгенерирует проверку на не null if(<expr> != null)
    <expr>.var
    создаст локальную переменную T name = <expr>
    <expr>.field
    создаст глобальное поле в классе field = <expr>
    <ArrayExpr>.for
    превратится в for(T item : <Arrayexpr>)
    <ArrayExpr>.fori
    превратится в for(int i = 0; i < <Arrayexpr>.length; i++)
    <ArrayExpr>.forr
    превратится в for(int i = <Arrayexpr>.length - 1; i => 0 ; i--)

    Полный список доступных постфиксных дополнений кода вы можете найти в Settings → Editor → Postfix Templates

    Используйте тему Darcula в Android Studio


    Да, я осознаю, что это больше вопрос предпочтений. Однако поверьте мне, что использование тёмной темы сократит нагрузка на ваши глаза.

    Не используйте неудобный/мелкий шрифт


    По возможности старайтесь использовать такой шрифт, который удобно читать и не доставляет дискомфорта для ваших глаз. Я использую Menlo font.

    Используйте codestyle


    Вам следует использовать стандартный codestyle. Для примера посмотрите на AOSP Codestyle или Square IntelliJ Codestyle

    Используйте Встроенный терминал в Android Studio


    Используйте Memory/Network/CPU мониторинги в Android Studio для профилирования вашего приложения



    Эмулятор


    Кроме использования реальных девайсов, вы также должны использовать эмуляторы ввиду простоты их настройки и использования. Также вы можете легко настраивать на них разрешение и версию API для тестирования. Genymotion, Intel эмулятора поставляемый вместе с SDK

    Vysor


    Это очень полезный инструмент, достойный отдельного упоминания. По сути, он позволяет стримить содержимое физического Android устройства на экран ноутбука. Очень удобно, когда вам нужно продемонстрировать демо вашего приложения на презентации. Мы можем взаимодействовать с реальным устройством, и всё это будет представлено прямо на экране ноутбука. Есть бесплатная и платная версии, и платная определённо стоит того, чтобы её купить.

    DeskDock


    Если вам необходимо манипулировать физическим Android устройством (используя клавиатуру и мышь), то это приложение замечательно с этим справится. Позволяет вам управлять вашим Android устройством, как если бы это была часть рабочего стола компьютера. Бесплатная версия позволяет использовать мышь, Платная версия позволяет использовать клавиатуру и другие возможности. С этим приложением можно тестировать приложение, не отрывая рук от клавиатуры ноутбука.

    Выбирайте лучшие инструменты при написании кода


    1. Используйте OkHttp вместо HttpUrlConnect.

      HttpUrlConnect содержит определённое число багов. Okhttp довольно красиво решили их. Анонс Okhttp.
    2. Ссылайтесь на локальные `aar` файлы следующим образом.

      dependencies {
          compile(name:'nameOfYourAARFileWithoutExtension', ext:'aar')
      }
      repositories {
          flatDir {
              dirs 'libs'
          }
      }

    3. Используйте Pidcat для более удобной работы с логами
    4. Используйте Систему Контроля Версий (VCS), предпочтительно git
    5. Используйте ClassyShark
      Специальная программа для Android разработчиков, с помощью которой позволяет анализировать файлы типа .apk, .jar, .class, .dex, .aar, .so. Может показать информацию о полях и методах класса, зависимостях .apk, количество методов, используемых приложением и тд.
    6. Используйте Stetho
      Позволяет дебажить ваши приложения используя Chrome Dev Tools. Включает в себя мониторинг сети (Network Monitor), отображение Shared Preferences.
    7. Используйте Battery Historian
      Программа для анализа расхода батареи
    8. При использовании зависимостей всегда используйте константы. К примеру «24.2.0»
      Избегайте использования ‘+’ для указания версий используемых библиотек.
      Это позволит вам избежать неожиданных багов или проблем со сборкой, если в новой версии изменится API. А также не придётся при сборке каждый раз открывать интернет-соединение для проверки последней актуальной версии зависимой библиотеки.
    9. Используйте Handler вместо TimerTask
    10. Не используйте ваш личный персональный email для публикации приложений
    11. Используйте векторы вместо PNG
      Если у вас всё-таки есть png, сожмите их. Изучите [TinyPNG](https://tinypng.com) для этого.
    12. Используйте proguard

      android {
          ...
          buildTypes {
              release {
                  minifyEnabled true
                  proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
              }
          }
      }
      

    13. Используйте shrinkResources

      android {
          ...
          buildTypes {
              release {
                  shrinkResources true
                  minifyEnabled true
                  ...
              }
          }
      }

    14. Для симуляции убийства системой вашего приложения в бэкграунде, выполните в терминале

      adb shell am kill

    15. Изучите настройки для ускорения сборки gradle

      Gradle memory >= Dex memory + 1Gb

    16. Разделяйте ваш .apk с помощью gradle, когда вы используете нативный код. Не смешивайте всё вместе, потому что потом будете страдать, разбираясь в исходниках.

      defaultConfig {
            ...
        
            ndk {
              abiFilters "armeabi", "armeabi-v7a", "mips", "x86"
            }
          }
        
        //Split into platform dependent APK
          splits {
            abi {
              enable true
              reset()
              include 'armeabi', 'armeabi-v7a', 'mips', 'x86' //select ABIs to build APKs for
              universalApk false //generate an additional APK that contains all the ABIs
            }
          }
        
          // map for the version code
          project.ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'mips': 5, 'x86': 8]
        
          // Rename with proper versioning
          android.applicationVariants.all { variant ->
            // assign different version code for each output
            variant.outputs.each { output ->
              output.versionCodeOverride =
                  project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) *
                      1000000 +
                      android.defaultConfig.versionCode
            }
        }
      

    17. Изучайте построение архитектуры приложения, например MVP или Clean Architecture
    18. Постарайтесь понять и использовать TDD принцип (Test Driven Development)
    19. Заставить gradle перезагрузить кешированные зависимости

      ./gradlew --refresh-dependencies

    20. Исключить gradle таску при сборке. Предположим вы хотите исключить задачу ‘javaDoc’, в таком случае используйте ‘-x’ опцию и имя таски, в данном примере ‘javaDoc’

      ./gradlew clean build -x javaDoc

    21. Больше различных gradle трюков
    22. Следуйте DRY(Do not Repeat Yourself) принципу
    23. Разделяйте пакеты по фичам, а не по слоям
    24. Научитесь решать конфликты зависимостей
      Учитывая скорость разработки android библиотек и их обновлений, в какой-то момент вы встретитесь с конфликтом зависимостей в вашем приложении. Gradle позволяет решать эти проблемы официальная документация
    25. Используйте различное имя пакета для дебаг сборок

      android {
          buildTypes {
              debug {
                  applicationIdSuffix '.debug'
                  versionNameSuffix '-DEBUG'
              }
      
              release {
                  // ...
              }
          }
      }

    26. Проверьте наличие и устраните утечки памяти в вашем android приложении
    27. Используйте стандартное наименование для ваших ресурсов
    28. Начните сами писать gradle таски
      Android использует Gradle как систему сборок, что позволяет упростить множество вещей и написать свои таски для автоматизации. Пост на reddit, который содержит множество полезных gradle скриптов.
    29. Используйте подходящий .gitignore в ваших Android проектах, например, этот
    30. Используйте LeakCanary чтобы обнаруживать утечки памяти в вашем приложении
    31. Ускорьте gradle сборку в Android Studio 2.2+
      — Перейдите на gradle версии 3.1.

      Выполните следующую команду в директории вашего проекта для обновления gradle wrapper.

      ./gradlew wrapper --gradle-version 3.1

      — Установите опции сборки в глобальном в `gradle.properties` файле

      android.enableBuildCache=true

    32. Остановить процесс сборки приложения с помощью gradle

      ./gradlew -stop

    33. Настройте gradle для автоматической загрузки отсутствующих компонентов android sdk.
      Установить следующую опцию в глобальном gradle.properties файле.

      android.builder.sdkDownload=true

      Это экспериментальная опция, и она загружает только build tools и platforms, но не обновляет Google или Support Repository
    34. Не подключайте одновременно jcenter() и mavenCentral() в вашем build.gradle файле, потому что
      JCenter включает в себя MavenCentral.
    35. Почистите gradle кэш, если вы думаете, что поставляемые support и google play services библиотеки в android sdk несовместимы.
      Перейдите в директорию ~/.gradle/caches/ и удалите всё содержимое в папке cache.
      Откройте SDK Manager и заново синхронизируйте все саппортные библиотеки и google play services.
      Далее обновите gradle зависимости в проекте.
      Теперь всё должно находиться в нормальном состоянии и работать корректно.
    36. Настройте удобные `adb` алиасы для вашего терминала.
      Добавьте следующие команды к вашему ~/.bashrc или ~/.zshrc файлу, сохраните и перезапустите терминал. После этого можете использовать как показано в столбце Использование.
      Алиас Использование
      alias screenshot="adb exec-out screencap -p > screen-$(date -j "+%s").png"
      screenshot
      alias startintent="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X shell am start $1"
      startintent https://twitter.com/nisrulz
      alias apkinstall="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X install -r $1"
      apkinstall ~/Desktop/DemoApp.apk
      alias rmapp="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X uninstall $1"
      rmapp com.example.demoapp
      alias clearapp="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X shell pm clear $1"
      clearapp com.example.demoapp

    37. Настройте Android Studio падать при сборке, если код содержит //STOPSHIP.
      Чтобы включить в lint проверку на //STOPSHIP, добавьте в ваш `build.gradle`

      android {
        ...
            lintOptions {
                abortOnError true
                fatal 'StopShip'
            }
      }

      Если у вас есть //STOPSHIP комментарий в коде, релизная сборка не соберётся. Кроме этого, вы также можете включить в Android Studio подсветку таких комментариев (по умолчанию выключено). Preferences → Editor → Code Style → Inspections. Ищите в поиске STOPSHIP и устанавливайте флажок для подсветки.
    38. Используйте `adb install -g`, чтобы предоставить все разрешения перечисленные в манифесте.
    39. Используйте Alfi для поиска библиотек по имени. Вам будет сразу предложена строка для включения в gradle скрипт сборки приложения. Это по сути консольная версия Gradle, please — веб приложения.

      alfi $name_of_library$

      Скопируйте нужную библиотеку. Вставьте в ваш build.gradle.
    40. Используйте Dryrun, чтобы быстро и удобно протестировать библиотеку или пример приложения.

      dryrun $REMOTE_GIT_URL$

    41. Отображайте результаты юнит тестов напрямую в консоль.

      android {
          ...
          testOptions.unitTests.all {
            testLogging {
              events 'passed', 'skipped', 'failed', 'standardOut', 'standardError'
              outputs.upToDateWhen { false }
              showStandardStreams = true
            }
          }
      }
      

    42. Сделайтe сборку быстрее, используя offline режим.
      --offline флаг говорит gradle, чтобы при сборке были использованы зависимости из кэша. Если запускать сборку с этим флагом, gradle никогда не попробует выкачать зависимости по сети. Если необходимые модули отсутствуют в кэше — приложение не соберётся
    43. Собирайте debug сборки как можно быстрее:

      ./gradlew assembleDevelopDebug --offline

    44. Прогоняйте юнит тесты как можно быстрее:

      ./gradlew test --offline

    45. Инкапсулируйте Logger в отдельном классе
    46. Если вы хотите автоматически инициализировать библиотеку, используйте Content Provider. Почитайте , как это делает Firebase.

    Полезные советы по UI/UX


    Движение


    Material Design использует физику реального мира как основу. Объекты в реальном мире не двигаются линейно, они двигаются по искривлённым траекториям а также с ускорением и замедлением в зависимости от ситуации.

    Таким образом, вы должны манипулировать свойствами и анимировать объекты так, чтобы это выглядело натурально и естественно. Например машина, выезжающая за экран начинает движение медленно, постепенно ускоряясь по приближению к краю экрана. Аналогично ui элементы должны перемещаться используя такие классы как AccelerateInterpolator, FastOutSlowInInterpolator и другие.

    Шрифты, отступы


    В принципе, нестандартные шрифты можно использовать как часть брэндинга, однако лучше всё-таки остановиться на стандартных Roboto и Noto, если это возможно, в особенности для основного текста из-за их узнаваемости и частого использования.

    Roboto покрывает Латинские, Греческие и Кириллические символы, Noto покрывает остальные языки.
    Балансировка яркости шрифта — это один из наиболее важных параметров современной стилистики. Основная идея заключается в том, что чем меньше шрифт, тем более ярким он должен быть, и наоборот.

    Сам текст должен быть выровнен по сетке с ячейкой 4dp.

    Идеальная длина текста для больших блоков от 40 до 60 символов в строке.

    Иконки


    Иконки должны быть размером 48dp c краями 1dp, что эквивалентно:

    48px x 48px - mdpi
    72px x 72px - hdpi
    96px x 96px - xhdpi
    144px x 144px - xxhdpi
    192px x 192px - xxxhdpi


    Дополнительная иконка с размером 512px x 512px должна быть предоставлена для Google Play.
    То же касается иконки с размером 1024px x 500px, которая будет отображаться в шапке на странице вашего приложения.

    Ripple


    Когда реализуете Ripple эффект, используйте ?attr/selectableItemBackground вместо ?android:attr, подробнее. Когда реализуете Ripple эффект на элементе как Button используйте:

    android:background="?attr/selectableItemBackground" 

    Когда реализуете Ripple, который выходит за края View, как например у ImageView, используйте:

    ?attr/selectableItemBackgroundBorderless

    Остальные пункты


    Элементы в соответствии с Material Design Views должны быть расположены на сетке с ячейкой размерами 8dp, если это возможно. Благодаря этому подходу UI выглядит структурированным и приятным.

    Если вам нужна ссылка на какой-нибудь элемент ViewGroup (LinearLayout, FrameLayout, RelativeLayout, etc.) и вам не нужны никакие специфичные методы именно для этого типа ViewGroup, то не храните конкретный тип, используйте просто ViewGroup.

    Другие ресурсы



    Cделайте закладки в своём браузере на различные популярные ресурсы



    Используйте бесплатные mock API для тестирования


    Все примеры, перечисленные ниже, тем или иным образом позволяют тестировать ваше приложение без бэкенда. Если понадобится воспользоваться, пробегитесь по списку и посмотрите, какой из пунктов максимально удовлетворяет вашим запросам и потребностям по функционалу.


    Подпишитесь на дайджесты по андроид разработке


    • Android Weekly — Бесплатный дайджест, чтобы оставаться в тренде и узнавать про новые технологии
    • AndroidDevDigest — Еженедельная новостная рассылка от AndroidDevDigest
    • Infinium AndroidSweets — Свежие новости из мира Android
    • Kotlin Weekly — Бесплатный дайджест по Kotlin

    Ещё примеры полезных программ


    • Android SVG to VectorDrawable — Конвертация SVG в Vector
    • SQLite Viewer — Позволяет просматривать sqlite файлы онлайн
    • Android 9-patch shadow generator -Утилита, которая позволит вам полностью касмтомизировать тени, насколько это возможно
    • APK method count — Поможет вам узнать число методов, используемых в apk
    • Material Palette — Генерация Material палитры цветов
    • Javadoc Themer — Раскрасит разными цветами скучные javaDocs!
    • Method Count — Используйте, чтобы легко узнавать кол-во методов в библиотеках и не превосходить 65К лимит!
    • Gradle, please — Поиск зависмостей по имени библиотеки для вставки в gradle скрипт
    • jsonschema2pojo — Генерация POJO из json или json схемы
    • Android Asset Studio — Позволяет легко оборачивать скриншоты в рамку смартфона

    В качестве дополнения — Android библиотеки разработанные лично мной


    • EasyDeviceInfo — Позволяет легко для разработччика получать информацию о девайсе
    • Sensey — Библиотека для распознования жестов
    • PackageHunter — Позволяет получать информацию об установленных приложениях на девайсе
    • Zentone — Легко генерирует необходимый тон
    • RecyclerViewHelper — Предоставляет различные вспомогательные функции
    • StackedHorizontalProgressbar — Горизонтальный прогрессбар
    • QREader — Упрощение чтения QR кодов с помощью google mobile vision api
    • ScreenShott — Позволяет программно делать скриншот устройства
    • EvTrack — Библиотека для упрощения трекинга событий и ошибок
    • OptimusHTTP — Упрощение работы с сетью
    • ShoutOut — Библиотека для логгирования
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 18
      +1
      ой как вовремя, отличная подборка советов, хоть немного и хаотично.

      Подскажите, есть ли какие-нибудь полезные советы по использованию jack компилятора (использование java8 фич при использовании Android N 7.0 и выше), при его включении с android studio происходят странные вещи, ошибки компиляции в окне Messages отображаются (с иконками желтые warning и красные error) но переход по ним к файлам кода невозможен (даблклик не отрабатывает, по правой кнопке доступно только меню copy), в самом дереве исходников ошибки не помечаются но при открытии файла ошибки видны.

      Это нормально, что только что созданное helloworld (с пустым activity) приложение (70кб кода) собирается 51 секунду (amd fx 6100, 16gb ram, jdk1.8.0_122.x64)? после eclipse, пересобирающего проект в 700 java файлов на 2мб за 3 секунды, как то грустно становится
        0
        Это нормально, что только что созданное helloworld (с пустым activity) приложение (70кб кода) собирается 51 секунду (amd fx 6100, 16gb ram, jdk1.8.0_122.x64)? после eclipse, пересобирающего проект в 700 java файлов на 2мб за 3 секунды, как то грустно становится

        У меня также долго собирались проекты на java в Windows. Когда перешел на Linux, жду не 50 сек, а 5 сек
          +1
          Когда поставил ssd, проект чуть сложнее helloworld, все собирается за 3секунды
            +1
            у меня почти везде ssd диски
            причина медленной сборки — использование jack, без него пустой проект собирается 7 секунд, с ним (и включенным offline режимом) — 34 секунды.
            нагрузка идет сразу на несколько ядер (примерно 3 загружены во время сборки) так что я тем более удивлен.

            то что компилятор javac работает на windows медленнее linux заметил, это в двойне грустно.

            p.s. я 'испытываю невыносимые страдания' от того что eclipse плагин ADT поддержка прекращена, мне реально eclipse нравится больше чем intelj, у него больше автоматически разрешаемых ошибки стратегий, даже банальные автоматические подстановки import у eclipse работает лучше.
          0
          Спасибо! Нашел для себя пару полезных новых ссылок.
            0
            В избранное! :)
              0
              Однозначно в избранное! Спасибо автору за подборку.
                0
                Очень, полезная подборка, притом актуальная. Спасибо за перевод!
                  0
                  Очень полезная статья! Я еще использую плагин для визуализации зависимостей в Dagger.
                  https://github.com/square/dagger-intellij-plugin
                    0
                    Спасибо за подборку!

                    Это перевод? Небольшой совет — не очень корректно «use ${trick}» переводить как повелительное наклонение, получается набор указаний, а не возможностей. Инфинитив более нейтрален.

                    Используйте shrinkResources

                    Как пример: Использование shrinkResources: <код>
                    Жаль в таких подборках авторы не всегда предупреждают о подводных граблях. Тот же shrinkResources не до конца совместим с native сборками.
                      0
                      Да, перевод. В начале статьи указана ссылка на оригинал. Спасибо за стилистическое замечание.
                      +2
                      Спасибо, для себя обнаружил много интересных вещей.
                      От себя добавлю.
                      Эмулятор Android от Microsoft, визуально неплохо работает на AMD.
                      https://www.visualstudio.com/ru/vs/msft-android-emulator/
                        0
                        опа, его реально прикрутить для использования в android studio?
                          0
                          Android Studio увидела эмулятор сразу после установки без каких либо танцев. Я правда не уверен, что он есть под linux/macos.
                            +1
                            Очень жаль но я пока не могу отказаться от windows 7 (точнее переход мне может стоить много сил и нервов), эмулятор требует windows 8 и выше.
                              +1
                              Eщё и обязательно Pro версия (нужна поддержка HyperV).
                        0
                        В шорткатах «Переопределить метод родительского класса» встречается дважды.
                          0
                          Спасибо за QREader. Взял и использовал. Оно работает как ожидалось. Только требует Google Services, так что не будет работать на Genymotion, например.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое