Android — Android. Проблема — не виден файл MainActivity.


Содержание

Android: проблемы с цветом Navbar — не отображается в других действиях, кроме MainActivity

Я выбираю nav. (приложение имеет панель действий) и ничего не изменило, я просто добавил следующее к v21 / styles.xml:

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

Как подключить телефон к Andro >

В статье рассмотрим, как правильно подключать смартфон к Андроид Студио и что делать, если Андроид Студио не видит телефон.

Разберемся, что такое Android Studio. Это комплекс программных средств для создания приложений в Android ОS. Работает с ОС: Windows, Mac и Linux. Основана на ПО — IntelliJ IDEA. Главные требования к железу и другие условия для нормальной работы программы соблюдены, но в процессе установки все равно возникают проблемы? Аndroid Studio не видит телефон – разберемся с причинами и способами устранения ошибки.

Возможные причины ошибки и исправления

Установка программы не всегда проходит гладко, часто возникают проблемы, которые приводят к некорректной работе приложения. Как в Аndroid studio подключить телефон, затратив небольшое количество времени? Какие ошибки возникают часто? Перед загрузкой приложения просматриваются параметры устройства для нормальной работы программного комплекса:

  • минимум 3 ГБ ОЗУ, желательно 8 ГБ и запас 1 ГБ на эмулятор;
  • разрешение экрана не менее 12,8х0,8 см (1280х800 мм).

Ошибка эмулятора

В период запуска терминала возникает проблема, которая высвечивается в командной строке: «ОШИБКА: эмуляция x86…». Для устранения погрешности проверяется:

  • правильность инструментов SDK;
  • базовая система (Bios) — включить специальную опцию Intel HAXM & virtualization;
  • настройки эмулятора Intel — для повышения производительности загрузить X86 Atom (для 64х и 32х битных ПК).

После этого нужно заново запустить менеджер SDK, зайти в AVD для создания виртуального оборудования. Как категорию выбрать телефон и образ X86_32 или 64. Эмулятор будет доступен в менеджере.

Ошибка «Сбой инициализации SDL»

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

Для проверки работы видеоустройства требуется запустить эмулятор и проверить доступные привилегии, правильную работу SDL-программ. Дополнительно загрузить подходящую к устройству библиотеку.

Start avd не работает

При выявлении ошибки: «Start avd не работает», необходимо вспомнить, какие изменения или обновления внесены. Возможно, удаление последнего загруженного файла восстановит работу системы. Если ошибка не удалилась, в каталоге пользователя рекомендуется деинсталлировать старый вариант и создать новое виртуальное устройство. Подробнее о том, как в Аndroid studio подключить телефон:

  • окно;
  • менеджер AVD;
  • визуальное устройство;
  • изменить и редактировать.

После проведенных манипуляций перезагрузить телефон и зайти из эмулятора менеджера.

Не запускается эмулятор Android на Eclipse, хотя ошибок нет

Необходимо учесть, Аndroid studio может не видеть телефон при первой или новой установке, так как загрузка среды эмулятора занимает 10-12 минут. Если программа не запустилась, требуется заново поэтапно проверить инсталляцию. Также обратить внимание на:

  • путь к SDK — он не содержит посторонних символов;
  • версию — возможно, требуется понизить эмулятор, например с Android 4.0 на 2.2;
  • функцию использования хостов GPU – ее, возможно, придется отключить;
  • параметры дискового пространства – хватает ли свободного места.

Проверить соответствие обновленной версии параметрам смартфона. Также решением проблемы может быть изменение Eclipse с EE на Eclipse Classic.

Невозможно изменить целевой API в AVD Manager

Изменение целевого API в AVD Manager может частично устранить проблему с загрузкой и работой эмулятора. AVD привязаны к изображениям системы. Для устранения ошибки проверяется путь SDK, уровень установки Аndroid.

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

LG G2 vs980 не распознается командой устройств ADB

Многие разработчики интересуются, как подключить телефон к Аndroid Studio через USB. Прежде всего, требуется выбрать вид соединения, в данном случае USB или USB-модем. Если устройство не обнаружено, настройки драйвера проводятся вручную. Часто достаточно обновить USB driver/adb через Manager, который запущен с Eclipse.

