2013-06-29 3 views
8

Я хотел бы упаковать приложение командной строки для Android в apk. У меня есть приложение с ndk-build, которое использует jni/Android.mk. Выходной файл находится в libs/armeabi/<MyApp>. У меня также есть здание apk с муравьем. Однако apk, похоже, не забирает приложение командной строки. Если я разархивирую apk, приложения там нет.Как упаковать приложение командной строки в apk?

Что мне нужно сделать, чтобы муравей включил предустановленное приложение командной строки?

Кроме того, что мне нужно для того, чтобы ant запускал ndk-build? (Это было уже ответили: Android NDK build with ANT script)

ответ

10

См. Android NDK build with ANT script.

Вы можете добавить двоичный код в APK с помощью aapt, если Ant не копирует его автоматически с libs/armeabi, см. Documentation for aapt element in Ant script.

Я считаю, что файл будет правильно извлечен до /data/data/your.package.full.name/lib с исполняемыми разрешениями.

Ant сборка включает стадию под названием «ApkBuilder», который только добавляет файлы из libs/armeabi, что шаблон матча ^.+\.so$ или gdbserver - последний только для отладки сборки.

Но это не достаточно, чтобы переименовать исполняемый «myexecutable.so»: этот файл не будет извлечен установщиком APK на устройстве.

Достаточно переименовать исполняемый «Lib myexecutable .so»: этот файл будет извлечен с помощью инсталлятор диспетчера пакетов APK на устройстве /data/data/your.package.full.name/lib, с исполняемыми разрешениями.

Я лично хотел бы дать этому не-фактически-библиотеке какое-то особое имя, например. lib...ffmpeg...so.

+0

Я сделал это, конечно, я могу добавить муравьиную задачу для запуска ndk-build, и она работает. Ant не копирует исполняемый файл автоматически. Я также могу добавить двоичный файл с помощью aapt (либо из командной строки, либо из муравья). К сожалению, полученный apk не устанавливается? (явно выраженная ошибка). Исполняемый файл определенно находится в apk, как можно проверить с помощью unzip. Это было полезно, но не полностью выполняло эту работу, есть ли у вас больше предложений? –

+0

@Alex какая ошибка? Можете быть более конкретными? –

+0

ОК, вот способ обмануть: назовите исполняемый «gdbserver», и он будет правильно упакован в каталог 'lib/armeabi' в APK и установлен в' /data/data/your.package.name/lib' на устройстве. Как вы заметили, есть два препятствия. Один, добавив двоичный код в APK, может быть выполнен как пользовательский шаг ANT, но вы должны позаботиться о его наличии до подписания APK. Второй шаг, на устройстве, может быть сложнее. –

2

В общем, вы должны поставить приложение командной строки в Assets папку, а затем использовать AssetManager для того, чтобы извлечь свой актив (не забудьте chmod его после экстракции!). Но проблема будет заключаться в том, чтобы извлечь его, потому что не каждый каталог в Android может хранить исполняемые двоичные файлы. На Android 2.2 я пробовал /cache, и он работает. Не скажешь о новых андроидах. Извините, не может давать никаких рекомендаций относительно муравьев.

+0

Я пытаюсь сделать это для Android 4.0/4.1/4.2. Исполняемые двоичные файлы в/data/local work. –

+3

/data/local - это запись (и, вполне возможно, также прочитанная), ограниченная многими релизами Android. Вероятно, лучшее место для размещения в частном хранилище приложения, но установите разрешения для файла на глобально читаемые и исполняемые, если намерен поделиться им с другими приложениями или оболочкой adb. –

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