Android — Ошибка в Android studio при импорте проекта


Содержание

Android — Ошибка в Android studio при импорте проекта

Android Studio — IDE для разработки приложений для Андроид от Google на основе IntelliJ IDEA.

Установка:
Страница загрузок на официальном сайте.
Windows:
Необходимо установить JDK и прописать системную переменную JAVA_HOME

Перед первым запуском пропишите в переменную JAVA_HOME значение пути к текущей версии JDK (если не установлено, то установить JDK) — например C:\Program Files\Java\jdk1.7.0_21
P.S. Android Studio успешно запустилось на системе без переменной JAVA_HOME, где в PATH был прописан путь к JDK.

Чтобы использовать Android Studio с эмулятором на Windows XP SP3 необходимо скачать и установить старую версию Intel Hardware Accelerated Execution Manager (extra_intel_haxm-windows_r02.zip)

OS X:
Установка Andoid Studio на OS X намного проще — необходимо проинсталировать JDK, а затем Android Studio.

Не запускается эмулятор

Запускается эмулятор, но появляется ошибка «pixel launcher isn’t responding»

При запуске эмулятора лаунчер сообщает: Pixel launcher isn’t responding. Ни какой реакции на нажатия.

Произошло на машине с встроенной видеокартой Intel HD Graphics 3000 — в Windows 10 драйвер не поддерживает OpenGL (вероятно связанно с этим).
Решение: в наcтройках AVD установить значение Software-GLES 2.0 для Emulated performance\Graphics

Создание быстрого x86 эмулятора Android (AVD) на примере Android 5.0.1 (API 21)

Запускаем Android SDK Manager. Загружаем Intel x86 Atom System Image (ознакомьтесь также с Using Hardware Acceleration, Как разогнать эмулятор Android )

Пользуемся

Изменение места хранения AVD. Инструкция.
Проверено на Ubuntu 16.04, Android Studio 3.0, все компоненты обновлены до последней версии (на 19.11.2020)

  • Если подчеркивает красным код, где используются ресурсы: R
  • После внезапного выключения компьютера, после перезапуска может быть во всех проектах весь код красным
  • Если Android Studio выдает приблизительно такую ошибку: Error:Execution failed for task ‘:app:dexDebug’
  • В сообщении об ошибке упоминается heap — виртуальная память
  • Android Studio пришет примерно такую ошибку: Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to «83648b99316049d63656d7276cb19cc7e95d70a5»
  • Иногда при подключении сторонних библиотек могут дублироваться некоторые файлы (обычно связанные с лицензированием). В сообщении будет что-то содержащее слова: duplicate files

  • Если при запуске эмулятора сообщение Cannot set up guest memory ‘pc.ram’: Invalid argument — проверьте в настройках эмулятора объем памяти, например установите 512 Мб.
  • Также быстро работает Android x86 в VirtualBox (Есть маркет в android-x86-4.2-20130228.iso)
  • Используйте в названиях файлов и каталогов только символы латинского алфавита.
  • Путь к файлу не должен превышать 256 символов.
  • Не используйте заглавные буквы — «Error:Execution failed for task ‘:app:mergeDebugResources’. Unsupported node ‘item’ in file «\powertool\app\src\main\res\menu\menu.xml» — была из-за заглавной буквы в «Menu» «

Учебники по Android Studio:

Renamed Properties in BuildTypes
runProguard => minifyEnabled
zipAlign => zipAlignEnabled
jniDebugBuild => jniDebuggable
renderscriptDebug => renderscriptDebuggable

Renamed Properties in ProductFlavors
flavorGroups => flavorDimensions
packageName => applicationId
testPackageName => testApplicationId
renderscriptSupportMode => renderscriptSupportModeEnabled
ProductFlavor.renderscriptNdkMode => renderscriptNdkModeEnabled

Т.е. например в build.gradle вместо runProguard false необходимо написать minifyEnabled true

Просьба: если вы автор последнего сообщения — просто редактируйте его, а не добавляйте новое.