Телефон не видит Andro >


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

  • производительность;
  • количество оперативной памяти;
  • скорость работы дисковой системы.

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

Как подключить телефон к Android Studio через USB

Для подключения смартфона к приложению Android Studio необходимо:

  • зайти в «Настройки телефона» – «Сведения ПО» – «Для разработчиков»;
  • в параметрах выбирать «Установка драйвера»;
  • перейти на предложенную страницу;
  • найти нужную модель устройства, по ссылке произвести установку;
  • подключить телефон к компьютеру через USB. В диспетчере устройств появится наименование телефона, через который производится запуск Android Studio.

После установки по необходимости проводится отладка приложения.

Android Study

СОЗДАНИЕ ПРИЛОЖЕНИЙ

Урок 12. Из одного Activity в другое

Урок 12. Из одного Activity в другое

На данный момент если вы запустите наше приложение у вас не будет возможности попасть на экран, который выводит вопрос и предлагает три варианта ответа (activity_game.xml). Нам необходимо сделать так, чтобы по нажатии кнопки «Play» на экране activity_main.xml мы попадали на экран с игрой activity_game.xml. Открывайте проект с нашей математической игрой и следуйте по пунктам:

  • Открываем файл acitivity_main.xml (либо двойным щелчком в проводнике проекта, либо щелчком на вкладку в случае, когда она не активна);
  • Теперь, как мы уже делали это раньше (с текстовыми элементами) нам нужно назначить id кнопке Play. Кликните по кнопке Play или найдите её в «Componenttree» и в свойствах кнопки найдите ID и назначьте там «buttonPlay»;
  • Теперь перейдите в MainActivity.java.
  • В теле метода onCreate, сразу же после строки с методом setContentView добавьте выделенную строку:
  • Позже мы подробнее проанализируем весь код целиком, а пока нужно знать, что мы этой строкой кода создаём ссылочную переменную (объект) и присоединяем к кнопке Play. Так же как мы делали раньше, после добавления этой строки необходимо будет импортировать класс Button в наш проект комбинацией клавиш Alt+Enter.
  • Теперь кое-что новенькое. Мы дадим кнопке способность «слушать» клик пользователя. Сразу же после предыдущего кода напишите это:

Заметьте, что ключевое слово this подчеркнуто красным цветом, что указывает нам на ошибку. В дальнейших уроках будет подробное объяснение почему так происходит. Оставим это пока в уме. Нам нужно внести изменения в наш код и разрешить использование интерфейса (очень мощный инструмент в программировании, о нём тоже попозже, дабы не захламлять голову большим количеством теории без практического применения), позволяющего нам добавлять функциональные возможности, такие как «прослушивание» щелчков по кнопкам. Отредактируйте эту строку:

Теперь вся эта строка подчеркнута красным. Добавив implements View.onClickListener мы реализовали интерфейс. Интерфейс – это как класс, но со своими правилами. Правило интерфейса onClickListener гласит, что мы обязаны реализовать/использовать один из его методов. Давайте сделаем это.

  • Обратите внимание на открывающую фигурную скобку (<) и закрывающую (>). Они обозначают начало и конец метода. Наш метод пуст, и он ничего не делает, но этого вполне достаточно для соответствия правилу интерфейса onClickListener. Красная строка уйдёт. Убедитесь, что вы ввели следующий код после закрывающей фигурной скобки метода onCreate, но перед закрывающей фигурной скобкой нашего класса MainActivity:

Теперь следует написать код в этом методе и привнести жизнь нашей кнопке:

Добавленный код выделен жирным. Не забудьте импортировать класс Intent.

  • Пока этот код для нас немного непонятен. Отгадка кроется в методе startActivity и знакомом нам термине GameActivity. Обратите внимание, что мы присваиваем что-то переменной «i». Понимание всего происходящего придёт после уроков, где мы будем разбирать понятие Объектно-Ориентированного Программирования. А сейчас давайте запустим наше приложение. Если всё сделано правильно, то вы перед собой должны увидеть это:

При нажатии кнопки Play на экране меню (activity_main) вы перейдёте на экран с игровым процессом (activity_game). Если этого не произошло, внимательно прочтите статью еще раз и попробуйте найти какое-либо несоответствие. Последовательность строчек в коде очень важна, также как и расстановка фигурных скобок «<>». Всё должно соответствовать нашему описанию. Но если проблема не будет найдена вами, вы можете связаться со мной посредством комментария и подробно объяснить возникшее перед вами затруднение. Я попробую вам помочь.

