From netbeans to android

Разработка под Android в NetBeans IDE без плагинов. Часть 2

Продолжаем начатый эксперимент, посвящённый настройке NetBeans IDE для программирования под Android. В прошлый раз нам удалось создать проект в NetBeans, настроить систему сборки, а также сделать автоматический запуск приложения. Кроме этого мы немного посмотрели на то, как система сборки построена изнутри. Во второй части статьи мы пойдём дальше и посмотрим, как в NetBeans можно осуществлять отладку, создавать библиотечные проекты, а также добавлять библиотеки к проектам и работать с модульными тестами.

Отладка

Интересно, что отладку в NetBeans можно делать двумя способами. Первый способ даже не потребует никакого колдовства в ant. Второй будет немного посложнее настроить, но в некоторых случаях он пригождается, да и больше похож на то, что есть в Eclipse.

Способ №1

После того, как monitor открыт, нужно запустить приложение, если оно ещё не запущено, и посмотреть, через какой порт нужно подключаться к отладчику. Порт пишется напротив приложения. По умолчанию они имеют схему 860x. Можно также щёлкнуть одно из приложений, чтобы назначить ему порт 8700. После этого в NetBeans нужно подключиться к этому порту через команду Attach Debugger. Выбираем параметры Socket Attach, localhost, необходимый порт… И всё, дальше можно спокойно заниматься отладкой.

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

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

У этого способа отладки есть то преимущество, что можно подключаться и отключаться в любой момент. Это важно, потому что с подлкючённым отладчиком Dalvik VM начинает заметно тормозить. Иногда это бывает не критично, но не всегда, поэтому возможность дойти до определённой точки выполнения в программе без отладчика, бывает, вовсе и не лишнее.

Есть и ещё один инструмент, который помогает подключить отладчик именно в определённой точке. Можно, конечно, создать точку остановки по условию, но, как я уже говорил, с подключённым отладчиком всё работает очень не шустро. Поэтому можно в коде вставить вызов Debug.waitForDebugger() . Как только программа дойдёт до этого метода, она застопорится, и исполнение продолжится дальше только после подключения отладчика.

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

Способ №2

Второй способ будет действовать так же, как и в Eclipse: запускаем отладку, и запускается само приложение. После этого оно ждёт подключения отладчика, и только потом продолжает запуск. NetBeans нам поможет и здесь. Если попробовать выполнить отладку ( CTRL+F5 ), NetBeans предложит сгенерировать ant-файл, который подскажет ему, как её нужно проводить в нашем проекте. Именно это нам и нужно. После этого в подпапке проекта nbproject заведётся файл ide-file-targets.xml , содержимое которого нужно заменить на следующее:

Файл начинается с загрузки свойств из файла debug.properties , который нужно кинуть в ту же папку со следующим содержимым:

Теперь можно поразбираться, что этот файл делает. Основное задание здесь — это debug-nb , которое NetBeans запускает, когда начинается отладка, и зависит оно от заданий -init , -launch-monitor и -launch-debug . В -init ничего особенно интересного нет, задание просто загружает и проверяет переменные из файла debug.properties . А вот -launch-monitor уже позанятнее: нам ведь необходимо запустить monitor, если он ещё не запущен, и это задание как раз и берёт задачу на себя. В ant есть хорошее задание, которое позволяет посмотреть, слушает ли программа на определённом порте или нет — socket . По этому признаку как раз можно определить, работает ли monitor или нет. Если нет, то нужно его запустить и подождать (задание wait-for ). После запуска ещё стоит подождать секунды две для того, чтобы monitor начал принимать соединения (значение, возможно, придётся немного скорректировать в зависимости от конкретной конфигурации оборудования).

Читайте также:  Аврора стор для андроид

После этого можно запускать само приложение. В прошлой статье мы уже это проделывали из ant с помощью командной строки. Для этого используется команда adb shell am start -a android.intent.action.MAIN -n / . В этот раз разберём команду немного подробнее. adb shell — это команда, позволяющая работать напрямую с командной строкой внутри Android. am — это менеджер активностей, у которого есть довольно впечатляющий набор возможностей; о них можно почитать в официальной документации. Нам же нужна лишь команда start для запуска нужной активности, которую мы указываем после ключа -n , а ключ -a задаёт, как уже, наверное, стало понятно, намерение.

В файле custom_rules.xml уже есть задание, которое выдаёт нужные для запуска параметры: -find-main-activity . В этот раз нам нужно запустить приложение точно так же, как и в прошлый раз, но с ключом -D , чтобы после запуска приложение не сразу продолжало работу, а сначала подождало отладчик.

Таким образом, после выполнения всех этих махинаций к запуску debug-nb уже всё готово: работает monitor, приложение запущено и ждёт отладчик. Осталось только его подключить с помощью задания nbjpdaconnect . Как понятно из названия, это задание сугубо специфическое для NetBeans.

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

Добавление библиотек и создание библиотечных проектов

Библиотека может быть прекомпилированным jar-файлом, а может быть и отдельным проектом Android, который нужно компилировать перед включением в проект. Подключаются они, соответственно, разными способами.

