2013-11-28 3 views
4

Я создал проект библиотеки андроида, который использует некоторые собственные библиотеки.Андроид родной lib не установлен с APK

Я создал обертку jni и поместил собственные libs (.so) в папки libs //. Нативные библиотеки скомпилированы с использованием cmake, для armeabi, armeabi-v7a, x86 и mips.

Я экспортирую этот проект в банку и поставлю эту банку в «обычный» проект андроида. Затем я экспортирую этот проект в apk и вижу, что мои библиотеки связаны с ним.

Однако, когда я устанавливаю apk, libs, соответствующие устройству, не копируются в /data/data/com.my.app/lib, и, очевидно, при запуске приложения жалуются на то, что вы не обнаруживаете библиотеки (UnsatisfiedLinkError).

Я искал SO и везде, где могу, но не нашел ответа, который разрешил мое дело.

Я использую Eclipse, кстати

Спасибо за вашу помощь

UPDATE

ОК, я читал документ в НДК и видели примеры, и, к сожалению, я не может видеть решение.

ndk строит код c в разделяемые библиотеки и помещает их в выделенное место в проекте. Но он не генерирует ничего, что говорит о том, что libs должен быть установлен с apk.

Моя цель - предоставить андроидную библиотеку (например, банку), которая может быть включена в приложение для Android. Я не вижу реальной разницы между тем, что я делаю (скомпилируйте c libs с помощью cmake и упакуйте jni и java скомпилированные классы в банку) и что делается с android.mk

Если вы видите, что я Мне не хватает, не стесняйтесь говорить мне (даже если это очевидно).

благодаря

UPDATE

Я сделал грязный хак: в папке Libs моего приложения, я поместил файл фляги, содержащий мои классы и мои родные и LIBS копию файлы .so для каждой арки. Suprise, libs не установлены в /data/data/com.me.myapp/lib

Кажется, что это проблема упаковки.

+0

Предлагаю вам ознакомиться с документацией, поставляемой с NDK. – krsteeve

+0

Хороший старый rtfm – florian

+2

Вы не можете просто поместить библиотеку в проект NDK, вы должны включить его в файл Android.mk - здесь есть много документации, а также примеры здесь, на SO – krsteeve

ответ

0

Вы вызвали команду ndk-build?

Подробнее см. Ниже.

http://developer.android.com/tools/sdk/ndk/index.html

Вы можете создавать разделяемые библиотеки для образцов приложений, перейдя в/образцы // затем призывающих команду НДК-сборки. Сгенерированные совместно используемые библиотеки будут расположены в/samples // libs/armeabi/for (машинный код ARMv5TE) и/или/samples // libs/armeabi-v7a/for (машинный код ARMv7).

+0

Мои родные библиотеки хорошо строятся. Я не называю себя ndk-build, но он вызывается сборкой cmake. благодаря – florian

1

экспортировать этот проект в банку и поставить эту банку в «нормальный» андроид проекта. Затем я экспортирую этот проект в apk и вижу, что мои библиотеки связаны с ним.

Проблема в том, что система упаковки Android не обрабатывает двоичные активы в JAR. Чтобы ваш проект приложения мог найти и включить сгенерированные файлы .so, вам нужно, чтобы он ссылался на проект библиотеки в качестве «проекта библиотеки Android»: enter image description here

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