Как загрузить собственный общий объект в банке из приложения для Android? - PullRequest
5 голосов
/ 08 декабря 2011

У меня есть общий объект, который я назову libFoo.so, скомпилированный с NDK. У меня есть проект Java (я назову его «jarlib»), который использует этот общий объект, вызывая

System.loadLibrary("Foo");

Этот java-проект я экспортирую как jar-файл и использую в приложении для Android. Если я закомментирую все биты об общем объекте, банка будет работать нормально, и я смогу с ней прекрасно взаимодействовать.

Я могу использовать jarlib вместе с общим объектом из приложения на Android для Unity с общим объектом в ./lib/armeabi/libFoo.so, и он загружает его полностью.

Я пытаюсь использовать jarlib и libFoo.so в моем приложении для Android, не являющемся единым целым, и loadLibrary категорически отказывается найти libFoo.so. Я попытался разместить его так, чтобы он был включен в мой apk в ./lib, а также ./lib/armeabi, и, похоже, ничто не заставляет вызов load его увидеть.

Я пытался включить libFoo.so в ./lib или ./lib/armeabi jarlib, но как только я пытаюсь собрать / запустить мое приложение для Android, мне говорят:

The library 'jarlib.jar' contains native libraries that will not run on the device.
The following libraries were found:
  - libFoo.so

с этим, если он находится в ./lib (не ./lib/armeabi)

Additionally some of those libraries will interfer with the installation of the application because of their location in lib/
lib/ is reserved for NDK libraries.

Я не уверен, какую комбинацию мне не хватает, но я уверен, что это можно сделать, я просто не могу понять, как это сделать!

1 Ответ

6 голосов
/ 10 декабря 2011

Хорошо!Оказывается, это было что-то настолько крошечное, что это вызвало у меня восемь часов головной боли.

Я обнаружил, что мой libFoo.so не отображается в моем app.apk / lib / armeabi / libFoo.so какэто произошло, когда единство построило apks.Я предположил, что это как-то связано с этим, поэтому я начал искать настройки, чтобы убедиться, что моя папка lib была скопирована в apk.

Как оказалось, папки lib нет, однако ...

Помните, как я сказал, что попробовал (на стороне приложения для Android):

./lib/libFoo.so
-and-
./lib/armeabi/libFoo.so

Оказывается, что мне нужно было сделать это по тому же пути.О, так похоже.

./libs/armeabi/libFoo.so

Да.ЛИЭС.С s .

Фактически, когда я переименовал свою папку 'lib' в 'libs', она изменила значок папки в eclipse, чтобы на ней был маленький символ андроида,как папки bin или res есть.И, конечно же, когда вы собираете apk, там есть папка lib / armeabi (обратите внимание, что в apk она называется «lib», а не «libs». Это все еще смущает меня).

Один из моих коллег-работники (которые работали над этим проектом до меня) сказали мне, что где-то в этом месте папка была 'lib', но затем была заменена на 'libs' в более поздней версии Android SDK.В любом случае, просто взяв этот проект, я не понял, что папка должна была называться «lib», как мне показалось, хорошо.Я был почти готов вырвать мои волосы.Я оставляю это здесь в надежде, что у кого-то есть та же проблема, что и у меня, и ему удается решить ее немного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...