2016-01-05 3 views
0

Короткий вопрос:Android NDK build-host-executable.mk: Нет такого файла или каталога

Я пытаюсь создать приложение, которое имеет зависимость JNI, используя Eclipse, ADT и NDK r10e (ток версия). Зависимость JNI (по-видимому) создает двоичный файл для запуска на хосте сборки, используя build-host-executable.mk из NDK. Однако этот сценарий, похоже, был удален в последних версиях NDK. Что я делаю?

Длинный вопрос:

Зависимость JNI является platform/external/srec от AOSP, который поставляется с Android.mk файла (на самом деле, некоторые из них).

Я создал Eclipse для создания собственных частей в соответствии с инструкциями here и скопировал дерево кода JNI в каталог исходного дерева моего приложения jni. Кроме того, я должен был изменить jni/Android.mk, добавив следующую строку:

export TARGET_BUILD_TYPE := debug 

, который, как я понимаю, будет устанавливаться AOSP набора инструментов, но не устанавливается при сборке из Eclipse.

Однако, я получаю следующее сообщение об ошибке:

android-ndk-r10e/build/core/build-host-executable.mk: No such file or directory 

Это вызвано линии в одном из моих Android.mk файлов:

include $(BUILD_HOST_EXECUTABLE) 

НДК определяет BUILD_HOST_EXECUTABLE в build/core/build-all.mk:

BUILD_HOST_EXECUTABLE  := $(BUILD_SYSTEM)/build-host-executable.mk 

Однако build_host_executable.mk является ab отправленный из каталога build/core (а также другие сценарии build-host-*.mk, объявленные в окружающих линиях).

погуглить вокруг немного, я считаю, что этот сценарий, кажется, присутствует в более ранних версиях NDK (по крайней мере до NDK r7 R7b), но, кажется, отсутствует в более поздних версиях (возможно, так как R10b). JNI lib использовался приложением (теперь оставленным) Voice Dial. Последний раз он совершил в декабре 2014 года, хотя последнее реальное изменение кода могло произойти в июне 2014 года. AOSP прекратил строить его к июню 2015 года. Сравнив это с историей выпуска NDK, он, возможно, никогда не был построен против версий NDK позже, чем r9d или, возможно, r10.

NDK r7b Я считаю, что это исправленная версия, к которой добавлена ​​поддержка целевой цели, также см. Также https://github.com/flyskywhy/android-ndk-host. Похоже, поддержка в этом была запланирована в NDK, а некоторые заглушки добавлены, но она никогда не была полностью реализована. Это дает мне возможность либо построить материал хоста с помощью локальной инструментальной цепочки, либо исправить NDK r10e, чтобы добавить целевую поддержку хоста.

С другой стороны, этот пакет был частью AOSP на некоторое время (Cyanogenmod включил его до KitKat и опустил его на Lollipop), поэтому инструментальная цепочка AOSP должна была быть способна ее создать. Любые указатели на эту инструментальную цепочку? Возможно, вы можете извлечь соответствующие части из инструментальной цепочки AOSP и добавить их в пакет.

+1

Что произойдет, если вы уроните последнюю версию build -host-executable.mk в build/core? –

+1

Возможно, попробуйте создать исполняемые файлы хоста без NDK, т. Е. Со стандартным make & gcc? Поскольку они не предназначены для работы на Android, они не могут действительно зависеть от NDK ... их можно было бы построить изолированно. Это потребует де-Android для make-файлов, хотя ... –

+0

@ReubenScratton У меня есть ссылка на r7b по адресу https://github.com/flyskywhy/android-ndk-r7b, вам неизвестны какие-либо более поздние версии? Google, кажется, предлагает только текущий ... – user149408

ответ

1

Зависимость JNI взята из дерева кода AOSP.Инструментальная цепочка, используемая AOSP, отличается от NDK, хотя оба они построены вокруг набора макросов GNU make. Формат для Android.mk (их эквивалент файла) намеренно схож между обоими, так что во многих случаях проект может быть построен либо с помощью инструментальной цепочки.

Один случай, для которого это не будет работать, - это цели хоста, то есть создание двоичных файлов (исполняемых файлов или библиотек), предназначенных для запуска на хосте сборки, а не на устройстве Android. Инструментарий AOSP имеет такую ​​поддержку, но NDK этого не делает. Смутно, у NDK есть некоторые заглушки для этой функциональности (включая определения для BUILD_HOST_EXECUTABLE и тому подобное), но реализация отсутствует.

Существует три варианта. Имейте в виду, что создаваемый вами пакет может зависеть от других пакетов из исходного кода AOSP, которые вам также необходимо будет создать.

  • Создайте собственный код (или целевые объекты) с помощью инструментальной цепочки AOSP, как описано в this answer. Этот подход, скорее всего, будет успешным, так как это инструментальная цепочка, для которой был разработан пакет. Он требует, по крайней мере, пакетов, содержащих средства сборки, размер которых составляет несколько гигабайт. Вы можете получить весь исходный код AOSP, как описано here, который должен предоставить вам все необходимые вам зависимости, но это позволит загрузить около 50 гигабайт (!) Данных.
  • Существует исправленная версия NDK, которая добавляет поддержку целям хоста here (или просто макросов here). Тем не менее, он основан на устаревшем NDK r7b и имеет последнее завершение в 2012 году - вы будете работать с инструментальной цепочкой, которая несколько экзотична и больше не поддерживается. Кроме того, вам нужно будет определить свои зависимости вручную, исследуя пакет.
  • Ditch Android.mk файлы, которые строят цели хоста и создают их с помощью обычной цепочки GNU. Введение в это можно найти here. Вы можете изменить более высокий уровень Android.mk, чтобы вызвать «другую» инструментальную цепочку для целей вашего хоста, чтобы вы могли автоматизировать всю сборку. Все это может быть очень много, если контент Android.mk очень сложный, но это одноразовая работа, после чего ваш код будет строиться со стандартными инструментальными цепочками. Как и в предыдущем подходе, вам нужно будет определить свои зависимости вручную. Зависимости, которые необходимы для цели хоста, могут быть проще, хотя, если они являются стандартными библиотеками, которые были перенесены на Android, так как может быть версия для восходящего потока, предназначенная для создания с помощью инструментальной привязки GNU.
+0

Не удается загрузить 50 ГБ ASOP. Будет ли исправлена ​​версия –

Смежные вопросы