我有一个带有链接源文件夹的项目。此项目依赖于另一个(远程服务)项目,因此 aidl文件和通过远程接口传递的类位于两个项目之间共享的common_src
链接文件夹中。这个工作与Eclipse构建一样好(一个源文件,两个项目,一个项目中的更改反映在另一个项目中,就像它应该的那样)。
我现在想从命令行执行Ant构建。我设法使用SDK工具中的示例build.xml
在所有目标上构建了一个单个src目录的项目。它会自动导入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
:< / p>
<src path="${source.absolute.dir}" />
<src path="${gen.absolute.dir}" />
<src path="${common_src}" /><!--ADDED-->
在构建过程中进一步发展 - 它可以在common_src中找到.java文件,但不能找到.aidl文件。毫不奇怪,我意识到,援助是一个单独的目标。然后我添加了
<src path="${common_src}" />
到build xml中的-aidl目标,但失败了:
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 :(得分:16)
我遇到了类似的问题,但似乎已经通过build.properties文件中的以下设置解决了这个问题:
source.dir = src;../other_project/src
我使用相对路径将我的src链接到other_project,但您应该能够使用绝对路径。如果你这样做,你应该把它放在local.properties中。
注意:根据build.properties中的注释,如果我的SDK版本&lt; 2.0我会改用它:
source-folder = src;../other_project/src
答案 1 :(得分:6)
如果有任何兴趣,我想我会回答我现在已经解决的问题。
1)我在build.properties
中定义了common_src2)添加了一行
<src path="${common_src}"
在设置上方的build.xml中的重写编译目标中(加上通过从ant_rules_r3.xml剪切/粘贴来覆盖它所依赖的所有目标) 3)添加了一个新的目标'aidl2',与build.xml中的'aidl'相同但是有一行
<source path="${common_src}"
而不是
<source path="${source.absolute.dir}" .
Made aidl取决于aidl2。覆盖了援助所依赖的所有目标。
我还添加了以下行:
key.store=xxxxxxxxxxxxx
key.alias=xxxxxxxxxxxxx
key.store.password=xxxxxxxxxxxxx
key.alias.password=xxxxxxxxxxxxx
到build.xml,它自动输入密码。我最后添加了一个install_release目标来自动生成一个命令构建,恢复和安装过程。
答案 2 :(得分:6)
我无法发表评论,因为我没有足够的声誉但是如果添加源文件夹可以使用以前的答案,那么在构建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.
故障部分位于jar的构建中,使用source.absolute.dir作为filset,对于ant无效。
但我暂时没有任何解决方法,我不明白为什么其他人设法让它工作...... (我也在使用sdk r20)
答案 3 :(得分:2)
将;
分隔的来源列表添加到ant.properties
(不要忘记包含默认src
):
source.dir=src-other;src
以上适用于Android SDK Tools Revision 20.0.3+(项目目标:Android 2.2 +,API级别:8+)。
答案 4 :(得分:0)
答案 5 :(得分:0)
至少在构建工具的更高版本上,问题是放入此属性的值会传递到<property name="source.absolute.dirs" location="source.dirs"/>
。 location
属性不知道如何处理冒号/分号分隔的路径。
修复非常简单,只需使用:
source.absolute.dirs=src1:src2:src3
等,而不是:
source.dirs=src1:src2:src3