Можно ли отлаживать C/C++ в Android Studio?
Я пишу приложение для Android, которое содержит код C/C++, который компилируется вместе с кодом Java. Мое приложение падает во время выполнения нативного кода.
Есть ли способ пошагового просмотра источника Android C/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 и отладить его таким образом, уточните этот процесс.
6 ответов
Начиная с версии 1.3+, Android Studio поддерживает отладку C++, цитируя Android M Developer Preview & Tools:
Наиболее заметной является очень востребованная функция от наших разработчиков Android NDK и игр: редактирование и отладка кода для кода C/C++. Плагин Android Studio NDK, основанный на платформе JetBrains Clion, обеспечивает такие функции, как рефакторинг и автозавершение кода для C/C++, наряду с вашим Java-кодом. Поддержка кода Java и C/C++ интегрирована в один опыт разработки для разработчиков приложений для Android бесплатно.
[ОБНОВИТЬ]
По состоянию на июль 2015 года Android Studio поддерживает 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");
}
Вы можете добавить эту строку только один раз за проект. Может быть, я ошибаюсь, но у нас не было никаких проблем для этого.
Это не было не очень хорошо работает.
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 GDB-сервер в lib
каталог, связанный оттуда, с моим собственным *.so
прямо к тому же. К сожалению, возможность отладки с помощью gdb вместо lldb была обновлена с 1.3 до 1.4. NDK 10e поставляет 400-гигабайтный двоичный файл gdbserver в ndk\prebuilt\android-arm\gdbserver
что это (я думаю). 15 сентября обновлено руководство по отладке gdb https://github.com/mapbox/mapbox-gl-native/wiki/Android-debugging-with-remote-GDB. Это сложнее, чем отладка logcat IMO, но актуальная тема, извините, что я так негативен, но я не верю, что lldb на самом деле работает.
Я побежал hello-jni и пришел к такому же выводу.
Поэтому, отвечая на ваш вопрос, пока нельзя отлаживать C/C++ в Android Studio. Извините, это был не тот ответ, на который вы надеялись, и я надеюсь, что он окажется неверным с убедительными доказательствами обратного, но прямо здесь, прямо сейчас, никаких шансов!
ОБНОВЛЕНИЕ Я поднял проблему, где мне дали исправление для одного телефона.
ОБНОВЛЕНИЕ2 Слишком рано говорить, что это экспериментально в конце концов, но я иногда не могу соединиться, часто, если не всегда, выходя из строя пошагового выполнения и точек останова с бессмысленными значениями параметров. Я просто установил условную точку останова, которая не сработала, но logcat показывает, что должен. Первоначально я предполагал, что это была моя логическая ошибка, но она идет глубже.
Простое достижение точек останова вообще очень полезно, но до отладки Java или отладки Vis Studio C++ все равно не хватает миллиона миль.
ОБНОВЛЕНИЕ3 Вернулись к стабильной версии 1.3.1, так как версия канала канарея делала паузу в унитазе при каждом нажатии клавиши. Хотя встроенная отладочная сборка, по крайней мере, запускается с моим "фиксированным" телефоном, ни одна точка останова не срабатывает даже в hellojni или в слегка расширенной версии, чтобы дать больше возможностей. Сейчас я привык к logcat, но у меня был лучший опыт отладки с Android, NDK и Eclipse. Более сложное решение также легче сломать, но, по крайней мере, оно работает.
Да, Android Studio поддерживает отладку C++ по крайней мере с Android Studio 1.5.1 и android-ndk-r10e.
В старые времена вам нужно было писать make-файлы Android.mk и Application.mk, чтобы создать код C++ в Android Studio. Тебе они больше не нужны. Пока вы помещаете их в папку jni, Gradle сможет взять ее и скомпилировать. Вы должны увидеть что-то вроде следующего:
А также позволит вам установить точку останова и отладить ее.
Вы должны следовать этому пошаговому руководству и узнать о нем больше. И читайте больше о документации здесь. Я загрузил полный рабочий пример, чтобы вы могли скачать и опробовать его на GitHub.
В Android Studio 1.4 с tools.android.com возможна отладка. Когда вы открываете / создаете проект с кодом C++[jni], Android Studio создает новую конфигурацию, что-то вроде $(module_name)-native
Я бы выбрал эту конфигурацию, синхронизировал gradle, build, установил точку останова и т. Д. И запустил ее с Android Studio. После долгого ожидания мой отладчик подключился, приложение не работает [я думаю, вы могли бы также установить точку останова в это время]; этот перерыв не в моих установленных точках останова, я отпустил его в андроид студии, и моя точка останова была достигнута. Надеюсь это поможет
Некоторые образцы должны работать с отладчиком Android
Да! можно отладить нативный код в андроид студии. Начиная с обновлений Android Studio 2.2+ поддержка встроенных инструментов для отладки нативного кода.