Как создать проект Android с помощью Ant, который зависит от проекта Java?

У меня есть проект библиотеки Android, AndroidLib, который зависит от проекта Java в моей рабочей области, JavaLib.

В Eclipse это делается путем добавления проекта JavaLib в Java Путь сборки > Проекты для AndroidLib и настройки его экспорта на вкладке Порядок и экспорт, и сборка выполняется нормально.

Однако Ant, похоже, не улавливает зависимость от проекта JavaLib при сборке AndroidLib (я запустил Android-проект обновления lib). Как лучше всего добавить эту зависимость в файл build.xml?


person Joseph Earl    schedule 29.01.2013    source источник


Ответы (3)


У меня такая же проблема. Я закончил решать это очень хакерским способом.

В AndroidLib/build.xml (или лучше в AndroidLib/custom_rules.xml) я определил цель -pre-build, которая создает библиотеку JavaLib и копирует полученный файл jar в libs/. Я также определил цель -post-package для удаления скопированного jar, иначе Eclipse запутается.

<property name="lib.javalib.project.dir" location="${basedir}/../JavaLib" />
<target name="-pre-build">
  <subant buildpath="${lib.javalib.project.dir}" target="package" failonerror="true" />
  <copy todir="${basedir}/libs" failonerror="true" verbose="true">
      <fileset dir="${lib.javalib.project.dir}/target">
          <filename name="javalib*.jar"/>
      </fileset>
  </copy>
</target>
<target name="-post-package">
    <delete verbose="true">
        <fileset dir="${basedir}/libs" includes="javalib*.jar" />
    </delete>
</target>

Это решение далеко не удовлетворительно, но оно выполняет свою работу.

Вы найдете аналогичный вопрос и ответ там: Android Ant Включить проекты библиотеки Java

person lacton    schedule 10.08.2013

Я отвечу на свой вопрос: единственный способ сделать это правильно — не использовать Ant.

  1. Вам нужна правильная система управления зависимостями. Maven - ваш единственный реальный выбор здесь.
  2. Вам нужна система сборки, поддерживающая Maven. В настоящее время я снова использую Maven для этого, потому что в то время это был единственный зрелый инструмент сборки, который также поддерживал управление зависимостями Maven - теперь (хотя и для проектов библиотеки Android, поскольку формат для них еще не окончательный) Gradle должен быть вашей сборкой инструмент на выбор.
person Joseph Earl    schedule 10.08.2013
comment
В зависимости от содержимого вашей AndroidLib и вашего проекта Java вы должны рассмотреть ответ лактона. Если ваша библиотека предоставляет что-то через SPI, вам, вероятно, потребуется изменить процесс сборки через xml-файлы, чтобы ваши папки META-INF попали в ваш apk. см. мой пост - person AlexS; 07.04.2014

Я изменил свой build.xml, чтобы запустить файл ant java-проекта, а затем скопировал банку в папку libs:

    <target name="-pre-compile">
        <ant antfile="build.xml" dir="dependencies/JavaUtils" target="clean"/>
        <ant antfile="build.xml" dir="dependencies/JavaUtils"/>
        <copy todir="${jar.libs.dir}" failonerror="true" file="dependencies/JavaUtils/dist/Java-utils.jar"/>
        <sleep seconds="3"/> <!-- Delay for the file to be recognized after the copy -->
    </target>

Как это помогло кому-то.

Кстати, я начал читать о зависимости/сборке/независимо от Gradle и получил от этого мурашки. Ах, какое облегчение вернуться к муравью...

person AlikElzin-kilaka    schedule 07.04.2014
comment
Забыл сказать, если вы хотите легко создать файл сборки Java, создайте его с помощью eclipse или просто используйте этот простой шаблон: ant.apache.org/manual/using.html — очень простой пример создания файла jar. - person AlikElzin-kilaka; 07.04.2014