Разбираемся в коде

Файл MainActivity.java – весь код целиком:

Разберём по кусочкам:


В первом куске мы видим определение имени нашего пакета и импортируем нужные нам библиотеки из Android API для взаимодействия в коде. Далее:

Тут происходит объявление нашего класса MainActivity с реализацией интерфейса View.OnClickListener, который даёт нам возможность засечь нажатие по кнопке. Далее:

Сперва строкой super.onCreate(savedInstanceState); мы просим выполнить некоторые вещи, которые скрыты в коде метода onCreate. По сути этой строкой мы задаём начальные настройки Activity. Строкой setContentView(R.layout.activity_main); устанавливаем созданный нами пользовательский интерфейс в файле activity_main.xml.

Далее мы создаём ссылку на нашу кнопку с ID buttonPlay:

И придаём ей возможность «слушать» нажатие по ней:

В конце, в методе onClick мы с помощью класса Intent отправляем пользователя в класс GameActivity, который в своём коде устанавливает в качестве экрана пользовательский интерфейс, созданный нами в файле activity_game.xml:

Цукерберг рекомендует:  Монетизация мобильного приложения с помощью рекламы

Теперь, когда мы немного изучили азы обработки событий, нам нужно изучить больше язык Java. Переходите к следующему уроку – в нём мы рассмотрим еще несколько операторов (помимо тех, что мы уже знаем), используя которые мы научим наше приложение не только задавать вопрос пользователю, но и реагировать на ответ.

Как Android запускает MainActivity

Недавно я провел исследование о main() методе в Java и то, как он служит точкой входа для любого приложения Java. Это заставило меня задуматься, а как насчет Android-приложений? Есть ли у них основной метод? Как они загружаются? Что происходит за кулисами до выполнения onCreate()? Майкл Бэйли очень подробно рассказал о том, как работает Main Thread, так что это быстрый обзор его доклада плюс дополнительная информация из Android Open Source Project (AOSP).

В этой статье мы рассмотрим:

  1. Что происходит от нажатия на иконку приложения до запуска MainActivity
  2. Найдем основной метод приложения и узнаем, как основной поток (он же UI, он же Main Thread) получает свое назначение.
  3. Рассмотрим роль, которую играют Looper & Handler в передаче сообщений, которые в конечном итоге приводят к созданию вашей Activity.

Что происходит при запуске приложения

1 Схема запуска приложения

Между вызовом метода main() и onCreate() в нашем MainActivity примерно 15 шагов, и в этой статье мы пройдем по ним. На рисунке 1 изображена общая схема запуска приложения, показывающая различные классы взаимодействия сверху и соответствующую цепочку методов. Шаги пронумерованы, и когда я обращаюсь к ним, я буду использовать следующие обозначения Process3 или Process14

Рисунок 1: Схема запуска приложения по шагам от вызова main() до onCreate() в MainActivity

2. Класс ActivityThread

В классе ActivityThread чуть более 6500 строк. Для краткости я определил самые важные для нас части. Давайте рассмотрим, что делает этот класс и связанный с ним основной метод, чтобы запустить нашу Activity

Рисунок 2: Метод main() в ActivityThread, который служит точкой входа для запуска вашего приложения.

Как видно в коде: метод main() выполняет три важных дела:

1. Подготавливает основной Looper (MainLooper) (Process 2)
2. Настройка Handler’a (Process 4)
3. Вызов метода Looper.loop() в главном потоке (MainThread) (Process 6)

2.1 Подготовка main looper (Process 2–3)

Основной Looper задается вызовом Looper.prepareMainLooper() (см. Строку 8 в коде). Это отмечает текущий случайный поток, который выполняет всю работу по вызову метода main() в качестве основного потока приложений. Именно так и именно здесь определяется знаменитый главный поток для приложения в Android!

2.2 Вызов Handler’a (Process 4-5)

