![]() |
Модераторы: javastic |
![]() ![]() ![]() |
|
McBlob |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.11.2011 Репутация: нет Всего: нет |
У кого есть опыт разработки приложений под Android с использованием плагинов?
Делал по аналогии с этой статьёй Создание pluginable решений при помощи Java В итоге, при загрузке класса плагина, ругается на интерфейс общий для плагина и приложения. Выдаёт Class resolved by unexpected DEX. Притом на простой джаве пример работает прекрасно. Если загружать в паралельном ClassLoader`е или если не подключать к приложению общий интерфейс, то всё загружается, но проку от этого нету, ибо работать с классом плагина могу только через этот интерфейс. Вообщем я в растерянности, совсем не понимаю в чём проблема. |
|||
|
||||
ivanovpv |
|
|||
![]() Варвар ![]() ![]() Профиль Группа: Участник Сообщений: 639 Регистрация: 26.1.2005 Где: Москва Репутация: 9 Всего: 28 |
Проблема в том, что у Android'а несколько иная виртуальная машинка, не стандартный JVM, а свой т.н. Dalvik VM - а DEX это перекодировщик байткодов с JVM на Dalvik VM. Загрузчик классов Android'а не понимает формат под которым собран плагин.
Рецепт простой: надо пересобрать классы плагина под Android -------------------- Aut viam inveniam aut faciam |
|||
|
||||
McBlob |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.11.2011 Репутация: нет Всего: нет |
Восстановил пример и попробую описать проблему подробнее - с кодом.
1. Есть обычный Java проект в котором описан интерфейс плагина
Этот проект будет добавляться в BuildPath/Projects плагина и приложения. 2. Есть Android проект плагина в котором описан класс
3. И есть Android проект приложения, которое должно этот плагин загружать. У Activity в методе onCreate() вызывается метод loadPlugin()
Так вот при попытке загрузит класс test.plugins.PluginInfo вываливается ошибка I/dalvikvm(586): Failed resolving Ltest/plugins/PluginInfo; interface 14 'Ltest/plugins/IPluginInfo;' I/dalvikvm(586): Link of class 'Ltest/plugins/PluginInfo;' failed Если же из этой схемы исключить Jаva проект с интерфейсом, то класс плагина отлично загружается. При этом в других моих программах для Android я свободно подключаю Java проекты и всё отлично работает. |
||||||
|
|||||||
ivanovpv |
|
|||
![]() Варвар ![]() ![]() Профиль Группа: Участник Сообщений: 639 Регистрация: 26.1.2005 Где: Москва Репутация: 9 Всего: 28 |
Такое ощущение что при связывании на лету Dalvik не распознает сигнатуру интерфейса. Возможно билдер подсовывает ему ту которая была сгенерирована для JVM. Rebuild не помогает? -------------------- Aut viam inveniam aut faciam |
|||
|
||||
McBlob |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.11.2011 Репутация: нет Всего: нет |
Rebuild не помогает.
Если общую библиотеку с интерфейсом оформить как Android проект, в Project properties -> Android указать IsLibrary и подключать её (в Project properties -> Android) только к проекту плагина, то всё загружается нормально. Если же эту библиотеку подключать и к главному приложению, то вываливаются ошибки: W/dalvikvm(823): Class resolved by unexpected DEX: Ltest/plugins/PluginInfo;(0x40528098):0x19ce30 ref [Ltest/plugins/IPluginInfo;] Ltest/plugins/IPluginInfo;(0x40515540):0xec690 W/dalvikvm(823): (Ltest/plugins/PluginInfo; had used a different Ltest/plugins/IPluginInfo; during pre-verification) I/dalvikvm(823): Failed resolving Ltest/plugins/PluginInfo; interface 14 'Ltest/plugins/IPluginInfo;' E/AndroidRuntime(823): java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation |
|||
|
||||
antiothers |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 19.1.2012 Репутация: нет Всего: нет |
че то както сложновато
|
|||
|
||||
ShellRaiser |
|
|||
![]() еще чуть и закоммичу ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 20.7.2007 Где: Белaрусь, Гродно Репутация: нет Всего: 1 |
Вы немного не в ту сторону копали
![]() Для андроида уже предусмотрена такая вещь как Custom Class Loading in Dalvik =) |
|||
|
||||
McBlob |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.11.2011 Репутация: нет Всего: нет |
Ну я так понимаю, что в данном примере проект собирается при помощи анта вне эклипса. Как в таком случае его дебажить?
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Android | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |