Можно ли отлаживать C/С++ в Android Studio?
Я пишу приложение для Android, которое включает в себя код C/С++, который компилируется вместе с кодом Java. Мое приложение рушится во время выполнения собственного кода.
Есть ли способ перейти через исходный код Android C/С++ и проверить переменные, как это возможно с источником Java?
Я не обязательно ищу способ проникнуть через источник из Android Studio. Это, безусловно, идеальное решение, однако, если мне нужно использовать внешний инструмент после запуска приложения из Studio, это прекрасно. Я хочу, чтобы можно было выполнить выполнение поочередно и проверять переменные.
Android Studio 1.0.2
Android NDK r10d
Редактирование: Откроем от немедленного ответа "Использовать Eclipse с плагином ADT", позвольте мне добавить дополнительные требования.
Этот проект начался как проект Eclipse ADT. Однако теперь я перешел на Android Studio. Мой проект теперь построен с использованием Gradle, и моя структура каталога проекта отражает это. Я готов использовать Eclipse; Я не, желающий изменить свою структуру проекта, чтобы вернуться к Eclipse из Android Studio. Если есть способ открыть проект Android Studio в Eclipse и отладить его таким образом, пожалуйста, уточните этот процесс.
Ответы
Ответ 1
Начиная с версии 1.3+ Preview Android Studio поддерживает отладку С++, цитируя Android M Developer Preview и инструменты:
Самое примечательное - это очень востребованная функция от нашего Android NDK и разработчиков игр: редактирование кода и отладка кода C/С++. На платформе JetBrains Clion плагин Android Studio NDK предоставляет такие функции, как рефакторинг и завершение кода для кода C/С++ вместе с вашим кодом Java. Поддержка кода Java и C/С++ интегрирована в один опыт разработки бесплатно для разработчиков приложений Android.
Ответ 2
[ОБНОВЛЕНИЕ]
По состоянию на июль 2015 года Android Studio DOES поддерживает NDK.
Подробнее об этом можно узнать на этой ссылке.
[СТАР]
NDK еще не поддерживается в Android Studio.
Когда нам нужно иметь дело с NDK, единственным решением является использование Eclipse.
ИЗМЕНИТЬ
В основном мы поддерживаем проект Eclipse с функцией NDK (карта в нашем случае) и Gradle с другими (не картами) функциями. Итак, все, что нужно сделать с NDK, мы делаем в Eclipse, а затем включаем изменения в проект Gradle.
Чтобы быть более точным, внутри каталога /src/main/
мы создали другой каталог с именем jniLibs
и поместили скомпилированный файл *.so
в папки, специфичные для архитектуры (armeabi-v7a, armeabi, x86...). Затем в основном классе проекта Gradle просто добавлена строка
static {
System.loadLibrary("OurNDKLibName");
}
Вы можете добавить эту строку только один раз для каждого проекта. Возможно, я ошибаюсь, но у нас не было никаких проблем для этого.
Ответ 3
Это не не было работает не очень хорошо.
hello-jni не удалось выполнить с:
Starting LLDB server: run-as com.example.sample
/data/data/com.example.sample/lldb/bin/start_lldb_server.sh
/data/data/com.example.sample/lldb
/data/data/com.example.sample/lldb/tmp/platform.port1442695333842 "lldb
process:gdb-remote packets"
Error while launching debug server on device:
com.android.tools.ndk.run.DebuggerContext$StartServerException:
java.lang.IllegalStateException: Failed to read platform port
/data/data/com.example.sample/lldb/tmp/platform.port1442695333842
Я использую 1.4RC1
compileSdkVersion 23
buildToolsVersion "23.0.1"
И указана конфигурация запуска "app-native" @Gerry. Это почти там, но я не могу найти никаких следов каталога lldb
в папке личных данных приложения. Я нахожу 400kb gdbserver в каталоге lib
, связанном оттуда, с моим собственным *.so
. К сожалению, опция для отладки с gdb вместо lldb прошла с обновлением от 1.3 до 1.4. NDK 10e отправляет двоичный файл gdbserver 400kb в ndk\prebuilt\android-arm\gdbserver
, который он (я думаю). 15 сентября была обновлена утилита gdb debug howto https://github.com/mapbox/mapbox-gl-native/wiki/Android-debugging-with-remote-GDB. Это сложнее, чем logcat отладки IMO, но текущая тема, извините за это, но я не верю, что lldb на самом деле работает.
Я запустил hello-jni и пришел к такому же выводу.
Поэтому, отвечая на ваш вопрос, пока не удается отладить C/С++ в Android Studio. Извините, что это был не тот ответ, на который вы надеялись, и я надеюсь, что окажется ошибочным с неопровержимым доказательством обратного, но прямо здесь, прямо сейчас, никаких шансов!
UPDATE Я поднял issue, где мне дали исправление для одного телефона.
UPDATE2 Слишком рано говорить, что это экспериментально, но иногда я не могу подключиться, часто, если не всегда выходить из строя и прерывать порядок с бессмысленными значениями параметров. Я просто установил условную точку останова, которая не срабатывала, но logcat показывает, что она должна. Первоначально я предполагал, что это была моя логическая ошибка, но она идет глубже.
Просто ударить точки останова на всех очень полезно, но это все еще на миллион миль меньше отладки Java или отладки Vis Studio С++.
UPDATE3 Вернулась к стабильной версии 1.3.1, так как версия канала Canaray приостанавливалась для разрыва каждого нажатия клавиши. Хотя встроенная отладочная сборка, по крайней мере, запускается с помощью моего "фиксированного" телефона, никакие точки останова не попадают даже в hellojni, или немного расширенную версию, чтобы дать больше возможностей. Я привык к logcat сейчас, но у меня были лучшие возможности для дедушки с Android, NDK и Eclipse. Более сложное решение также легче сломать, но, по крайней мере, оно работает.
Ответ 4
Да, Android Studio поддерживает отладку С++, по крайней мере, с помощью Android studio 1.5.1 и android-ndk-r10e.
В старые времена вам придется писать make файлы Android.mk и Application.mk, чтобы создать код на С++ в Android Studio. Они вам больше не нужны. Пока вы помещаете их в папку jni, gradle сможет ее поднять и скомпилировать. Вы должны увидеть что-то вроде следующего:
А также позволяет установить точку останова и отладить ее.
Вы должны следовать это пошаговое руководство и узнать больше об этом. И подробнее о документации здесь. Я загрузил полный рабочий пример, чтобы вы могли скачать и попробовать его на GitHub.
Ответ 5
С Android Studio 1.4 от tools.android.com возможна отладка. Когда вы открываете/создаете проект с кодом С++ [jni] в нем, студия Android создаст новую конфигурацию, что-то вроде $(module_name) -native
Я бы выбрал эту конфигурацию, синхронизацию gradle, сборку, установку точки останова и т.д. и запуск ее с помощью Android Studio. После долгого ожидания мой отладчик подключен, приложение разбито на [Я думаю, вы могли бы также установить точку останова в это время]; этот перерыв не на моих постах, я отпустил его в андроид-студию, и моя точка останова попала. Надеюсь, что это поможет
Некоторые образцы должны работать с отладчиком android.
Ответ 6
да! можно отладить собственный код в студии android. Начиная с обновлений Android Studio 2.2+ поддержка встроенных инструментов для отладки собственного кода.