Внутри класса ActivityThread существует приватный внутренний класс H, да-да, все верно, просто H, который наследуется от класса Handler (см. рис. 4 и 7). В 12й строке экземпляр H-обработчика устанавливается как главный Handler потока. Что очень интересно знать о классе H, как вы сами увидите позже, это то, что он содержит более 50 определений состояния/событий, в которых может находиться ваше приложение, например LAUNCH_ACTIVITY, PAUSE_ACTIVITY, BIND_SERVICE и т.д.

2.3 Вызов метод loop() у Looper’а (Process 6–7)

После назначения главного потока в этом же главном потоке, для того чтоб мы могли в нем что-то выполнять, вызывается метод Looper.loop() (см. Строку 20). Это начинает выполнение сообщений в очереди сообщений Loopers. Теперь главный поток запущен и может начать обработку задач из очереди.

Обратите внимание, что в строке 18, если выполнение кода пойдет дальше чем Looper.loop() в 17 строке вдруг и приложение выйдет из цикла, то будет брошено исключение RuntimeException. Это говорит о том, что метод loop() в идеале никогда преждевременно не заканчивается. Мы увидим как это в следущем разделе.

3. Бесконечный loop() в Looper’е (Process 7,8,9)

Рисунок 3: Код внутри метода loop() в классе Looper’e

Как мы видим в коде, в методе Looper.loop() есть очередь сообщений (строка 10) и внутри цикла вызывается queue.next(). MessageQueue заполняется Handler-‘ом, о котором мы говорили в предыдущем разделе (см. Process 8). Обратите внимание на интересное описание условия в цикле for — здесь нет аргументов, только две точки с запятой говорят что это бесконечный цикл. Поэтому Looper в идеале никогда не заканчивается, если данное сообщение не null.

Итак, теперь мы определили главный поток, выполняемый благодаря Looper, мы также видели, что Handler добавляет сообщения в цикл Looper.loops() и обрабатывает сообщения. Давайте посмотрим, как они вместе вызывают нашу Activity.

4. Запуск MainActivity (Process 10 to 15)

Важно помнить, что этот бесконечный цикл и обработка сообщений выполнялись в main() методе класса ActivityThread, потому что именно там они были вызваны (см. в коде строки с 12 по 17). Мы поверхностно просмотрели Loopers, MessageQueues и Handlers, чтобы вникнуть в контекст. Итак, давайте вернемся к классу ActivityThread, в частности, к внутреннему классу H, о котором мы говорили ранее, который действует как основной Handler главного потока.


Итак, у нас есть Looper, передающий сообщения нашему Handler’у, давайте узнаем, как эти сообщения обрабатываются. Это делается внутри класса H. Этот класс содержит метод handleMessage(Message msg). Помните, что все классы, которые наследуются от Handler, должны переопределить этот метод.

Рисунок 4: Приватный внутренний класс H и его handleMessage() метод

Как видно в коде, в 8й строке есть оператор switch, в котором определяется обработка входящего сообщения по его содержимому.

Один из случаев (cases) включает в себя запуск активности (строка 11), что интересно, так это то, что этот метод предназначен для обработки около 50 случаев, которые варьируются от возобновления, приостановки, запуска Activity, привязки Service’ов, обработки Receiver’ов, предоставления предупреждений lowMemory или trimMemory, когда память устройства заполняется и т. д.

В case LAUNCH_ACTIVITY вызывается метод handleLaunchActivity(), как показано в строке 13, см Process11 на схеме. Затем этот метод вызывает другой метод, называемый performLaunchActivity(), который возвращает объект Activity (см. Рис. 5, строка 7).

Рисунок 5: Метод handleLaunchActivity() в котором создается Activity

Метод performLaunchActivity() добавляет в Activity важную информацию, такую как Instrumentation, Context, Component, а также Intent; а также задает Application. Затем этот метод вызывает Instrumentation.callActivityOnCreate() (Process 13), который является последним этапом перед вызовом метода onCreate() в Activity (Process 14-15, см. Рисунок 5 (код), строки 8-10).

Рисунок 6: Класс Instrumentation наконец запускает Activity

На данный момент ваша Activity загружена c множеством полезных переменных и методов, которые можно использовать для создания вашего нового удивительного приложения для Android! Все это благодаря ActivityThread, умной работе Handler’a и Looper’a, и огромному классу Activity в 7600 строк кода, который позволяет аттачить фрагменты, получить контекст и легко управлять View’s — и много еще чего.