Добавляем систему контроля версий Mercurial
Разработчики используют систему Mercurial для администрирования исходного кода. У нее два основных назначения:

  • Она хранит все предыдущие версии каждого файла
  • Она может объединить разные версии вашего кода, то есть сотрудники могут независимо работать над кодом и затем объединять свои изменения

О инсталляции и работе с Mercurial хорошо написано здесь:

  1. Hg Init: Часть 2. Основы Mercurial
  2. Hg Init: Часть 3. Привыкаем работать в команде

Устанавливаем Mercurial, если необходимо добавляем в %PATH% путь (в моем случае D:\Program Files\TortoiseHg\).
Запускаем в консоли из каталога проекта команду hg init — создает репозиторий.
Открываем проект в Android Studio — Studio обнаруживает Mercurial и предлагает добавить (add root).
Пользуемся — правая кнопка на вкладке открытого файла — Mercurial. Здесь те пункты, описанные в статье Hg Init: Часть 2. Основы Mercurial — Pull, Push, Commit и т.д.)


получить ошибку при импорте проекта в андроид студию?

Недавно я обновил мою студию android до 0.30 Я пытался импортировать проект в андроид-студию.

В проекте используется старая версия плагина Android Gradle. Минимальная поддерживаемая версия — 0.6.1.

Обновите версию зависимостей «com.android.tools.build: gradle» в файлах build.gradle.

Обратитесь к журналу IDE для получения дополнительной информации (Справка | Показать журнал)

Используется старая, неподдерживаемая версия Gradle. Используйте версию 1.8 или выше. Укажите в поддерживаемой версии Gradle в настройках проекта Gradle или в
обертка проекта Gradle (если применимо). Обратитесь к журналу IDE для получения дополнительной информации (Справка | Показать журнал

Не удалось выполнить сборку с использованием Gradle distribution ‘ http://services.gradle.org/distributions/gradle-1.6-bin.zip ‘. Создайте файл ‘C:\Users\Asthme\crushersblue1\babies\build.gradle’ line: 8

Не удалось найти метод classpath() для аргументов
[com.android.tools.build:gradle:0.6.+] по проекту ‘: crushersblue1: babies’.

Обратитесь к журналу IDE для получения дополнительной информации (Справка | Показать журнал)

Ошибка при импорте проекта Eclipse в Android Studio

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

Обновление Android Studio 2.3. Для того, чтобы решить эту проблему:

Откройте андроид каталог студии корня, и извлечь молнию в Gradle папки (например, в моей машине Debian полный путь /opt/android-studio/gradle/gradle-3.3)

Откройте Android Studio, перейдите в Файл-> Настройки-> Build, Exectution, Deployment-> Gradle и установить «Gradle дом», чтобы указать новую папку Gradle-3.3.

Получить ошибку при импорте проекта в андроид студию?

Недавно я обновил свою андроид студию до 0 .30. Я пытался импортировать проект в андроид студион.

Project использует старую версию плагина Android Gradle. Минимальная поддерживаемая версия — 0.6.1.

Пожалуйста, обновите версию зависимости com.android.tools.build:gradle в ваших файлах build.gradle.

Обратитесь к журналу IDE для получения более подробной информации (Справка | Показать журнал)

Вы используете старую неподдерживаемую версию Gradle. Пожалуйста, используйте версию 1.8 или выше. Пожалуйста, укажите поддерживаемую версию Gradle в настройках Gradle проекта или в
Оболочка Gradle проекта (если применимо.) Для получения более подробной информации обратитесь к журналу IDE (Справка | Показать журнал)

Не удалось выполнить сборку с использованием дистрибутива Gradle ‘ http://services.gradle.org/distributions/gradle-1.6-bin.zip’. Строка файла сборки C:\Users\Asthme\crushersblue1\babies\build.gradle: 8

Не удалось найти метод classpath() для аргументов
[com.android.tools.build:gradle:0.6.+] на проекте ‘:crushersblue1:babies’.

Обратитесь к журналу IDE для получения более подробной информации (Справка | Показать журнал)


Ошибка при импорте проекта Eclipse, в Android Studio для поддержки Lib. v7

Я новичок в Android Studio и я пытаюсь импортировать затмение проекта в андроиде с несколькими зависимыми андроидом проектов.

Пожалуйста , смотрите ниже прилагается изображение и моя консоль сообщение для ошибки. Я попытался с помощью изменения версии API до 24 лет, который является последним ничего не случится , и снова вернуться к API 21 после одного ответа на SO. Gradle версия. В обертке Я 2.14.1 и в файле Я 2.1.3

build.gradle файл

Я пытался добавить баночку вместо заявления компиляции, это не работает.

Любая помощь будет оценена, спасибо заранее.

Спасибо за вашу помощь, я , наконец , ворваться в вопросе , который я должен удалить com_crashlytics_export_strings.xml файл из моего проекта. Как я перейти на API версии 23 я удалил HTTP банки и добавил заявления компилировать build.gradle

Одним из важной вещи , я заметил это « , если у Вас есть зависимые проекты , пожалуйста , перепроверить все, как основной проект в основном не собирает из-за проблемы с использованием же LIB в зависимых проектах или устаревших функциях,. , Как у меня есть один для карт в одном из моих классов.

мой build.gradle файл

Спасибо за помощь. Ответ, чтобы помочь любому, кто сталкивается с таким же вопросом в будущем.

Как перенести проект Eclipse на Andro >

Android Студия теперь является официальной средой разработки для Android. Google настоятельно рекомендует разработчикам переходить на нее, чтобы иметь возможность использовать все последние обновления, и вообще, сполна вкусить радость от использования в работе этой замечательной IDE!

Как я уже говорил, мы с Дмитрием Виноградовым тоже будем постепенно, по мере возможности переводить уроки на Android Studio. Все новые уроки на нашем канале уже выходят в новой среде разработки.

Раньше чтобы перенести проект Eclipse на Android Studio для начала нужно было открыть ваш проект в Eclipse , и выполнить его экспорт с генерацией gradle файла сборки. Потом именно этот файл сборки build.gradle нужно было выбрать при импорте проекта в Android Studio. Этот способ приблизительно описан и на официальном сайте android.

Но у меня с его помощью не получилось импортировать проект на Android Studio. Вроде сделал все, как по инструкции. Gradle долго что-то там тянул, колбасил, а в итоге я даже не увидел привычных файлов проекта в окне менеджера. Внизу было сообщение, что-то там о несоответствии версии сборки.

Тогда я пошел другим путем, и все получилось намного проще и быстрее. Не нужно париться с Eclipse и делать экспорт. Просто открываем Android Studio, и закрываем все открытые проекты, если они есть. Вы должны увидеть окно приветствия.

Нажмите Импорт проекта Non-Android Studio

Нажмите Импорт проекта Non-Android Studio. Найдите проект Eclipse, который вы хотите импортировать, станьте на него и нажмите кнопку ОК. В последующих окнах оставляем все, как есть. Умная Android Studio правильно обновляет структуру проекта и создает соответствующую Gradle сборку.

Найдите проект Eclipse, который вы хотите импортировать, станьте на него и нажмите кнопку ОК

Я выбрал проект из урока 137, который изначально создавался в Eclipse. как видим, все прекрасно открывается, все файлы и папки проекта на месте.

Чтобы вы убедились еще раз, я вам открою папку другого проекта из своего старого workspase. Проект урока 136. Вот, никаких build.gradle здесь нет, чистый Eclipse! Полное Затмение! Этож надо было так назвать среду разработки)

Нет, я ничего не имею против Eclipse, мощная, замечательная среда, мы на ней работали и работаем.


Давайте Проект урока 136 тоже импортируем, закрепим, так сказать.. Возвращаемся в Android Studio, закрываем проект, в окне приветствия жмем Импорт проекта Non-Android Studio. Gradle после недолгих раздумия собирает наш проект, все на месте, никаких ошибок. Здесь в классе MainActivity были комментарии на кириллице. Никогда не пишите комментарии в java коде кириллицей!

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

