"не могу найти символ" при компиляции с Ant - PullRequest
2 голосов
/ 13 октября 2010

Мне нужно сгенерировать файл apk, используя скрипт Ant, но у меня проблемы с целью компиляции. Для автоматического создания сценария Ant я использовал инструмент Android с командой android update project. Проблема в том, что этот проект зависит от другого проекта, поэтому мне нужно использовать пользовательскую задачу компиляции.

По этой причине я переопределил эту цель: я скопировал скомпилированную задачу из 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);

Кажется, что он был скомпилирован с JDK 1.5 вместо 1.6, хотя я установил целевое свойство на 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, который я здесь устанавливаю.

Как мне заставить это правильно скомпилироваться?

1 Ответ

2 голосов
/ 14 октября 2010

Поскольку вы указали путь загрузки, чтобы использовать классы Android SDK, вероятно, это будут те, которые содержат класс IOException, который не реализует конструктор с двумя аргументами и вторым аргументом Throwable. Этот конструктор был новым в Java 6, но согласно недавней документации по Android (2.2) , версия Android имеет только конструкторы в стиле Java-1.5, а не реализует два более новых конструктора которые берут Throwable args.

Вы не упомянули, удалось ли вам это успешно построить, прежде чем вводить второй проект - поэтому я бы порекомендовал проверить ваши локальные загрузочные классы Android, чтобы увидеть, что предлагают конструкторы IOException.

...