2014-01-09 3 views
4

У нас есть проект Android NDK, который имеет три различные конфигурации сборки:Как настроить конфигурацию Eclipse для создания правильного, отлаживаемого приложения NDK?

  1. DEBUG - armeabi
  2. DEBUG - armeabi-v7a
  3. RELEASE - aremabi + armeabi-v7a

Зададим отдельные отладочные конфигурации aremabi и armeabi-v7 из-за известной ошибки в загрузчике Android, где, если указано более одного EABI, отладчик может запустить неправильную версию приложения EABI, и никакие нативные точки останова никогда не будут удалены (More details here, at the end of the document).

В прошлом мы отредактировали файл Application.mk и указали желаемый EABI с помощью переменной APP_ABI.

Мы хотели бы избежать этого редактирования руководства и воспользоваться конструкциями сборки Eclipse и выбрать правильную настройку EABI автоматически.

До сих пор, у нас есть рабочий раствор, добавляя условные к Application.mk файлу

Вот как наш Application.mk выглядит:

ifeq ($(BUILD_CONFIG),RELEASE) 
    APP_OPTIM := release 
    APP_ABI := armeabi armeabi-v7a 
else ifeq ($(BUILD_CONFIG),ARMEABIV7A_DEBUG) 
    APP_OPTIM := debug 
    APP_ABI := armeabi-v7a 
else ifeq ($(BUILD_CONFIG),ARMEABI_DEBUG) 
    APP_OPTIM := debug 
    APP_ABI := armeabi 
endif 

Кроме того, мы настроили команду сборки строки компилятора в Eclipse, так что соответствующая переменная BUILD_CONFIG передается скрипту make.

Это очень хорошо работает для целей компиляции, но проблема начинается, когда мы пытаемся отладить приложение. Дело в том, что мы не знаем, как передать переменную BUILD_CONFIG в сценарий ndk-gdb.

Выполнение команды ndk-build DUMP_APP_ABI всегда будет возвращать ARMEABI (ожидается, поскольку мы явно не определяющий параметр BUILD_CONFIG), и, насколько я понимаю, это значение, которое ndk-gdb читает для того, чтобы решить, какую версию приложения будет запускается отладчиком.

Неужели кому-то удалось получить эту работу или иметь альтернативное решение, в котором мы можем получить компиляцию и отладку, правильно работающую с конфигурациями сборки Eclipse? Запуск команды, которая исправляет или переименовывает файл Application.mk, является возможностью, но мы не знаем, как это сделать.

ответ

5

У Android 4.0 есть ошибка. Если вы предоставите код armeabi и armeabi-v7a, тогда код armeabi загружается, даже если у вас есть совместимый с ARMv7 процессор. Android 4.0 игнорирует armeabi-v7a, когда armeabi доступен.

Именно поэтому вы можете создать 2 версии вашей библиотеки, ориентированные на armeabi (ARMv5)

Но нет ARMv5 процессоров (HTC Hero) Так большинство процессоров являются ARMv6 или ARMv7

Вы должны обнаружить ваш процессор в Java и загрузите собственный собственный lib. Выполнение этих действий даст вам возможность контролировать то, что .so загружено точно. Вы могли бы создать lib с поддержкой NEON.

+0

Большое спасибо Артему за ваш ответ. В самом деле, мы добавили правильные шаги для управления этой ошибкой во время выполнения, которую вы описываете. То, что мы ищем, на самом деле является решением для компиляции, которое позволяет нам выбирать тип сборки (отладка или выпуск) и спецификацию eabi (ARM или ARMV-v7) без необходимости вручную редактировать файлы .mk. Мы предпочли бы выбрать конфигурационную сборку и полностью автоматизировать работу, включая интегрированную отладку. Я попытаюсь проанализировать скрипт ndk-gdb, чтобы узнать, могу ли я изменить логику синтаксического анализа, которая определяет текущую настройку APP_ABI. Ура! –