Здесь тоже никаких сюрпризов, все работает.

Вот так просто и без лишних телодвижений можно перевести все ваши android проекты из Eclipse на Android Studio.

Товарищи разработчики! Идите в ногу со временем! Переходите на Android Studio!

Если у вас возникают проблемы, пишите об этом в комментариях под видео, мы обязательно постараемся вам помочь. Смотрите наш канал, и удачи в разработке android приложений!

Поддержите нас, и мы сделаем еще больше полезных уроков по android разработке!

ошибка при импорте проекта в студии Android?

Недавно я обновил мою андроид-студию до 0,30. Я пытался импортировать проект в андроид-студию.

Проект использует старую версию подключаемого модуля Android Gradle. Минимальная поддерживаемая версия — 0.6.1.

Обновите версию зависимостей «com.android.tools.build:gradle» в файлах build.gradle.

Consult журнала IDE для получения более подробной информации (Помощь | Показать Log)

Вы используете старую, неподдерживаемую версию Gradle. Используйте версию 1.8 или выше. Пожалуйста, укажите на поддерживаемую версию Gradle в настройках Gradle проекта или в
Gradle обертке проекта (если применимо). Consult журнал IDE для более подробной информации (Help | Показать Log

не удалось выполнить сборку с помощью распределения Gradle ‘ http://services.gradle.org/distributions/gradle-1.6-bin.zip’ сборки. ‘C: \ Users \ Asthme \ crushersblue1 \ младенцами \ build.gradle’ линии: 8

Не удалось найти метод classpath() для аргументов
[com.android.tools.build:gradle:0.6.+] по проекту ‘: crushersblue1: babies’.

Consult журнал IDE для более подробной информации (Help | Показать Log)

Создан 28 окт. 13 2013-10-28 11:33:33 Asthme

Импорт существующих APK в Andro >

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

Есть ли способ извлечь исходный код из этого файла APK?

16 ответов

Простой способ: использовать онлайн-инструмент http://www.javadecompilers.com/apk , загрузить apk и получить исходный код.


Процедура для декодирования .apk файлов, шаг за шагом:

Шаг 1:

  1. Создайте новую папку и скопируйте файл .apk, который вы хотите декодировать.
  2. Теперь переименуйте расширение этого .apk-файла в .zip (например, переименуйте с filename.apk в filename.zip) и сохраните его. Теперь вы можете получить доступ к файлам classes.dex и т. Д. На этом этапе вы можете видеть чертежи, но не файлы xml и java, поэтому продолжайте.

Шаг 2:

  1. Теперь извлеките этот .zip-файл в ту же папку (или NEW FOLDER).
  2. Загрузите dex2jar и извлеките его в ту же папку (или NEW FOLDER).
  3. Переместите файл classes.dex в папку dex2jar.
  4. Теперь откройте командную строку и смените каталог на эту папку (или NEW FOLDER). Затем напишите d2j-dex2jar classes.dex (для терминала mac или ubuntu write ./d2j-dex2jar.sh classes.dex ) и нажмите enter. Теперь у вас есть файл classes.dex.dex2jar в той же папке.
  5. Загрузите java decompiler , дважды щелкните по jd-gui, щелкните по открытому файлу и откройте classes.dex .dex2jar из этой папки: теперь вы получаете файлы классов.
  6. Сохраните все эти файлы классов (в jd-gui, щелкните File -> Save All Sources) по имени src. На этом этапе вы получаете источник java, но файлы .xml по-прежнему не читаются, поэтому продолжайте.

Шаг 3:

Теперь откройте еще одну новую папку

  1. Вставьте файл .apk, который вы хотите декодировать
  2. Загрузите последнюю версию apktool И окно установки apktool (обе могут быть загружены из одной и той же ссылки ) и поместите их в ту же папку
  3. Откройте командное окно
  4. Теперь запустите команду, например apktool if framework-res.apk и следующую
  5. apktool d myApp.apk (где myApp.apk обозначает имя файла, которое вы хотите декодировать)

теперь вы получаете папку с файлами в этой папке и можете легко прочитать XML-файлы apk.

Шаг 4:

Это не какой-либо шаг, просто скопируйте содержимое обеих папок (в данном случае и новую папку) в один файл

и наслаждайтесь источником код .


Есть несколько способов сделать это:

  1. Использовать функцию «Профиль или отладка APK» в Android Studio 3.0. Это позволяет вам открывать и исследовать APK в Android Studio. Классы декомпилируются в smali. Ресурсы не извлекаются, и такие вещи, как «Перейти к определению», «Найти все ссылки» и отладки, не работают без исходного кода (android studio 3.0 canary 9). Некоторые дополнительные функции smali могут работать с smalidea . [/g3] [/g4] [/g5]
  2. Используйте jadx . Jadx декомпилирует код в заданном APK для исходных файлов java. [/g6]
  3. Используйте apktool . Apktool — это инструмент командной строки, который извлекает ресурсы и декомпилирует код в smali для данного apk. Вы также можете перекомпилировать, используя apktool. Вот пример этого в действии:

apktool — это путь. Интернет-служба apktool существует также: http://www.javadecompilers.com/apktool

Некоторые ограничения, очевидно, существуют из-за службы «онлайн-характер»: вы можете извлечь и исследовательские активы и файл манифеста, но невозможно перекомпилировать приложение на данный момент.

Тем не менее, это беспроблемный способ «открыть» приложение для Android.

Apktool для обратной инженерии сторонних, закрытых, бинарных приложений для Android.

Он может декодировать ресурсы до почти первоначальной формы и восстанавливать их после внесения некоторых изменений.

Это позволяет отлаживать smali-код шаг за шагом. Кроме того, упрощается работа с приложением из-за проектной структуры файла и автоматизации некоторых повторяющихся задач, таких как создание apk и т. Д.

Это альтернативное описание — на случай, если кто-то застрял с описанием выше. Выполните следующие шаги:

  1. загрузите apktool.bat (или apktool для Linux) и apktool_ .jar из http://ibotpeaches.github.io/Apktool/install/
  2. переименуйте файл jar сверху до apktool.jar и поместите оба файла в одну и ту же папку
  3. откройте поле dos ( cmd.exe ) и перейдите в эту папку; убедитесь, что установлена ​​среда Java (для Linux также проверьте заметки относительно необходимых библиотек)
  4. Начало: apktool decode [apk file] Промежуточный результат : файлы ресурсов, AndroidManifest.xml
  5. распаковать файл APK с распаковщиком по вашему выбору Промежуточный результат : classes.dex
  6. загрузить и извлечь dex2jar-0.0.9.15.zip из http://code.google .com / p / dex2jar / downloads / detail? name = dex2jar-0.0.9.15.zip & amp; can = 2 & amp; q =
  7. перетащить classes.dex на dex2jar.bat (или введите

\dex2jar.bat classes.dex в поле DOS, для Linux используйте dex2jar.sh ) Промежуточный результат : classes_dex2jar.jar

  • unpack classes_dex2jar.jar (может быть необязательным в зависимости от используемого декомпилятора)
  • декомпилировать ваши файлы классов (например, с помощью JD-GUI или DJ Decompiler ) Результат : исходный код
  • Примечание: не разрешается декомпилировать пакеты сторонних поставщиков; это руководство предназначено для восстановления личного исходного кода только из файла APK; наконец, полученный код, скорее всего, будет запутан

    ошибка Android Studio не создает R.java для моего проекта импорта

    andro > (16)

    Я импортирую проект в Android Studio, но R.java всегда пуст.

    1. Сделать проект, сделать модуль, переделать и т. Д.
    2. Project Setting-modules-sources, затем добавьте src и gen в качестве исходной папки.


    Но они не вступают в силу.

    Перейдите в Меню-Вкладка -> Проект -> Сборка -> Автоматически (установите этот флажок). и снова открыть новый проект.

    Я нашел свое решение здесь . Короче убедитесь, что обновлен не только плагин Eclipse (если вы используете eclipse). Также убедитесь, что Android SDK Tools, инструментальные средства SDK и инструменты сборки SDK обновлены. После этого перезагрузите компьютер.

    У меня была аналогичная проблема в большом многомодульном проекте со многими зависимостями между модулями. Для меня работала попытка создать отдельно от командной строки все модули, которые не удалось создать в Android Studio. Это дало мне указание на отсутствие ресурсов в каждом проекте. С уровня проекта в моей консоли я сделал:

    Это предоставило мне ряд ошибок «Нет ресурсов, которые соответствуют данным имени», которые ранее не были показаны, когда я создаю проект в целом.

    Самое лучшее решение для пользователей студии Android:

    Перейти к: вкладка «Меню» -> «Сборка» -> «Проект перестройки»

    после восстановления Proj. ваша проблема с файлом R.Java будет решаться автоматически.

    Имел ту же проблему и решил ее:

    1. запуск / построение проекта (он был развернут на устройстве, в моем случае)
    2. щелчок правой кнопкой мыши по папке Project / Module / build
    3. выберите: Синхронизировать ‘build’ — тогда я нашел

    Проект / модуль / сборка / источник / г / отлаживать / пакет / R.java

    Вероятно, это было даже там, прежде чем проект был построен, но я не проверял это.

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

    Настройки-> Компилятор -> [] Использовать внешнюю сборку

    следует исправить afaik ;-)

    Я отвечу на вопрос, даже если это было давно, так как он был брошен, на всякий случай, если кто-то подойдет к нему.

    Протестировано на Android Studio ТОЛЬКО (но я думаю, это могло бы работать и для Eclipse):

    Проверьте свою папку build / source / r. Там вы должны найти некоторые каталоги, помеченные под именем вашего имени сборки gradle (default: debug). Убедитесь, что имя пакета, связанного с R, является тем, которое вы хотите.

    Я знаю, что этот трюк решает проблему переключения пространства имен, потому что Android Studio (или Gradle, я не знаю, кто несет ответственность за это), похоже, не регенерирует его в этом случае.

    Я не пробовал его при импорте проекта из Eclipse.

    У меня было много проблем с экспортом проекта из Eclipse (при условии, что вы экспортируете его). Мне было намного легче создать новый проект в Android Studio, а затем скопировать файлы java, xml-файлы, каталоги макетов и т. Д. И AndroidManifest в соответствующее место в новом проекте.


    Если у вас уже есть файл R.java для вашего проекта, вы можете попробовать просто скопировать его в новый проект. В Android Studio файл R.java, похоже, находится в файле build / source / r / debug / your-package-name /

    Что касается меня, проблема была в этой избыточной строке:

    Вы следили за шагами здесь? Сначала обновите плагин Eclipse ADT, затем экспортируйте проект и импортируйте его в Android Studio.

    Когда я пытался добавить еще один flavour я сталкиваюсь с такой же ситуацией.

    Я нашел в одном из сообщений, и я дал успешную попытку, и это сработало. После этого я сделал: File -> Invalidate Cached / Restart.

    Проверьте свой пакет проектов! Я привел несколько классов из другого проекта и не заметил тонких изменений в названии пакета. См. Верхнюю часть вашего AndroidManifest.xml

    Просто используйте «Rebuild Project» из меню «Build» в верхней строке меню.

    Мне удалось восстановить R: Файл-> Настройки-> Компилятор

    затем UNCHECK «Использовать сборку в процессе»,

    Я потерпел неудачу, даже если я попытался обновить инструменты SDK, как указано здесь .

    Вот как я решил проблему (для импортированных проектов библиотеки).

    В File -> Project Structure -> Modules я удалил проблемные проекты и снова добавил их, выбрав New Module -> Android Library Module .

    После восстановления проекта я получил все файлы R.java .

    Перейдите в меню «Файл» → «Настройки» → «Редактор» → «Автопорт» и на вкладке «java» вы должны:

    Вставить импорт вставить: ASK.
    Если у вас есть импорт для ВСЕ, тогда Android Studio импортирует другой файл.

    Goto File -> Настройки -> Теперь компилятор проверяет использование внешней сборки

    Самые частые ошибки начинающих Andro >

    Android воистину фантастическая платформа для разработчика. Судите сами: исходный код android открыт, все инструменты разработки бесплатны, вы можете использовать их на любой операционной системе, Android хорошо документирован, процесс распространения и продажи приложений очень прост и хорошо описан. С момента выхода на рынок в 2008 году Android проделал большой путь. Сегодня вы можете пользоваться различными IDE для написания своих программ, но с недавнего времени единственной поддерживаемой Google средой является Android Studio, которая в свою очередь базируется на IntelliJ IDE. Android Studio делает многое для упрощения жизни разработчика, однако даже очень продвинутая IDE не способна заменить программисту голову, и в нашем коде по прежнему встречаются баги. В этой статье будут указаны наиболее характерные ошибки Android разработчиков. Конечно, наиболее часто они встречаются в коде новичков, однако и опытные программисты иногда встречаются с этими граблями.

    Использование интерфейсных решений, характерных для iOS

    Android и iOS активно конкурируют на рынке мобильных операционных систем. Многие разработчики пришли в Android из мира Apple. Не удивительно, что оказавшись в новой среде они пытаются использовать свой предыдущий опыт. Android и iOS имеют много общего, однако некоторые интерфейсные решения для них сильно отличается. Поэтому прежде чем начать разрабатывать Android приложения было бы неплохо ознакомиться с «Android design guidelines». Это поможет Вам понять экосистему Android, и вы не напугаете своих пользователей «нелогичным» интерфейсом.

    Неиспользование интентов

    Интенты — это одна из ключевых идей системы Android. С их помощью можно запросить данные или выполнение действий от других компонентов системы. Причем, вы можете обратиться как к частям собственной программы, так и к внешнему приложению. Современные программы многофункциональны, и вместо того, чтобы повторно изобретать велосипед и интегрировать его в свое приложение, можно через Android обратиться к другим, специально заточенным под решение требуемой задачи приложениям. Например, если вам нужно выбрать контакт пользователя, то длинный путь состоит в обращении к базе данных телефона, выгрузке этих данных в ListView, реализации логики выбора контакта в ListView. Опытный разработчик вряд ли будет городить все это, а с помощью Intent обратиться к книге контактов Android. Существует огромное количество задач, которые могут быть решены с помощью интентов: получение картинок и видео с камеры, проигрывание видео, установка напоминаний и будильника и многое другое. Просто и красиво.

    Неиспользование fragments

    В стародавние времена, еще до Honeycomb, Android приложения строились только на базе активити и сервисов. Это доставляло массу неудобств при написании программ, которые должны были работать как при альбомной, так и при книжной ориентации устройства. Ночи, проведенные за отладкой и адаптацией макетов не редко заканчивались убитыми об стену устройствами, а ремонт планшетов и телефонов не самое дешевое дело. Внесение в API концепции фрагментов существенно улучшило ситуацию. Фрагмент — это мини активити, которая может быть встроена в обычную активити. Причем можно встроить в активити сразу несколько фрагментов. Это позволяет писать более элегантный код, отрабатывающий изменение ориентации устройства.

    Разработка для текущей версии Android

    Пожалуй самой обсуждаемой в среде программистов проблемой Android OS является ее фрагментация. На рынке одновременно присутствует большое количество устройств, работающих под различными версиями операционной системы. Каждая версия имеет собственный API. Начинающие разработчики очень часто ориентируются на последнюю версию операционной системы, отсекая тем самым огромный кусок рынка. Опытные программисты ориентируются на более старые версии и используют для обратной совместимости «Android Support Library». На самом деле, нет никакой реальной необходимости писать под очень старые устройства. Например, ориентация на Ice Cream Sandwich позволяет покрыть 95% находящихся на рынке устройств.

    Разработка для одного или двух экранов

    Фрагментация проявляется и в том, что при разработке приложений программист вынужден учитывать, что его приложение будет запускаться на устройствах с различным разрешением и размером экранов. Попыткой решения этой проблемы было привязывание всех размеров к dp и sp. Тем не менее, при написании Android приложения разработчик должен постоянно переключаться между различными типами экранов, чтобы удостовериться, что его программа нормально отображается. Новички обычно забывают про это и тестируют свой софт на одном-двух телефонах. Это неправильно.

    Блокирование основного (UI) потока

    При запуске любого приложения Android создает поток выполнения, называемый главным потоком или UI потоком. В этом потоке обрабатываются события щелчка по экрану, рисование и обновление экрана. По умолчанию весь код выполняется именно в этом потоке. Это может вызвать проблему — если у вас выполняется какая-нибудь долгая операция внутри UI потока, то приложение будет «подвисать». Особенно это актуально для приложений, взаимодействующих с сетью. В новых версиях Android работу с сетью запрещено осуществлять из основного потока, но остается целый ряд потенциально «тяжелых» задач, которые могут подвесить ваше приложение. Примером таких задач служат загрузка изображений, чтение/запись в файл или базу данных, сложные вычисления. Выходом может стать помещение этих задач в отдельные потоки. Приведенный ниже код иллюстрирует загрузку изображения и отображение ее в ImageView. Опытные разработчики никогда не позволяют своим приложениям подвисать. Если вам не знакома эта тема, рекомендую почитать об AsyncTask и использовании ProgressBar.

    Пренебрежение документацией

    Android Developer website — очень хороший ресурс, содержащий массу полезной информации для Android разработчиков. Документация, уроки, спецификации, обзор лучших решений — все это можно найти на Android Developer website. Если Вы всерьез собираетесь заняться программированием под Android — этот сайт должен быть у Вас в закладках. Начинающим разработчикам можно также рекомендовать StackOverflow — online сообщество, где можно задать вопрос и получить на него квалифицированный ответ. Начинающий программист с почти стопроцентной вероятностью найдет здесь ответ на мучающий его вопрос.

    Глубокая иерархия в макетах экранов

    При разработке макетов экранов своих программ (layouts) начинающие разработчики почему-то полагают, что использование базовых layout структур автоматически гарантирует создание эффективных и оптимизированных макетов. На самом деле, каждый виджет и layout, добавленный в приложение увеличивает время отрисовки экрана. В частности, использование параметра layout_weight — довольно дорогое в плане затрат времени удовольствие. Гораздо эффективнее использовать RelativeLayout и выстраивать виджеты по отношению друг к другу. С другой стороны, использование вложенных друг в друга layout-ов тоже очень накладно с точки зрения расхода времени.

    Неправильное использование картинок

    Графика является одним из самых больших кусков современных приложений. Прежде чем попасть на экран картинка должна быть загружена в память. Новички часто сталкиваются с OutOfMemoryError, когда пытаются загрузить коллекцию изображений. Например, загрузка картинки 2448×3264 ARGB_8888 потребует 4 * 2448 * 3264 байт памяти (около 30 Мб). Если вы потом собираетесь использовать эту картинку для отображения через ImageView размером 200×200, то на самом деле вам нужно всего 4*200*200 байт (около 160Кб). Довольно расточительно тратить 32Мб, когда действительно используется только 160Кб. При загрузке изображений опытные разработчики используют Bitmap.createScaledBitmap(). Кроме того, не стоит загружать картинки в основном потоке.

    Мобильное приложение не маленький проект

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

    Заключение

    Разработка для Android очень увлекательное занятие (или тяжелая работа, кому как нравится). Рассмотренные ошибки это лишь небольшой список граблей, которые затаились в ожидании неопытного android разработчика. Наверняка вы тоже сталкивались с ошибками, не попавшими в этот список. Поделитесь опытом.

    Цукерберг рекомендует:  Что даёт Runtime мобильным программистам
    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих