cawabanga
@cawabanga

Проблема с загрузкой класса в Java на Android?

Привет.


У меня есть три проекта на Java:

  • Движок
  • Игра
  • Нативное приложение на NDK



Движок — он и есть движок, предоставляет всякую инфраструктуру, абстракцию от платформы, две реализации рендеринга, для десктопов на JOGL и для андроидов на OGLES 2.0.

Игра — условно независимое от платформы приложение, реализованное в терминах движка.

Нативное приложение — самая простая прила на NDK, реализованная по официальному туториалу, в которую внедрена игра.

Игра протестирована на десктопе, пробуем поотлаживать её на виртуальном девайсе. На этом месте начались странности.

Could not find class 'com.GO.GOHot', referenced from method com.issmd.ngo.ngo_1.NGOSurfaceView.<init>

FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: com.GO.GOHot
at com.issmd.ngo.ngo_1.NGOSurfaceView.<init>(NGOSurfaceView.java:12)
at com.issmd.ngo.ngo_1.FullscreenActivity.onCreate(FullscreenActivity.java:58)
[...]



com.GO.GOHot — это класс приложения из проекта игры.

Зависимости проектов выглядят примерно так (два испробованных варианта):
  1. Движок находится в class path у игры, игра находится в class path у нативного приложения.
  2. Движок находится в class path у игры, игра скомпилена в jar и закинута в папку lib нативного приложения.


Судя по тому, что Eclipse (а дело происходит в нём) видит все классы (интеллисенс, все дела), подключил я всё более-менее правильно. Но при попытке запустить приложение на девайсе программа почему-то порывается искать класс в рантайме, откуда-то его грузить, показывает всем java.lang.NoClassDefFoundError и умирает. Абсолютно бредовая ситуация, по-моему, ведь вот же код, возьми его в compile/link time, слинкуй себе на радость и работай на радость мне.


Да, я смотрел всякие тексты в интернете, пробовал следовать им (про Order & Export, частности), но ничего не помогло.


Тестирую я на AVD и на Android x86 4.0.1 на VMWare. Простейшее приложение на OGLES2.0 там работает ок.


Я новичок в Java & NDK, потому, возможно, наделал кучу дурацких ошибок, поправьте меня, пожалуйста.

Также буду признателен за любые рандомные советики о том, как вообще принято организовывать такого рода проекты.


Заранее спасибо.
  • Вопрос задан
  • 3686 просмотров
Пригласить эксперта
Ответы на вопрос 1
serso
@serso
Декомпильните apk с помощью smali. Если класс присутствует после декомпиляции — значит проблема в коде (ClassLoader?), если нет, то в процессе сборки (proguard?).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы