Сегодня хотел бы поделиться своим анализом и способами лечением разных ошибок при разработке своего продукта в Android Studio. Лично я, не раз сталкивался с различными проблемами и ошибками при компиляции и/или тестировании мобильного приложения. Данный процесс, всегда однообразный и в 99% случаев и всегда нужно тратить n-колличество времени на его устранение. Даже, когда ты уже сталкивался с данной проблемой, ты все равно идешь в поисковик и вспоминаешь, как же решить ту или иную ситуацию.

Я для себя завел файлик, в котором отметил самые частые ошибки — потратив на это несколько часов и перечислил самые популярные ошибки (в дальнейшем планирую просто их запомнить), чтоб сократить свое время в дальнейшем.

Итак, начну по порядку с самой распространенной проблемы и дальше буду перечислять их по мере появления:

1) Если подчеркивает красным код, где используются ресурсы: R. — попробовать (но вероятно не поможет): Build -> Clean Project.

В принципе на Build -> Clean Project можно не терять времени, а лучше всего — слева переключиться на Project, открыть каталог .idea, затем каталог libraries и из него удалить все содержимое. Затем нажать кнопку Sync Project. А затем (если все еще красное, но скорее всего уже будет все ок ) Build -> Clean Project.

image

2) После внезапного выключения компьютера, после перезапуска может быть во всех проектах весь код красным. Перед этим может быть ошибка: Unable to create Debug Bridge: Unable to start adb server: Unable to obtain result of 'adb version'. Есть три решения — первое помогло, второе нет (но может быть для другого случая), а третье — не пробовал:

а) File — Invalidate Caches/Restart — Invalidate and Restart

б) Закрыть студию. В корне папки проекта удалить файл(ы) .iml и папку .idea. Вновь запустить студию и импортировать проект.

в) Нажать Ctrl-Alt-O и запустить оптимизацию импорта.

Кстати, adb сервер можно проверить на версию (и работоспособность) и затем перезапустить:

adb version
adb kill-server
adb start-server

3) Если Android Studio выдает приблизительно такую ошибку: Error:Execution failed for task ':app:dexDebug'...

Решение:

Надо слева переключиться на опцию Project, найти и удалить папку build которая лежит в папке app, т.е. по пути app/build. Затем перестроить весь проект заново: Build -> Rebuild Project.

Такое же решение если ошибка типа: «не могу удалить (создать) папку или файл» и указан путь, который в ведет в app/build. Тоже удаляем папку build и ребилдим проект.



4) В сообщении об ошибке упоминается heap — виртуальная память. А ошибка обычно вызвана ее нехваткой, т.е. невозможностью получить запрашиваемый объем. Поэтому этот запрашиваемый объем надо уменьшить, т.е. переписать дефолтное значение (обычно 2048 MB которое можно изменить в настройках), на меньшее 1024 MB.

В файле проекта gradle.properties пишем:

org.gradle.jvmargs=-Xmx1024m



5) Android Studio пришет примерно такую ошибку: Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to «83648b99316049d63656d7276cb19cc7e95d70a5»

Возможные причины (кроме необходимости регулярного обновления SDK):

а) Загруженный проект был скомпилирован с помощью уже несовместимого старого gradle плагина. В этом случае надо найти и подключить в своем build.gradle проекта этот более старый плагин. т.е. попробовать более старые версии, например: 1.1.3 (часто именно 1.1.x и подходит).

com.android.tools.build:gradle:1.1.3

Найти все версии можно здесь.

б) Если в build.gradle проекта используется beta-версия плагина — это означает, что срок ее истек. Посмотреть последние релизы (продакшн и бета) можно также здесь:

6) Иногда при подключении сторонних библиотек могут дублироваться некоторые файлы (обычно связанные с лицензированием). В сообщении будет что-то содержащее слова: duplicate files. Решение — надо посмотреть в сообщении об ошибке или в документации подключенной сторонней библиотеки — какие именно файлы стали избыточными, и перечислить их в build.gradle модуля для исключения (exclude) из билда.

Это делается в директиве packagingOptions (которая, в свою очередь, находится в директиве android).

Например, при подключении библиотеки Firebase (облачный бек-енд сервис) в случае возникновения такой ошибки в build.gradle модуля (не проекта) добавляем packagingOptions в android (уже существующие там директивы оставляем) так:

android {
    ...
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE-FIREBASE.txt'
        exclude 'META-INF/NOTICE'
        }
}



