Android Maven Plugin apklib Mojo не включает скомпилированный R в полученный apklib - PullRequest
5 голосов
/ 11 января 2012

Я пытаюсь извлечь папку Android /res в отдельный проект, который включен в мой основной проект как зависимость apklib.Проблема в том, что, хотя содержимое /res включено в результирующее .apklib, скомпилированное R.class - нет.Еще более запутанным является то, что команда mvn clean install создает файл .apklib, а также файл .jar, а файл jar содержит R.class, но не содержит содержимого папки /res.Как мне сгенерировать один пакет (.jar или .apklib), который содержит все мои ресурсы, а также скомпилированные классы?

pom.xml

<packaging>apklib</packaging>
...
<plugin>
  <groupId>com.jayway.maven.plugins.android.generation2</groupId>
  <artifactId>android-maven-plugin</artifactId>
  <configuration>
    <attachSources>true</attachSources>
    <sdk>
      <platform>12</platform>
    </sdk>
  </configuration>
<plugin>

, который генерирует следующее

.jar

./morseflash-resources.jar
  com/.../R.class    

.apklib

./morseflash-resorces.apklib
  META-INF
  AndroidManifest.xml
  res/
      layout/
      values/

Мне бы хотелосьвсе это содержимое в одном файле, и я хотел бы иметь возможность перечислить его в качестве зависимости в моем основном проекте Android.Возможно ли это, и если да, то как я могу это сделать?

1 Ответ

10 голосов
/ 12 января 2012

Вот как должен работать android-maven-plugin, чтобы добавить проект библиотеки в качестве зависимости вашего основного проекта, добавьте следующую зависимость в pom.xml вашего основного проекта:

<dependencies>
  <dependency>
    <groupId>com.company.common.lib</groupId>
    <artifactId>common-lib</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <type>apklib</type>
  </dependency>
</dependencies>

Обратите внимание, что это отличается от обычных зависимостей jar, apklib - это просто архив всех ваших папок src и res, которые имеют стандартную структуру структуры каталогов проекта библиотеки Android / Eclipse (src/com/... вместо src/main/java/com/...). Причина этого заключается в поддержке использования apklib в других не mavenlized проектах (подробнее см. Документацию ApkLib ). Вы не добавляете свою библиотеку как скомпилированную jar-зависимость, вместо этого вы добавляете свою библиотечную зависимость в виде исходного кода и ресурсов, просто из zip-файла.

При выполнении mvn clean install в цели android-maven-plugin:3.0.0:generate-sources android-maven-plugin разархивирует вашу зависимость apklib и объединит исходный код и ресурсы в ваш основной проект перед компиляцией проекта; Вот как должны работать проекты библиотек Android. Библиотечный проект - это не просто компиляция всего. Для экономии памяти и дискового пространства только использованные части копируются и компилируются в окончательный APK. Вы можете легко переопределить ресурсы в основном проекте, так как они просто заменяют библиотечный материал на этапе объединения перед окончательной компиляцией.

Это уродливо, но в настоящее время все работает так, команда разработчиков Android в настоящее время работает над этим и будет поддерживать зависимость от jar в будущем, вероятно, в r17 (что также требует изменения / обновления плагина android-maven-plugin, я полагаю ), подробности в официальном сообщении в блоге " Изменения в проектах библиотеки в Android SDK Tools, r14 ".

...