AIR 3 Родные расширения для Android – Могу ли я / Как включить сторонние библиотеки?

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

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

  1. Успешно создана родная Android-библиотека, используя скомпилированные импорты из сторонней библиотеки Android XYZ.
  2. Экспортированный проект Android как файл JAR. Примечание. Указанный сторонний JAR находится в / lib внутри банки.
  3. Успешно созданная библиотека ActionScript (SWC) для взаимодействия с собственной библиотекой Android.
  4. Создан пакет 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 или что-то еще, так что статья немного меня смутила.
  5. Используется ANE в примере проекта Flex Mobile.
  6. Созданный и установленный файл APK на тестовом устройстве DroidX.
  7. Можно успешно увидеть загрузку приложений AIR (и операторов трассировки) в LogCat "ActivityManager: Displayed com.me.androidapp/.AppEntry"
  8. Можно успешно увидеть встроенный код Java Java, который вызывается через среду выполнения приложением AIR для создания экземпляра расширения и контекста. "mye_native: MyExtension.initialize", "mye_native: MyExtensionContext.createContext"
  9. Как только приложение 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. Спасибо.

Solutions Collecting From Web of "AIR 3 Родные расширения для Android – Могу ли я / Как включить сторонние библиотеки?"

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

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

Jar -xf external.jar

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

Jar -uf extension.jar com

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

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