В случае прекомпилированного файла шагов очень мало:

  1. Нужно бросить файл в папку libs основной папки проекта.
  2. В свойствах проекта на вкладке Java Sources Classpath необходимо добавить путь к файлу. На самом деле, можно этого и не делать, но тогда IDE нам не будет подсказывать по коду из этой библиотеки, что сводит на нет преимущества использования IDE.

В случае библиотечного проекта всё немного похитрее. Можно его добавлять командой (и это официальный способ), а можно добавлять строчкой в конфигурационном файле. Для тех, кто любит официальный способ, нужна следующая команда:

android update project -p -l

Попробуем добавить ради примера библиотеку поддержки v7 appcompat, которую Google сделали для тех, кто хочет видеть панель действий на версиях Android до 3.0. Она как раз распространяется не как прекомпилированный jar-файл, а как библиотечный проект, поскольку там есть дополнительные ресурсы. Допустим, что он лежит в той же папке, что и наш основной проект.

android update project -p KillerApp -l ../AndroidCompatibilityPackage-v7-appcompat

Всё! Можно уже компилировать проект. Если мы заглянем в файл project.properties , то обнаружим в этом конфигурационном файле строчку

Собственно, это всё, что та команда и сделала. Точно таким же способом можно добавлять новые библиотеки безо всякой команды, главное только не забывать увеличивать номер библиотеки на единичку: android.library.reference.2 , android.library.reference.3 и так далее.

Разумеется, как и с прекомпилированным файлом, нужно не забыть добавить на владке Java Sources Classpath упоминаемые в проекте папки исходников библиотечного проекта, а также библиотеки, которые использует он (если мы их также используем). То есть стоит добавить папки src , gen и jar-файлы в папке libs библиотечного проекта.

Что если мы хотим создать свой такой же проект? Создание библиотечного проекта происходит в точности так же, как и создание обычного проекта с тем исключением, что нужна немного другая команда:

android create lib-project -n -t android- -p -k

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

Создание проектов для тестов

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

android create test-project -p -n -m

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

android create test-project -p tests -n KillerAppTest -m ..

Читайте также:  Java net uri to android net uri

Дальше можно продолжить создание нового проекта в NetBeans точно так же, как и в случае обычного проекта. Но на этот раз мы сможем оставить на третьем шаге пункт test , когда мы назначаем задания ant разным пунктам меню. А вот из Run Project теперь стоит убрать launch и оставить только debug install , поскольку запускать нам тут всё равно нечего.

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

Для начала нужно сгенерировать файл для дополнительных заданий в NetBeans. Нам интересен запуск отдельных файлов, отладка и отладка отдельных файлов. Все эти действия можно сгенерировать нажатиями на CTRL+F6 , CTRL+F5 и CTRL+SHIFT+F5 . После этого в папку nbproject нужно опять закинуть файлы, как и при добавлении отладки в обычный проект по второму способу, только файл ide-file-targets.xml будет немного другой. Начало файла такое же, как и в случае отладки обычного проекта, поэтому весь файл целиком я не копирую. Желающие могут посмотреть его на BitBucket. А вот дальше у нас другие задания:

Задание run-selected-file-in-src нужно для запуска отдельных тестов. Оно использует макрос run-tests-helper , который определён в системе сборки Android с дополнительными параметрами. На самом деле, всё, что делает этот макрос — это запускает команду adb shell am instrument с параметрами для тестирования программы (да, это опять менеджер активностей). Мы добавляем к запуску команды аргументы -e class , так что аппарат не будет гонять все тесты без разбора, а сосредоточится на конкретном файле.

Дальше остались задания, в которых нам нужно выполнить отладку. Для того, чтобы её сделать, нужно запустить сначала тестирование с указанием подождать отладчик, а потом подключиться. Но тут есть маленькая загвоздка: запуск тестирования происходит с блокировкой, а нам нужно запускать другое задание. Нас спасёт задание parallel , которое запускает разные задания вместе. Результат оформлен как макро, чтобы можно было регулировать, с какими параметрами вызывается тестирование. Соответственно, наши задания для отладки просто его вызывают, с дополнительными параметрами, если нужно.

Теперь можно подвести итоги тому, что мы натворили. Суммарно получился очень неплохой объём возможностей:

  • Полноценная сборка и запуск проектов;
  • Генерация R.java вручную;
  • Запуск отладки проектов;
  • Добавление библиотек и библиотечных проектов;
  • Создание проектов для тестирования;
  • Запуск отдельных тестов с возможностью отладки;
  • Подсказки и автозаполнение.

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

  • Редактирование интерфейса;
  • Редактирование XML-файлов с подсказками;
  • Переход к объявлению ресурса.

Редактирование XML-файлов — это не так критично, но, разумеется, без WYSIWYG-редактора довольно грустно редактировать интерфейс. Поэтому я лично импортирую проект в Eclipse и редактирую интерфейс там, когда это требуется.

Ещё хочется сказать пару слов насчёт применимости подобных инструментов. В комменатриях к предыдущей статье подобные вопросы возникали, поэтому ещё раз напомню: это эксперимент. Если существует официальная система сборки через ant, независимая от IDE, то для меня было сложно удержаться и не попробовать с её помощью настроить инструмент, который изначально вовсе не был предназначен для работы с Android.

