2012-03-29 2 views
5

Я пытаюсь включить cocos2d в существующее существо. Я сделал все так, как Eclipse, такие как установка «isLibrary» и добавив проект библиотеки в пути сборки в Eclipse, и у меня есть следующая зависимость в моем приложении pom.xml:Добавление проекта Eclipse "Android Library" и создание через Maven

<dependency> 
    <groupId>cocos2d_android</groupId> 
    <artifactId>cocos2d_android</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <scope>provided</scope> 
</dependency> 

Я подумал, что это» я позаботился о проблеме, но когда я создаю, библиотека, похоже, не включена. Я знаю это, потому что, когда я начинаю деятельности, SimpleGame, ссылающиеся один из классов в источнике cocos2d, Активность умирает, и я получаю эту StackTrace в DDMS:

E/AndroidRuntime(10621): FATAL EXCEPTION: main E/AndroidRuntime(10621): java.lang.NoClassDefFoundError: org.cocos2d.opengl.CCGLSurfaceView E/AndroidRuntime(10621): at com.xyz.game.SimpleGame.onCreate(SimpleGame.java:22) ...

Я ищу две вещей:

1) надежный способ, чтобы увидеть, если определенный класс/банку/все было упаковано в мою APK, как шаги, чтобы добраться до этой точки в моем приложении, являются долгим и сложным прямо сейчас

2) Что-то в манифесте или pom.xml для основного приложения или проекта библиотеки, кажется, отсутствует. Что-то нужно было сообщить Maven, чтобы забрать этот другой проект - что это?

Я использую Maven 3.0.4 и 3.0.0-alpha-13 плагина, для уровня 8 и выше.

ответ

4

1) надежный способ, чтобы увидеть, если определенный класс/банку/все было упаковано в мою APK, как шаги, чтобы добраться до этой точки в моем приложении, являются долгим и сложным прямо сейчас

Построить проект из командной строки (т.е. MVN чистой установки), специалист будет выводить подробные журналы во время каждой фазы/цели сборки, в DEX цели, вы можете увидеть что-то вроде этого:

[INFO] --- android-maven-plugin: 3.1.1: dex (default-dex) @ myproject ---
[INFO] C: \ Program Files \ Java \ jdk1.6.0_21 \ jre \ bin \ java [-Xmx1024M, -jar, C: \ Progr am Файлы \ Android \ android-sdk-r16 \ platform-tools \ lib \ dx.jar, -dex, -output = C: \ workspace \ myproject \ target \ classes.dex, C: \ workspace \ myproject \ target \ classes, C: \ maven \ repository \ cocos2d_android \ cocos2d_android \ 1.0.0-SNAPSHOT \ cocos2d_android-1.0.0-SNAPSHOT.apklib, C: \ maven \ repository \ ком \ Google \ код \ gson \ gson \ 1.7.1 \ gson-1.7.1.jar, ... ...]

Проект Android Библиотека фактически DEX-е изд, как cocos2d_android-1.0.0 -SNAPSHOT.apklib с некоторыми другими регулярными библиотеками библиотеки банкоматов.


2) Что-то в манифесте или pom.xml либо для основного приложения или проекта библиотеки, кажется, не хватает - что-то необходимое для сигнала для Maven, чтобы поднять этот другой проект - что Это?

Это ApkLib, что это просто почтовый архив библиотеки проекта Android (ЦСИ /, Рез /, AndroidManifest.xml и т.д.). Обычно мы создаем/реализуем наш собственный проект библиотеки Android с зависимым проектом Android в качестве мультимодульного проекта maven, однако это не обязательно, если вам нужен справочный проект библиотеки Android, написанный другими разработчиками. Благодаря разработчиков, андроид-Maven-плагин уже поддерживается не-Maven Android библиотеки проектов, проверить Compatible with non-Maven Android Library Projects:

Сформированный .apklib файл будет иметь раскладку стандартной библиотеки проекта Android/Eclipse. Это означает, что независимо от вашего макета Maven, макет внутри файла .apklib будет заключаться в том, что исходный код находится в «src /» вместо «src/main/java /», но все еще правильно интерпретируется при использовании в приложении Android/Maven проект. Это должно быть совместимо с библиотечными проектами разработчиков, отличных от Maven, что важно для развития сообщества разработчиков Android.

использовать другие унтер-Maven застройщиков библиотеки

Это также означает, что мы можем принять любой внешний Android почтовый файл проекта библиотеки (от разработчиков, не Maven) и не МВН установки: установка-файл ... на он и просто начнет использовать его как зависимость.

Поделитесь своим .apklib с не Maven разработчиков

Чтобы использовать файл .apklib с разработчиком без Maven, они, вероятно, чувствуют себя более комфортно, если вы переименовать его в .zip. Затем они могут просто распаковать его в каталог и использовать его оттуда.

Так временное решение:

  1. Упакуйте проект Android библиотеки в почтовый архив правильно, а затем переименовать его в something.apklib.
  2. Установите something.apklib в локальный репозиторий Maven, используя mvn install: install-file.
  3. В любом Android Project, которая требует библиотеки зависимостей, просто с помощью:

    <dependency> 
        <groupId>cocos2d_android</groupId> 
        <artifactId>cocos2d_android</artifactId> 
        <version>1.0.0-SNAPSHOT</version> 
        <type>apklib</type> 
    </dependency> 
    

Заканчивать Samples на веб-сайте Android-Maven-плагин, чтобы увидеть, как использовать apklib правильно.

+0

Спасибо yorkw!Хотя есть ли способ, чтобы Maven мог залезть и закрепить проект? Моя копия cocos2d является только клоном для чтения из github, и мне бы хотелось, чтобы не повторять этот процесс каждый раз, когда изменение выходит из github ... –

+0

Я не знаю, есть ли какие-либо плагины maven, которые могут делать pull, zip и автоматически установить из github. Как часто вы собираетесь обновлять приложение? В продуктивной перспективе маловероятно, чтобы один из них поддерживал/обновлял зависимости приложений на обычной ежедневной или еженедельной основе. Ручное обходное решение - единственный способ предоставления андроид-maven-плагинов, и я думаю, что это приемлемо для продуктивного обслуживания в большинстве условий. – yorkw

+0

Быстрая заметка: гиперссылка «Образцы» выше не имеет окончательных «s» (должна быть http://code.google.com/p/maven-android-plugin/wiki/Samples). SO не позволил бы мне сделать 1-символьное редактирование. –

1

Объем не должен быть provided. Предоставленные средства:

при условии, - это так же, как компиляции, но означает, что вы ожидаете в JDK или контейнер, чтобы обеспечить его во время выполнения. Он доступен только на пути компиляции и тестирования и не является транзитивным.

Использовать вместо compile.

Дополнительный совет: с compile по умолчанию вы можете удалить линию <scope>provided</scope>.

+0

Забавно, что вы должны упомянуть об этом - используя 'compile' default, я получаю дублируемую ошибку при попытке создать .apk. Очевидно, что у меня есть дополнительная спецификация зависимостей где-то, но я не уверен, где: я уже пытался удалить проект из пути сборки в eclipse, не уверен, что еще попробовать. –

+0

@BryM. это может быть вызвано зависимостью в cocos2d_android, которая уже существует в библиотеке Android. Вероятно, вы можете найти дубликат класса в своем пути к классам и использовать тег Maven for , чтобы сократить избыточную зависимость от cocos2d_android. –

Смежные вопросы