P.S.: Думаю, данная статья была полезна. Если у вас есть еще какие-то частные проблемы при работе с проектами в Android Studio, с удовольствием выслушаю их. Как по мне, 6 проблемных причин, которые я перечислил выше — это 99% всех случаев краха проекта. Конечно, если проблема не связана с вашим личным кодом.

Комментарии (17)


  1. VioletGiraffe
    09.11.2015 19:01
    -3

    А я-то думал, Эклипс глючный. Какой вообще смысл был менять шило на мыло (Эклипс на Андроид Студио)?


    1. StanZakharov
      09.11.2015 19:13
      +5

      Да, у студии тоже есть свои грешки, но эти проблемы не такие уж частые, а если вдруг они возникают, то я постарался расписать в статье, как их можно вылечить. Насколько я помню у Эклипса было куда более проблем и этот список состоял бы не из 5 пунктов, а в разы больше.


      1. Plesser
        09.11.2015 21:43
        -5

        он был предсказуемый
        он не так много жрал ресурсов
        на нем можно было разрабатывать одновременно и SE и EE приложения.
        под него было куча плагинов
        на нем… блин по любой проблеме на stackoverflow можно было найти решение

        я не верующий человек но если я ошибаюсь я попрошу на том свете показать мне того человека кто принял это решение


        1. VioletGiraffe
          09.11.2015 21:51
          -4

          >по любой проблеме на stackoverflow можно было найти решение
          +100500. Именно поэтому я не спешил перехдить на СТудию. Ну а теперь и подавно не спешу.


          1. Zabelnikov
            10.11.2015 08:54
            +2

            Держите нас в курсе


          1. Plesser
            10.11.2015 09:12
            +1

            увы, переход неизбежен
            так что начинайте потихоньку мигрировать


        1. KamiSempai
          10.11.2015 18:28

          Если помимо Андроида вам нужны SE и EE, советую переходить на IntelliJ IDEA. На счет ЕЕ не могу сказать ни чего, но вот SE приложения на ней можно разрабатывать даже в Community Edition.


          1. Plesser
            10.11.2015 21:09

            mail.ru выложили видео со своих курсов, там по превью я так понял они разрабатывают что то EE и как я понял они используют для этого IntelliJ IDEA. Вопрос все равно не в этом.
            Вопрос на фига было так Google cделали остался открытым и меня за него отчаянно минусуют :)


    1. Mikhail_dev
      09.11.2015 20:33
      +3

      То, что эклипс гуглом не поддерживается, а студия — да?


      1. StanZakharov
        09.11.2015 20:55

        Да, гугл перестал поддерживать эклипс.


    1. Plesser
      09.11.2015 21:40
      -4

      меня иногда охватывает подозрение что кто то в Гугле решил потроллить нас переходом на Android Studio


  1. Plesser
    09.11.2015 21:39
    -3

    А вот хочу я понизить версию проекта .
    Захожу в структуру проекта, выбираю модуль и понижаю версию. И начинается круговорот что при сборке проекта студия не находит кучу стилей связанных с material design и заканчивая такой:
    Failed to find: 'com.android.support:support-v4:19.1.0'

    То есть изменение версии это самый большой геморрой, по крайне мере для меня


    1. StanZakharov
      09.11.2015 22:07
      +1

      А зачем ты понижаешь версию? Для чего?


      1. Plesser
        10.11.2015 08:36
        -2

        например когда хочу обойти ограничения deprecated
        да я могу вставить код о том что бы игнорировать deprecated ограничения
        ну блин это уже как то не совсем верно как мне кажется


    1. Ghedeon
      10.11.2015 03:42
      +3

      При чем тут студия, если ваши зависимости не обратно совместимые? Проблем будет куда меньше, если есть понимание того, что делаешь). Вот есть у вас ButterKnife в проекте, версии 7.0. И решили вы понизить версию до 6.0. У вас же ничего не соберется, из-за того, что они полностью поменяли API в последней мажорной версии. Вы же не будете ждать от студии, что она вам отрефакторит код под старый API, чтоб скомпилилось :).


      1. Plesser
        10.11.2015 08:37
        -2

        Если я использую новый функционал — да
        но если я не его не использую то почему нет?


  1. Bo_bda
    09.11.2015 22:49

    а зачем так шаманить со студией, если clean чистит проект и все временные файлы. с R файлами не все так просто если у вас разные проекты имеют одинаковые имена с файлах или иконки. По поводу версий тоже бы написали ибо может быть хоть N разных SDK. a на счет jar файлов к которых может быть много всего это дельный совет.