Создание SDK для продукта. Как добавить собственную библиотеку (.so) и jar с SDK, который я создаю?

Я создаю виджет, который мы предоставим разработчикам конечным пользователям, и он состоит из .jar и родная библиотека (.so) построен с использованием NDK. JAR имеет интерфейс JNI с динамической библиотекой.

Это очень ясно, как включить внешний .jar в проекте, но не как включить зависимую динамическую библиотеку.

  1. Как мне упаковать и собрать .jar а также .so? Каковы лучшие практики здесь?

  2. Я могу создать файл JAR, используя команду jar JDK. Нужно ли мне запускать dx.bat на банке, чтобы конвертировать в байт-код Dalvik?

  3. Мне нужно создать пример проекта, показывающий виджет в действии. Как мне это включить .jar а также .so в примере проекта, который демонстрирует, как использовать виджет?

4 ответа

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

  • зайдите в windows / настройки / android / build
  • снимите галочку с первого и второго варианта
  • Извлеките файлы из wikitudedk.jar с помощью winrar, как будто это архив, найдите libarchitect.so и скопируйте его в / libs / libs / armeabi /
  • добавьте wikitudedk.jar в путь сборки

Для этого вы должны использовать стандартные инструменты сборки, включенные в SDK. Если вы включите нужные файлы.jar в /lib В директории вашего проекта процесс сборки ant преобразует включенные файлы классов в формат байт-кода Dalvik и включит их в файл classes.dex для приложения. Добавить build.properties также файл в корне вашего проекта, одной строкой:

external.libs.dir=lib

В зависимости от версии вашего SDK и его конфигурации, вам может понадобиться поместить банку в libs скорее, чем lib,

Что касается.so, я предполагаю, что он правильно скомпилирован с использованием Android NDK или с помощью сценария сборки, который использует надлежащие флаги компилятора и компилятора, необходимые для успешного связывания общего объекта на Android. Если это так, вы можете включить.so файл в libs/armeabi и они будут добавлены в банку, а также. Кроме того, динамический загрузчик библиотеки будет знать, что искать в этом месте в.jar, когда вы на самом деле пытаетесь загрузить библиотеку из кода Java.

Используя ADT 12, я выполнил это следующим образом:

1) Экспортируйте JAR из вашей библиотеки с помощью SO-файла, используя Eclipse. Убедитесь, что вы исключили AndroidManifest.xml. Это будет включать в себя исходный код и другие данные, поэтому, если вы распространяете, вы хотите удалить эти ненужные биты с помощью любой утилиты ZIP.

2) Создайте каталог в исходном дереве вашего приложения (я использую каталог "lib") и скопируйте в него JAR библиотеки.

3) Щелкните правой кнопкой мыши проект в Eclipse и выберите "Настроить путь сборки". Добавьте JAR и укажите его на JAR внутри дерева исходных текстов приложения.

4) В настройках Eclipse выберите раздел Android/Build и снимите флажок "Автоматически обновлять папку ресурсов и ресурсов при сборке". Ниже вы увидите параметр "Принудительная ошибка, когда внешние файлы jar содержат собственные библиотеки". Существует ошибка ADT, которая предположительно будет исправлена ​​в R17, которая использует неправильные настройки. Как только оно будет исправлено, вы будете использовать "Force error" (убедитесь, что оно не отмечено).

5) После того, как вы создадите приложение APK, у вас будет файл libs/armeabi/libXXXX.so. Это не будет автоматически распаковано при установке. Вам нужно будет написать код, чтобы извлечь его из вашего APK-файла в ваш каталог данных, а затем использовать System.load для файла.so в вашем каталоге данных.

У меня есть двунаправленные вызовы JNI, идущие из динамически загруженного файла, и даже использую для этого dlopen(), чтобы выполнять свои собственные процедуры регистрации плагинов.

Добавьте следующие строки в android.mk,

include $(BUILD_PACKAGE)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := alias:libs/your.jar

include $(BUILD_MULTI_PREBUILT)
Другие вопросы по тегам