Добавление проекта Eclipse "Android Library" и сборка через Maven - PullRequest
5 голосов
/ 29 марта 2012

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

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

IЯ думал, что это решило бы проблему, но при сборке библиотека, кажется, не включается.Я знаю это, потому что когда я запускаю Activity, SimpleGame, ссылаясь на один из классов в источнике cocos2d, Activity умирает, и я получаю эту трассировку стека в 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) надежный способ узнать, был ли определенный класс / jar / что-либо упакован в мой apk, так как шаги, чтобы добраться до этой точки в моем приложении, длинные иСложно сейчас

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

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

Ответы [ 2 ]

4 голосов
/ 30 марта 2012

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

Сборка проекта из командной строки (т. е. mvn clean install), maven будет выводить подробные журналы во время каждой отдельной фазы / цели сборки, в цели dex вы можетеувидеть что-то вроде этого:

[INFO] --- android-maven-plugin: 3.1.1: dex (default-dex) @ myproject ---
[INFO] C: \Программные файлы \ Java \ jdk1.6.0_21 \ jre \ bin \ java [-Xmx1024M, -jar, C: \ Progr am Files \ 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 \ com \ google \ code \ gson \ gson \ 1.7.1 \ gson-1.7.1.jar, ... ...]

Проект библиотеки Android на самом деле выглядит как cocos2d_android-1.0.0-SNAPSHOT.apklib с некоторыми другими обычными архивами jar-библиотеки.


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

Это ApkLib, который является просто почтовым индексомархив проекта библиотеки Android (src /, res /, AndroidManifest.xml и т. д.).Обычно мы создаем / внедряем наш собственный проект библиотеки Android с зависимым проектом Android в качестве многомодульного проекта maven, однако в этом нет необходимости, если вам нужна ссылка на проект библиотеки Android, написанный другими разработчиками.Благодаря разработчику android-maven-plugin уже поддерживает не-Maven проекты библиотек Android, ознакомьтесь с Совместимо с не-Maven проектами библиотек Android :

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

Использование библиотек других разработчиков не Maven

Это также означает, что мы можем взять любой внешний zip-файл проекта библиотеки Android (от сторонних разработчиков) и выполнить на нем mvn install: install-file ... и просто начать использовать его в качестве зависимости.

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

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

Таким образом, обходной путь:

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

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

Проверьте Образцы на веб-сайте android-maven-plugin, чтобы увидеть, как правильно использовать apklib.

1 голос
/ 29 марта 2012

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

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

Вместо этого используйте compile.

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

...