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

Поэтому я почти всегда получаю такое сообщение, когда компилирую свое приложение для Android:

[javac] Note: /home/kurtis/sandbox/udj/androidApp/src/org/klnusbaum/udj/PlaylistFragment.java uses or overrides a deprecated API.
[javac] Note: Recompile with -Xlint:deprecation for details.

Как перекомпилировать с этой опцией? Нужно ли что-то редактировать в моем build.xml?


person Kurtis Nusbaum    schedule 07.10.2011    source источник
comment
Если вы используете Gradle вместо Ant, см. stackoverflow.com/questions/18689365/   -  person aleb    schedule 11.07.2014


Ответы (5)


Да, согласно инструкции ниже в файле build.xml, если вы хотите...

         - Customize only one target:
             - copy/paste the target into this file, *before* the
               <setup/> task.
             - customize it to your needs.

Это означает:

  1. Перейдите в файл $ANDROID_SDK_ROOT/tools/ant/main_rules.xml и скопируйте цель «компилировать».

  2. Вставьте его в файл build.xml перед задачей ‹setup/›.

  3. Затем добавьте в задачу следующий элемент:

    <compilerarg value="-Xlint:deprecation"/>
    
  4. Точно так же вы можете добавить другие параметры компилятора, например, для непроверенных операций:

    <compilerarg value="-Xlint:unchecked"/>
    
person SPitBalls.com    schedule 21.10.2011
comment
Потрясающий. Я попробую это, когда вернусь домой, и, возможно, проголосую и приму ваш ответ. - person Kurtis Nusbaum; 21.10.2011

Эти свойства также можно определить в командной строке Ant, избегая правок:

ant "-Djava.compilerargs=-Xlint:unchecked -Xlint:deprecation" debug

Чтобы включить все предупреждения Lint:

ant -Djava.compilerargs=-Xlint debug

person Joe Bowbeer    schedule 07.05.2012
comment
Спасибо. Отличное предложение. - person Bram; 01.11.2012

Еще проще и без необходимости копировать полную цель javac: поместите следующую строку в файл ant.properties:

java.compilerargs=-Xlint:unchecked

Таким образом, он просто переопределяет java.compilerargs из конфигурации сборки Android SDK по умолчанию. (Вы можете сами убедиться, что по умолчанию он пуст, кстати). Никаких проблем с обновлением SDK, которое может изменить цель javac по умолчанию без уведомления вашего проекта.

Просто более детальный способ сделать! :)

person Friedryk    schedule 21.11.2012

Похоже, вы должны просто указать параметр в build.properties или ant.properties в корне папки вашего проекта. Я попробовал это, и это, похоже, не сработало. Я хотел избежать редактирования моего файла build.xml, так как это усложнит работу позже, если вам нужно будет обновить свой проект. Однако я не смог найти обходной путь. Однако вместо того, чтобы копировать цель compile, я добавил:

<property name="java.compilerargs" value="-Xlint:unchecked" />

непосредственно перед строкой import внизу файла.

person sk8geek    schedule 04.02.2012

Если вы хотите иметь хороший конвейер CI + CD и заботитесь о качестве своего кода, хорошим вариантом для отображения дополнительной информации о жалобах на ворсинки является добавление этого в ваш верхний/корневой gradle.build:

subprojects {
  gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
      options.compilerArgs += [
        '-Xlint:unchecked', // Shows information about unchecked or unsafe operations.
        '-Xlint:deprecation', // Shows information about deprecated members.
      ]
    }
  }
}

or

subprojects {
  gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
      options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
    }
  }
}

Если вы хотите добавить только одну опцию (обычно вы добавляете больше), внутри задачи JavaCompile вам просто нужно добавить:

options.compilerArgs << "-Xlint:unchecked"

Это 2018 год, и вы можете положиться на Gradle, чтобы настроить это. Я добавил только два параметра аргумента компилятора, но их гораздо больше. Дополнительную информацию можно найти здесь и здесь.

person cesards    schedule 19.09.2018