2010-11-03 3 views
8

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

Теперь я хочу сделать сборку 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, но я не могу придумать, как это сделать. Я был бы очень благодарен, если кто-нибудь может предложить, как это можно сделать.

+0

возможно дубликат [Как указать несколько исходный каталог для проекта библиотеки Android] (HTTP : //stackoverflow.com/questions/14605899/how-to-specify-multiple-source-directory-for-android-library-project) – Ytai

+0

@Ytai Если бы вы потрудились посмотреть даты двух вопросов, вы бы видели, что этот вопрос был опубликован за несколько лет до того, который вы цитировали, поскольку уже имеете ответ. Я не вижу, как кто-либо с мозгами может отметить это как дубликат. – NickT

ответ

6

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

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

2) Добавлена ​​линия

<src path="${common_src}" 

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

<source path="${common_src}" вместо

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

Made aidl зависит от помощиl2. Изменилось все цели, на которые зависела помощь.

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

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

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

16

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

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

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

Примечание: по комментариям в build.properties, если мой SDK версия < 2,0 Я хотел бы использовать вместо этого:

source-folder = src;../other_project/src 
+1

Это работало отлично для меня, только то, что я использовал «:» вместо «;» и файл, который мне нужно было отредактировать, - ant.properties, я думаю, что Android переключился на включение ant.properties вместо build.properties. – marmor

+1

@marmor, какую версию sdk вы используете? потому что для меня это не удается (20.0.1) с: и; Он все еще работает на вас? – Nappy

+0

@Nappy Мне больше не нужна эта функция, поэтому я не тестировал ее с момента обновления до ADT 20, вы можете увидеть, какой файл вам нужно отредактировать в своей версии ADT, запустив новый проект Android, вызвав «проект андроидного обновления - путь «. на нем из командной строки и посмотреть, какие файлы он создал для вас, найдите файл ant.properties, который должен содержать определение исходной папки. – marmor

2

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

source.dir=src-other;src 

Над отлично работает с Android SDK Tools Revision 20.0.3+ (Цель проекта: Android 2.2+, API ле vel: 8+).

6

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

 

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. 

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

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

+0

то же самое для меня. Когда я строю библиотеку, она терпит неудачу с 'src; other-src' не существует ни с"; " или с ":". –

0

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

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

source.absolute.dirs=src1:src2:src3 

и т.д., в отличие от:

source.dirs=src1:src2:src3 
+1

Не работает для библиотек, он использует только последний каталог. – jdtogni

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