Android Ant построен на проекте с двумя исходными папками - PullRequest
8 голосов
/ 03 ноября 2010

У меня есть проект со связанной папкой с исходным кодом. Этот проект зависит от другого (удаленного сервиса) проекта, поэтому файлы aidl и классы, передаваемые через удаленный интерфейс, находятся в папке common_src, общей для двух проектов. Эта работа прекрасно работает со сборками Eclipse (один исходный файл, два проекта, изменения в одном проекте отражаются в другом, как и должно быть).

Теперь я хотел бы сделать сборку Ant из командной строки. Мне удалось получить другой проект с единым каталогом src для всех целей, используя пример build.xml из инструментов SDK. Он импортирует ant_rules_r3.xml автоматически, и как только source.dir и out.dir определены в build.properties, все это довольно безболезненно.

Обращаясь к проекту с папками src и common_src, я не могу его собрать. Сначала я вырезал и вставил цель компиляции и все те, от которых она зависит, в build.xml над задачей установки. Я добавил и определил элемент common_src в build.properties и добавил последнюю строку, показанную ниже, в -compile target (скопирован из ant_rules_r3.xml) в build xml:

  <src path="${source.absolute.dir}" />
  <src path="${gen.absolute.dir}" />
  <src path="${common_src}" /><!--ADDED-->

, который получил дальнейшее развитие в процессе сборки - он мог найти файлы .java в common_src, но не файлы .aidl. Не удивительно, что я осознал, что помощь - это отдельная цель. Затем я добавил

<src path="${common_src}" /> 

к цели -aidl в сборке xml, и это не удалось с:

BUILD FAILED
C:\dev\projects\Eclipse\AndroidWorkspace\MapProject\build.xml:77: aidl doesn't
 support the nested "src" element.

Так что это заставило меня хорошо и по-настоящему застрять. В идеале я хотел бы изменить только файл build.properties, чтобы включить common_src и передать его в ant_rules_r3.xml, но я не могу придумать, как это сделать. Буду очень признателен, если кто-нибудь подскажет, как это можно сделать.

Ответы [ 6 ]

16 голосов
/ 28 июня 2011

У меня была похожая проблема, но, похоже, она была решена для меня с помощью следующей настройки в моем файле build.properties:

source.dir = src;../other_project/src

Я использовал относительный путь, чтобы связать мой src с other_project,но вы должны быть в состоянии использовать абсолютный путь.Если вы это сделаете, вы, вероятно, должны вместо этого поместить его в local.properties.

Примечание: в соответствии с комментариями в build.properties, если моя версия SDK <2.0, я бы использовал это вместо:</p>

source-folder = src;../other_project/src
6 голосов
/ 31 августа 2012

Я не могу комментировать, потому что у меня недостаточно репутации, но если добавление исходной папки работает с предыдущими ответами, то при сборке jar происходит сбой:


compile:
    [javac] Compiling 463 source files to /home/xxx/documents/eclipse/xxx/deploy/xxx/bin/classes
    [javac] Note: Some input files use or override a deprecated API.
    [javac] Note: Recompile with -Xlint:deprecation for details.
    [javac] Note: Some input files use unchecked or unsafe operations.
    [javac] Note: Recompile with -Xlint:unchecked for details.
    [javac] Creating empty /home/xxx/documents/eclipse/xxx/deploy/xxx/bin/classes/fr/xxx/android/socialintegration/facebook/package-info.class
     [echo] Creating library output jar file...

BUILD FAILED
/home/xxx/applis/android/android-sdk-linux/tools/ant/build.xml:570: The following error occurred while executing this line:
/home/xxx/applis/android/android-sdk-linux/tools/ant/build.xml:680: The following error occurred while executing this line:
/home/xxx/applis/android/android-sdk-linux/tools/ant/build.xml:744: /home/xxx/documents/eclipse/xxx/deploy/xxx/src;../xxxdata/src does not exist.

Неисправная часть находится в здании фляги, которая использует source.absolute.dir в качестве набора файлов, который недействителен для муравья.

Но у меня пока нет обходного пути, и я не понимаю, почему другим удалось заставить его работать ... (Я также использую SDK R20)

6 голосов
/ 06 ноября 2010

На всякий случай есть интерес, я решил ответить на свой вопрос, который теперь решается.

1) Я определил common_src в build.properties

2) Добавленострока

<src path="${common_src}"

в переопределенной цели компиляции в build.xml над установкой (плюс переопределяет все цели, от которых она зависит, путем вырезания / вставки из ant_rules_r3.xml) 3) Добавлена ​​новая цель 'aidl2 'то же, что и aidl' в build.xml, но в котором вместо

<source path="${source.absolute.dir}" .

указана строка *1001* *1012* *1013*.Преодоление всех целей, от которых зависит aidl.

Я также добавил такие строки, как:

key.store=xxxxxxxxxxxxx
key.alias=xxxxxxxxxxxxx
key.store.password=xxxxxxxxxxxxx
key.alias.password=xxxxxxxxxxxxx

в build.xml, который автоматизировал ввод паролей.Наконец, я добавил цель install_release для автоматической сборки, перекомпоновки и установки одной командой.

2 голосов
/ 28 августа 2012

Добавить ; отдельный список источников к вашему ant.properties (не забудьте также включить значение по умолчанию src):

source.dir=src-other;src

Выше отлично работает с Android SDK Tools Revision 20.0.3+ (Цель проекта: Android 2.2+, уровень API: 8+).

0 голосов
/ 10 января 2014

По крайней мере в более поздних версиях инструментов сборки проблема заключается в том, что значение, введенное в это свойство, передается в <property name="source.absolute.dirs" location="source.dirs"/>.Атрибут location не знает, как обращаться с путями, разделенными двоеточием / точкой с запятой.

Исправление очень простое, просто используйте:

source.absolute.dirs=src1:src2:src3

и т. Д., В отличие от:

source.dirs=src1:src2:src3
0 голосов
/ 30 августа 2013

вот решение:

обновите свой build.xml для более чем одного source.dir

https://stackoverflow.com/a/14786100/2732600

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...