Запуск другой Activity — второго окна android-приложения

В этом уроке

Вы также должны прочитать

После завершения предыдущего урока, у вас есть приложение, которое показывает активити (один экран) с текстовым полем и кнопкой. В этом уроке вы добавим код к MainActivity , который запустит новую активити , когда пользователь нажмет на кнопку Отправить..

Ответить на кнопку Отправить

Чтобы ответить на событие нажатия кнопки, откройте fragment_main.xml файла макета и добавьте android:onClick атрибут к элементу:

android:onClick значение атрибута, «sendMessage» , это имя метода в вашей активити , который система вызывает когда пользователь нажимает кнопку.

Откройте MainActivity класс (расположенный в каталоге проекта src/ ) и добавьте соответствующий метод:

Чтобы система смогла найти этот метод с именем, заданным в android:onClick , сигнатура должна быть именно такой, как вы видели. В частности, метод должен:

  • Быть public
  • Имейте void в качестве возвращаемого значения
  • Иметь View в качестве единственного параметра (это будет View , на котором нажали)

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

Создать Intent

Intent это объект, который обеспечивает связывание отдельных компонент во время выполнения (например, двух активити ). Intent представляет «намерение что-то сделать». Вы можете использовать интент для широкого круга задач, но чаще всего они используются, чтобы начать другую активити .

Внутри sendMessage() метода, создайте Intent для запуска активити под названием DisplayMessageActivity :

Для этого требуется импортировать Intent класс:

Полезный совет: В Eclipse, нажмите Ctrl + Shift + O для импортирования недостающих классов (Cmd + Shift + O на Mac). В Android Studio команда для импорта Alt+Enter.

Конструктор, используемый здесь принимает два параметра:

  • Context в качестве первого параметра( this используется, поскольку Activity класс является подклассом Context )
  • Class компонента приложения, в который система должна доставить Intent (в данном случае активность, которая должна быть запущена)

Отправка intent в другие приложения

Intent, созданный в этом уроке считается явным, поскольку Intent указывает точный компонент приложения, в которое интент следует отправить. Тем не менее, интенты также могут быть неявными, в этом случае Intent не указывает нужный компонент, позволяя любой программе установленной ​​на устройстве отвечать на интенты, пока она удовлетворяет спецификациям мета-данных действия, задаваемыми в различных Intent параметрах. Для получения дополнительной информации читайте курс Взаимодействие с другими приложениями.

Примечание: Ссылка на DisplayMessageActivity вызовет ошибку, если вы используете интегрированную среду разработки, такую как Eclipse например, потому что класс еще не существует. Игнорируйте ошибку на данный момент; вы скоро создадите класс.

Intent не только позволяет начать другую Activity, но также может выполнять связь данных в Activity. В sendMessage() методе, используйте findViewById() для получения EditText элемента и добавьте его текстовое значение в Intent:

Примечание: Вам необходим оператор импорта для android.widget.EditText . Вы определите EXTRA_MESSAGE константу буквально сейчас.


Intent может нести коллекцию различных типов данных в виде пары ключ-значение, называемых Extras. Метод putExtra() принимает имя ключа в первом параметре и значение во втором параметре.

Для того, чтобы Activity смогла запросить дополнительные данные, вы должны определить ключ для дополнений вашего интента, используя общедоступную константу. Так что добавьте EXTRA_MESSAGE определение в начало MainActivity класса:

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

Запуск второй Activity

Для запуска активити, вызовите startActivity() и передайте в него ваш Intent . Система получает этот вызов и запускает экземпляр Activity указанный в Intent .

С помощью этого нового кода, полный sendMessage() метод, который вызывается кнопкой Отправить теперь выглядит следующим образом:

Теперь вам нужно создать DisplayMessageActivity класс для того, чтобы это работало.

Создание второй Activity

Для создания новой Activity в Android Studio:

В главном меню выберите File>New>Activity>Blank Activity.

Заполните поля в окне мастера создания активити:

  • Activity Name: DisplayMessageActivity
  • Layout Name: activity_display_message
  • Title: Моё сообщение
  • Hierarchial Parent: com.example.myfirstapp.MainActivity

