Подтвердить что ты не робот

AIR 3 Native Extensions для Android - Могу ли я/Как включить сторонние библиотеки?

Со всем новым обманом, поддерживающим встроенную поддержку расширения в AIR 3, я не нашел ни одной вещи, которая подтверждает или отрицает возможность включения и использования внешнего JAR внутри собственной реализации Android.

Все примеры в основном демонстрируют способность подключаться к встроенным API-интерфейсам Android. Но что, если кто-то хочет использовать одну из сотен библиотек, которые упрощают ее? Конечно, похоже, что это должно быть возможно. Я попытаюсь описать, что я сделал, и, возможно, кто-то обнаружит недостаток:

  • Успешно создана собственная библиотека Android, используя скомпилированные импорты из сторонней библиотеки Android XYZ.
  • Экспортированный проект Android как файл JAR.  Примечание. Указанный сторонний JAR находится внутри /lib внутри баннера.
  • Успешно созданная библиотека ActionScript (SWC) для взаимодействия с собственной библиотекой Android.
  • Создан пакет ANE из SWC, extension.xml, Android JAR и library.swc(для платформы Android-ARM, извлеченной из SWC).
    Примечание. Также попробовали помещать стороннюю библиотеку в файловую структуру, описанную здесь: http://help.adobe.com/en_US/air/extensions/WSf268776665d7970d-24823354 12ffea65006-8000.html # WSf268776665d7970d-6be13ace1308aaebeca-7fff. Я думаю, что это больше похоже на выполнение типа времени выполнения с JNI или что-то еще, так что статья немного меня смутила.
  • Используется ANE в примере проекта Flex Mobile.
  • Созданный и установленный файл APK на тестовом устройстве DroidX.
  • Можно успешно увидеть загрузку приложения AIR (и операторов трассировки) в LogCat "ActivityManager: Displayed com.me.androidapp/.AppEntry"
  • Можно успешно увидеть встроенный код Java Java, который вызывается через среду выполнения AIR для создания экземпляра и контекста. "mye_native: MyExtension.initialize", "mye_native: MyExtensionContext.createContext"
  • Как только приложение AIR пытается вызвать собственную функцию, оно взрывается, не может найти классы из сторонней библиотеки Android: E dalvikvm: Could not find class 'com.thirdparty.SomeClass', referenced from method com.me.nativeExtentions.MyExtensionFunction.call

Любые идеи? Похоже, он должен работать таким образом.

Одна вещь, которую я заметил, заключается в том, что когда я раздуваю APK и Dex из чистого Java-приложения Android (у которого также есть сторонние библиотеки Android), похоже, что классы от третьего участника были включены в него (а не только ссылку на баночку). Когда я делаю то же самое с моим Flex APK, я нахожу только свои собственные классы Java плюс Adobe, а сторонних - нигде не найти, что я могу видеть.

Я разместил это на форумах Adobe, но я подумал, что попробую попробовать мозговой центр SO. Спасибо.

4b9b3361

Ответ 1

Вы должны объединить все свои банки в одну. Что-то вроде http://code.google.com/p/jarjar/ или ваш собственный Ant script поможет.

Отредактировано для добавления примера: Предположим, что ваш основной файл расширения jar - extension.jar, и вы используете код в файле external.jar. Затем вы можете поместить классы из external.jar в extension.jar с помощью инструмента Java jar:

jar -xf external.jar

Это приведет к извлечению файлов .class в папки папок. Если пакет верхнего уровня "com", вы можете добавить его в extension.jar с помощью:

jar -uf extension.jar com

(Повторите вторую команду для каждого пакета верхнего уровня во внешней банке.)

Ответ 2

Вы также можете объединить банки библиотеки вручную, превратив их в zip файлы (просто переименуйте их в .zip) и скопируйте классы из сторонней библиотеки в основную и переименуйте их обратно в .jar