Eclipse ADT - неразрешенное включение jni.h
На моей платформе Windows установлены последние версии пакетов adt (20140321) и ndk (r9d). Установка настолько чиста, насколько это возможно. Переменные среды NDK_ROOT, PATH и т. Д. Все определены правильно.
Приложение, над которым я работаю, имеет собственный код C++. Код прекрасно работает как вне Eclipse, так и внутри Eclipse.
Проблема, однако, заключается в том, что редактор жалуется, что jni.h является неразрешенным включением.
Project ->Properties ->C/C++ General->PathsAndSymbols показывает включающие каталоги, и один из каталогов - C:\adt\ndk\platform \android-19\arch-arm\usr\include. Я проверил, что jni.h присутствует в этом каталоге.
Я уже проверил все другие сообщения на этом форуме, но не смог найти никаких конкретных шагов. Ценю ваше руководство. С уважением.
4 ответа
Я столкнулся с подобной проблемой с рабочим проектом с кодом Android NDK после обновления до Eclipse Kepler. Я наблюдал похожие вещи: файлы заголовков были бы правильно перечислены в разделе "включенные" в проекте, фактическая сборка (с помощью ndk-build) работала нормально, но редактор Eclipse не смог найти никаких заголовков в стандартных системных каталогах (все заголовки с < > скобки).
Я пробовал много разных исправлений, включая переключение наборов инструментов, восстановление индексов и т. Д., Но безуспешно.
Наконец, я полностью удалил природу C из проекта и добавил ее обратно через меню "Инструменты Android" в Eclipse.
Извлечение С природы:
Единственный способ, которым я смог найти надежное удаление природы C из проекта, - это ручное редактирование Eclipse. .project
файл для проекта.
Закройте проект Eclipse (например, выйдя из Eclipse).
Открой
.project
файл в текстовом или XML-редакторе. Будет минимум 2<buildCommand>
узлы, которые должны быть удалены. Удалить<buildCommand>
узел с именемorg.eclipse.cdt.managedbuilder.core.genmakebuilder
и все его дети, и<buildCommand>
узел с именемorg.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
и его дети. Наконец, удалите строки:<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.core.ccnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
Полностью удалить
.cproject
файл.
Добавление обратно родной природы Android
Снова откройте проект в Eclipse. Затем щелкните правой кнопкой мыши проект в Project Explorer и в контекстном меню "Инструменты Android" выберите "Добавить собственную поддержку...".
Добавить встроенную поддержку>
Глядя на изменения, внесенные в файлы.project и.cproject до и после этого изменения, выясняется, что он в первую очередь давал новые номера версий инструментам Android NDK. В любом случае, это решило проблему для меня.
После добавления встроенной поддержки щелкните правой кнопкой мыши проект, добавьте include в общий язык c/ C++ -> пути и символы >> include, например добавьте include как%NDK_HOME%\platform \android-19\arch-arm\usr\include
У меня была такая же проблема несколько дней назад. Я нашел исправление в другом вопросе здесь в stackru, но теперь я не могу найти ссылку.
В Eclipse: щелкните правой кнопкой мыши свой проект> Свойства> Общие сведения о C/C++> Анализ кода> Запуск и отключение обоих параметров ("Запускать со сборкой" и "Запускать по мере ввода").
Кажется, есть проблема с CDT и индексатором, делая это, вы скрываете проблему. Редактор все равно будет жаловаться, но теперь вы сможете запускать и отлаживать свое приложение.
Я решил это для adt-bundle-windows-x86_64-20140321:
- Никакие переменные окружения не установлены, просто указывается расположение NDK в разделе "Настройки"> "Android"> "NDK".
- Я создал новое, чистое рабочее пространство Eclipse.
- Удалил из моего проекта с кодом C++ следующие файлы / папки:
.settings
.classpath
.cproject
.project
project.properties
- Eclipse> New> Other> Android> Android Project из существующего кода> затем укажите папку с вашим проектом, позвольте Eclipse обнаружить его, установите флажок "Копировать проект в рабочую область" и нажмите Ok/Next, что угодно.
- Чистый проект.
- Щелкните правой кнопкой мыши проект> Инструменты Android> Добавить встроенную поддержку
- Перестройте, возможно, перезапустите рабочее пространство.
Также это решило проблему с Eclipse 4.3, ранее игнорировавшей систему сборки и определяемые пользователем флаги компилятора. Теперь сворачивание макросов зависит от этих флагов и т. Д. Работает нормально.
Если более общий - плагин NDK может правильно определить для вас правильные включения и все остальное, что требуется для нормальной работы, но вам нужно очистить свой проект от испорченной хрени.