Остальные поля оставьте по умолчанию. Нажмите Finish.

Для создания новой Activity в Eclipse:

  • Нажмите New на панели инструментов.
  • В появившемся окне, откройте Android папку и выберите Android Activity. Нажмите Next.
  • Выберите BlankActivity и нажмите Next.
  • Заполните информацию о Activity:
    • Project: MyFirstApp
    • Activity Name: DisplayMessageActivity
    • Layout Name: activity_display_message
    • Fragment Layout Name: fragment_display_message
    • Title: Моё сообщение
    • Hierarchial Parent: com.example.myfirstapp.MainActivity
    • Navigation Type: None

    Нажмите Finish.

Рисунок 1. Мастер новой активити в Eclipse.

Если вы используете инструменты командной строки, создайте новый файл с именем DisplayMessageActivity.java в проекте в src/ каталоге, рядом с оригиналом MainActivity.java файлом.

Откройте DisplayMessageActivity.java файл. Если вы использовали Android Studio или Eclipse для создания этой Activity:

  • Класс уже включает в себя реализацию требуемого onCreate() метода. Вы обновите реализацию этого метода позже.
  • Есть также реализация onCreateOptionsMenu() метода, но вам это не будет нужно в данном приложении, так что вы можете удалить его.
  • Есть также реализация onOptionsItemSelected() , который обрабатывает поведение панели действий для кнопки Вверх . Оставьте его как есть.
  • Может быть также PlaceholderFragment класс, который расширяет Fragment . Вам не нужен будет этот класс в окончательном варианте этой активити .

Фрагменты разбивают функциональность приложений и пользовательский интерфейс на модули, которые можно будет повторно использовать. Для более подробной информации о фрагментах см.Руководство по Фрагментам. Окончательный вариант этой активити не использует фрагменты.

Примечание: Ваша активити может выглядеть иначе, если вы не использовали последнюю версию ADT плагина. Убедитесь, что вы установили последнюю версию ADT плагина для завершения этого курса.

DisplayMessageActivity класс должен выглядеть следующим образом:

Android — Android. Проблема — не виден файл MainActivity.

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 и т.д.)

В этом уроке мы будем поворачивать экран. Эмулятор версии 2.3.3, который мы успешно применяли и будем применять для тестирования наших приложений, имеет глюк. Он не хочет корректно поворачивать экран. Поэтому вспомните, плз, урок 3 и создайте еще один эмулятор версии 2.2, например. Соответственно при создании проекта, тоже указываем версию 2.2. Скрины сделаны на версии 2.3.3 — не обращайте внимания на это.

Создадим новый проект:

Project name: P0051_LayoutFiles
Build Target: Android 2.2
Application name: LayoutFiles
Package name: ru.startandroid.develop.LayoutFiles
Create Activity: MainActivity

При разработке каждому Activity сопоставляется одноименный java-класс (наследник класса android.app.Activity). При запуске приложения, когда система должна показать Activity и в дальнейшем работать с ним, она будет вызывать методы этого класса. И от того, что мы в этих методах накодим, зависит поведение Activity.

При создании проекта мы указывали, что надо создать Activity с именем MainActivity

При использовании старого визарда это выглядело так:

В новом визарде — чуть по другому. На одном экране галка, на другом — имя:

Мы попросили создать Activity и Eclipse создал нам соответствующий класс (в дальнейшем мы научимся их создавать самостоятельно).

Давайте посмотрим этот класс: откроем двойным кликом файл src/ru.startandroid.develop.LayoutFiles/MainActivity.java

В нашем классе мы видим, что реализован метод onCreate – он вызывается, когда приложение создает и отображает Activity (на onCreateOptionsMenu пока не обращаем внимания). Посмотрим код реализации.

Первая строка:
super.onCreate(savedInstanceState); – конструктор родительского класса, выполняющий необходимые процедуры, его мы не трогаем.

Нас интересует этот код:
setContentView(R.layout.main);

Метод setContentView(int) – устанавливает содержимое Activity из layout-файла. Но в качестве аргумента мы указываем не путь к нашему layout-файлу (res/layout/main.xml), а константу, которая является ID файла. Это константа генерируется автоматически здесь gen/ru.startandroid.develop.LayoutFiles/R.java.

