我需要使用Ant脚本生成apk文件,但是我遇到了编译目标的问题。为了自动生成Ant脚本,我使用了带有android update project
命令的Android工具。问题是这个项目依赖于另一个项目,所以我需要使用自定义编译任务。
出于这个原因,我已经覆盖了该目标:我已经从ant_rules_r3.xml
复制了已编译的任务,并且我已经更改了javac
这样的任务(请参阅我更改的评论):
<!--I've changed the target 1.5 to target 1.6 -->
<javac encoding="UTF8" target="1.6" debug="true" extdirs=""
destdir="${out.classes.absolute.dir}"
bootclasspathref="android.target.classpath"
verbose="${verbose}"
classpath="${extensible.classpath}"
classpathref="android.libraries.jars">
<src path="${source.absolute.dir}" />
<!--My project has two src directories -->
<src path="${source2.absolute.dir}" />
<src path="${gen.absolute.dir}" />
<src refid="android.libraries.src" />
<!--I've added here the src dir of the other project -->
<src path="${dep1.source.absolute.dir}"/>
<classpath>
<!--I've added here the lib dir of the other project -->
<fileset dir="${dep1.external.libs.absolute.dir}" includes="*.jar" />
<fileset dir="${external.libs.absolute.dir}" includes="*.jar" />
<fileset dir="${extensible.libs.classpath}" includes="*.jar" />
</classpath>
</javac>
问题在于,当我使用ant compile
进行编译时,出现以下错误:
[javac].... cannot find symbol
[javac] symbol : constructor IOException(java.lang.String,java.security.NoSuchAlgorithmException)
[javac] location: class java.io.IOException
[javac] throw new IOException("Algorithm not found", e);
尽管我已经将目标属性设置为1.6,但它似乎是用JDK 1.5而不是1.6编译的。我的电脑使用的是Java版本1.6.0_20。
我尝试过使用javac compiler="javac1.6"
,但我收到同样的错误。
我也设置了build.properties
:
ant.build.javac.target=1.6
ant.build.javac.source=1.6
但它也没有解决问题。将其设置为1.3而不是1.6会导致更多错误,因此它似乎正在使用我在此处设置的JDK。
如何才能正确编译?
答案 0 :(得分:2)
因为你已经指定了bootclasspath来使用Android SDK类,所以这些可能包含IOException类,它没有实现带有Throwable second arg的two-arg构造函数。这个构造函数在Java 6中是新的,但根据recent Android (2.2) docs,Android版本只有Java-1.5样式构造函数,而不实现了两个带有Throwable args的新构造函数。 / p>
您没有提到在引入第二个项目之前是否已成功构建它 - 所以我建议您检查本地Android引导类以查看IOException提供的构造函数。