Кроме того, на самом деле, ведь необязательно пользоваться NetBeans, чтобы задействовать эту систему. После настройки проекта можно просто набирать в командной строке, например, ant debug install launch , чтобы собрать и запустить проект. И, в отличие от сборки самодельным скриптом, это будет полноценная сборка — в точности такая же, которую делает и Eclipse с ADT: с генерацией интерфейсов из AIDL, BuildConfig, RenderScript, zipalign, ProGuard и всем прочим. Что касается использования её для того, чтобы программировать в NetBeans, это уже, конечно, сильно на любителя. Но, в любом случае, мне лично было очень интересно провести этот эксперимент и надеюсь, что другим было интересно о нём прочитать.

Источник

Developing Android Apps with NetBeans, Maven, and VirtualBox

Join the DZone community and get the full member experience.

I am an experienced Java developer who has used various IDEs and prefer NetBeans IDE over all others by a long shot. I am also very fond of Maven as the tool to simplify and automate nearly every aspect of the development of my Java project throughout its lifecycle.

Читайте также:  Fifa 22 android дата выхода

Recently, I started developing Android applications and naturally I looked for a Maven plugin that would manage my Android projects. Luckily I found the maven-android-plugin which worked like a charm and allowed me to use Maven for developing my Android projects.

The Android Emulator from the Android SDK seemed unusably slow. Lucklily, I found a way to use an Android Virtual Machine for VirtualBox that worked nearly as fast as my native computer! This page documents my experiences.

Tested Environment

  • Dev machine: Ubuntu 11.04 Linux
  • IDE: NetBeans
  • VirtualBox: 4.0.8 r71778
  • Android SDK Revision 11, Add on XML Schema #1, Repository XML Schema #3 (from About in SDK and AVD Manager)
  • Android Version: 2.2

Overview of Steps

  1. Download and install the Android SDK on your dev machine
  2. Attach an Android Device to dev machine
  3. Configure and load your device for development and other use
  4. Create an initial Android maven project
  5. Connect Android Device to Android SDK
  6. Debug Android app using NetBeans Graphical Debuger

Download and Install Android SDK

  • Download and install the Android SDK on your dev machine as described here.
  • Make sure to set the following in dev machine

export ANDROID_HOME=$HOME/android-sdk-linux_x86 #Change as needed
export PATH=»$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH»

Attaching an Android Device to Dev Machine

If you have an actual device that is usually always best. If not, you must use a virtual Android device which usually has various limitations (e.g. no GPS, Camera etc.). The Android SDK makes it easy to create a new Virtual Device but the resulting device is painfully slow in my experience and not usable. Do not bother with this. Instead, create a virtual Android device using VirtualBox as described in the following steps:

I used the approach of configuring a HOST ONLY network adapater and a second NAT adapter on the Android VM within virtual box.

Configuring your Android Device

This section describes various things I did to setup a dev environment for my Android device:

  • Root the device. I used Universal AndRoot
  • Install ConnectBot so you have ssh and related network utilities

Creating Initial Android Maven Application

  • Create initial project using instructions here.
  • I found it best to create stub project structure using the maven-archtype-plugin and the archtypes at https://github.com/akquinet/android-archetypes/wiki

Connecting Android VM Device to Android SDK

In order for your code to be deployed from NetBeans IDE to Android Device and in order for you to monitor your deployed app from the Dalvik Debug Monitor (ddms) you need to connect your android VM device to the android sdk over TCP as described in the following steps.

  • On Android Device open the Terminal Emulator
  • Type su to become root (your device must be rooted for this
  • Type following commands in root shell:

setprop service.adb.tcp.port 5555
stop adbd
start adbd

adb tcpip 5555
adb connect 192.168.0.101:5555

For details on above steps see:

  • Set up port forwarding as described here http://redkrieg.com/2010/10/11/adb-over-ssh-fun-with-port-forwards/ (this is where I am most fuzzy)
  • Build your maven android project using Right-Click / Clean and Build

Now for the acid test whether you can deploy your app to the device from NetBeans IDE!

  • Right-click / Custom / Goal to show Run Maven dialog.
  • Enter android:deploy in Goals field.
  • Select Remember As button and enter android:deploy for its text field.

If all is well, the app will deploy to the device and will show up in its «Applications» screen.

Debugging Android App Using NetBeans Graphical Debugger

Once you can build and deploy your app to the real or virtual Android device, here are the steps to debug the app using NetBeans debugger:

  • On Device: Start the app (TODO: determine how to start app on device with JVM options so it can wait for debugger connection. This should be easy)
  • On Dev Machine run Dalvik Debug Monitor (ddms) in background: $ANDROID_HOME/tools/ddms &
  • Lookup your app in ddms and get its debug port. This is described here but does not address NetBeans specifically
  • In NetBeans do: Debug / Attach Debugger and specify the port looked up in ddms in previous step. You may leave rest of the fields with defaults. Click OK

Источник

Оцените статью