Этот файл можно открыть и посмотреть, но менять его не стоит. В R классе будут храниться сгенерированные ID для всех ресурсов проекта (из папки res/*), чтобы мы могли к ним обращаться. Имена этих ID-констант совпадают с именами файлов ресурсов (без расширений).

Откроем res/layout/main.xml, посмотрим, что там


А мы сами дописали путь и визард сам добавил атрибут направо.

Жмем Finish и получаем готовый файл.

Поместите этот xml-код в файл и сохраните файл, чтобы получить такую же картинку, как выше:

version = «1.0» encoding = «utf-8» ?>

xmlns:android = «http://schemas.android.com/apk/res/android»
android:orientation = «vertical»
android:layout_width = «match_parent»
android:layout_height = «match_parent» >

android:id = «@+id/textView1»
android:layout_width = «wrap_content»
android:layout_height = «wrap_content»
android:text = «Горизонтальная ориентация экрана» >


android:layout_height = «wrap_content»
android:layout_width = «match_parent»
android:id = «@+id/linearLayout1»
android:orientation = «horizontal» >

android:text = «Button1»
android:id = «@+id/button1»
android:layout_height = «100dp»
android:layout_width = «100dp» >

android:text = «Button2»
android:id = «@+id/button2»
android:layout_height = «100dp»
android:layout_width = «100dp» >

android:text = «Button3»
android:id = «@+id/button3»
android:layout_height = «100dp»
android:layout_width = «100dp» >

android:text = «Button4»
android:id = «@+id/button4»
android:layout_height = «100dp»
android:layout_width = «100dp» >

Запустим приложение. Activity читает layout-файл, который мы указывали в методе setContentView, т.е. myscreen.xml и отображает его содержимое. Переключим ориентацию CTRL+F12. Activity понимает, что находится в горизонтальной ориентации, ищет в папке layout-land файл myscreen.xml и использует уже его.

В этом уроке мы:

разобрали, откуда Activity знает, какой layout-файл надо читать и настроили его на чтение другого файла
рассмотрели layout-файл с другого ракурса – XML
узнали, какой layout-файл используется при смене ориентации экрана (горизонтальная/вертикальная)

В следующем уроке:

изучим основные виды layout: LinearLayout, TableLayout, RelativeLayout, AbsoluteLayout

Intent — Android приложение с несколькими Activity

Хотите научиться делать приложения для андроид? В этом уроке создадим простое android приложение с несколькими активностями, используя intent — намерения, в Android Studio.

Создание проекта «My Activitys»

В Android Studio создадим новый проект, новое приложение — «My Activitys». Нажмем next, empty activity, сократим название Layout Name до main и нажмем finish. Система подготовит файлы проекта.

Редактируем внешний вид главной активности

В файле main.xml переместим выше текстовую строку элемента TextView «Hello World», в дальнейшем она нам еще понадобится.

В файле Strings.xml добавим несколько текстовых значений, строковая переменная act1 со значением — «Первая activity», так же добавим еще два строковых элемента act2 и act3, со значениями «Вторая activity» и «Третья activity». Очистим значение элемента TextView andro .

Из компонентов Layouts добавим RelativeLayout, на которую поместим кнопки: для вызова второй, третей активности, расположим их вертикально, проще это сделать через текстовую версию main.xml. Расположим их одну под одной, добавим третью кнопку, она нам нужна будет для закрытия формы. Так же в string.xml допишем текстовое значение btnClose со значением выход «Закрыть».

Присвоим кнопкам через «@string/» значения этих кнопок, сохраним наш проект.

Создаем новые Layout файлы

В папке res/layout добавим новый xml layout файл main2.xml и main3.xml, для описания разметки наших будущих activitys. Что бы не создавать снова внешний вид скопируем из файла main.xml и вставим в наши xml файлы разметку(в новых Activity должны быть ConstraintLayout и TextView). В main3.xml переприсвоим значение TextView act3, что бы у нас была надпись «Третья activity», вставим разметку и в main2.xml, так же присвоим TextView значение act2, соответственно это будет «Вторая activity». Сохраним проект.

Создание классов для Activity

В папке Java нашего проекта создадим дополнительно два класса: Activity2 И Activity3. Добавим в Activity2 код из MainActivity, что бы не набирать его снова, изменим имя класса и (R.layout.main) на (R.layout.main2), скопируем код и вставим в Activity3, исправим имя активности и layout main3. Сохраним проект.

Внесение активностей в манифест

В файле Andro , изменим категорию LAUNCHER на DEFAULT. Повторим процедуру для Activity3 изменив имя активности, сохраним файл.

Пишем основной код в MainActivity

Найдем наши кнопки:

При нажатии на первую кнопку будет запускаться «Вторая activity», продублируем код для остальных кнопок:

Создадим обработчик нажатия на кнопку(запуск второй активности):

Напишем обработчик нажатия на кнопку(запуск третьей активности):

Для btnClose так же напишем обработчик:


Сохраним наш проект.

Пуск в эмуляторе Android Studio

Наконец то запустим в эмуляторе наше приложение. Как мы видим при нажатии на кнопку «Вторая активность» запускается форма вторая активность, при нажатии на кнопку «Третья activity» запускается соответственно третья активность, при нажатии на кнопку «Закрыть» закрывается MainActivity она же главная форма в приложении. По такому же принципу устроены и действуют приложения с несколькими либо большим количеством Activitys через Intent передаются намерения и открываются формы новых окон, как если б это было в приложениях Windows.

Android — Android. Проблема — не виден файл MainActivity.

В файле MainActivity. java содержится исходный код главного окна, отображаемой при запуске приложения. В начале файла объявляется Java-пакет приложения: package ru. mail. korgik46. filemanager;

После объявления Java-пакета следует секция import, в которой определяются подключаемые библиотеки и классы:

import android. app. Activity;

import android. content. Intent;

import android.net. Uri;

import android. os. Bundle;

import android. view. Menu;

import android. view. MenuInflater;

import android. view. MenuItem;

import android. view. View;

Ключевое слово extends в объявлении класса главного окна свидетельствует о том, что класс MainActivity наследуется от базового класса Activity.

public class MainActivity extends Activity <

Финализированная переменная типа String HTTP_FOR_WEB содержит http-адрес страницы web-сервиса box

static final String HTTP_FOR_WEB = «http://www.box.com»;

При создании окна вызывается метод onCreate, разработчик имеет возможность определить действия при вызове этого метода.

public void onCreate (Bundle savedInstanceState) <

super. onCreate (savedInstanceState);

setContentView (R. layout. main);

В данном случае, при запуске окна устанавливается разметка ее окна из файла main. xml.

При выборе пункта «Мои файлы» вызывается метод navigationButtonClicked (View v):

public void navigationButtonClicked (View v) <

startNavigationActivity = new Intent (this, NavigationActivity. class);

При вызове данного метода создается экзепляр класса Intent (намерение) и запускается навигационное окно.

При выборе пункта «Мое облако» вызывается метод cloudButtonClicked (View v):

public void cloudButtonClicked (View v) <

launchIntent = new Intent (Intent. ACTION_VIEW, Uri. parse (HTTP_FOR_WEB));

При вызове данного метода создается экзепляр класса Intent (намерение) и происходит переход на страницу web-сервиса box с помощью встроенного браузера.

При создании меню опций вызывается метод onCreateOptionsMenu (Menu menu).

public boolean onCreateOptionsMenu (Menu menu) <

MenuInflater inflater = getMenuInflater ();

inflater. inflate (R. menu. icon_menu_for_main, menu);

return true;

При вызове метода onCreateOptionsMenu (Menu menu) на разметку главной окна с помощью объекта класса MenuInflater накладывается меню опций из файла icon_menu_for_main. xml.

При выборе пункта меню опций вызывается метод onOptionsItemSelected (MenuItem item).

public boolean onOptionsItemSelected (MenuItem item) <

switch (item. getItemId ()) <

case R. id. icon_menu_quit:

return true;

default:

return super. onOptionsItemSelected (item);

Если при вызове метода onOptionsItemSelected (MenuItem item) идентификатор выбранного пункта меню icon_menu_quit, происходит вызов метода quit ().

Определение метода quit (), определяющего закрытие главного окна и выход из приложения, выглядит следующим образом:

private void quit () <

Листинг файла MainActivity. java приведен в приложении А дипломного проекта.

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