it-roy-ru.com

Можно ли отлаживать 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 и отладить его таким образом, уточните этот процесс.

23
Dirty Beach

Начиная с версии 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.

5
vitaut

[Обновление]

По состоянию на июль 2015 года Android Studio поддерживает NDK. 

Вы можете узнать больше об этом на эта ссылка


[OLD] NDK еще не поддерживается в Android Studio.

Когда нам приходится иметь дело с NDK, единственным решением является использование Eclipse. 

ПРАВКА

В основном мы сохраняем проект Eclipse с функцией NDK (в нашем случае, с картой), а проект Gradle с другими (без карты) функциями. Итак, все, что должно быть сделано с NDK, мы делаем в Eclipse, а затем включаем изменения в проект Gradle. 

Точнее, внутри каталога /src/main/ мы создали еще один каталог с именем jniLibs и поместили скомпилированный файл *.so в папки, специфичные для архитектуры (armeabi-v7a, armeabi, x86 ...). Тогда в основной класс проекта Gradle просто добавили строчку 

static {
    System.loadLibrary("OurNDKLibName");
}

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

6
sandalone

Это нене было не очень хорошо работает.

привет-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 размером 400 КБ в 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. Извините, это был не тот ответ, на который вы надеялись, и я надеюсь, что он окажется неверным с убедительными доказательствами обратного, но прямо здесь, прямо сейчас, никаких шансов!

UPDATE Я поднял проблему , где мне дали исправление для одного телефона.

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

Простое достижение точек останова вообще очень полезно, но до отладки Java или отладки Vis Studio C++ по-прежнему не хватает миллиона миль.

UPDATE3 Вернулся к стабильной версии 1.3.1, так как версия канала канарея делала паузу в унитазе при каждом нажатии клавиши. Хотя встроенная отладочная сборка, по крайней мере, запускается с моим «фиксированным» телефоном, ни одна точка останова не срабатывает даже в hellojni или в слегка расширенной версии, чтобы дать больше возможностей. Сейчас я привык к logcat, но у меня был лучший опыт отладки с Android, NDK и Eclipse. Более сложное решение также легче сломать, но, по крайней мере, оно работает.

3
John

Да, Android Studio поддерживает отладку C++ по крайней мере в Android Studio 1.5.1 и Android-ndk-r10e. 

В старые времена вам нужно было писать make-файлы Android.mk и Application.mk, чтобы создать код C++ в Android Studio. Тебе они больше не нужны. Пока вы помещаете их в папку jni, gradle сможет взять и скомпилировать их. Вы должны увидеть что-то вроде следующего: 

 enter image description here

А также позволит вам установить точку останова и отладить ее. 

 enter image description here

Вы должны следовать этому пошаговому руководству и узнать о нем больше. И читайте больше о документации здесь . Я загрузил полный рабочий пример, чтобы вы могли скачать и попробовать его на GitHub


2
Yuchen Zhong

С Android Studio 1.4 от tools.Android.com возможна отладка. Когда вы открываете/создаете проект с кодом C++ [jni], Android Studio создает новую конфигурацию, что-то вроде $ (module_name) -native 

Я бы выбрал эту конфигурацию, синхронизировал gradle, build, установил точку останова и т.д. И запустил ее с Android Studio. После долгого ожидания мой отладчик подключился, приложение не работает [я думаю, вы могли бы также установить точку останова в это время]; этот перерыв не в моих установленных точках останова, я отпустил его в Android-студии, и моя точка останова достигнута. Надеюсь это поможет
Некоторые примеры должны работать с отладчиком Android

0
Gerry