Проверки API Android Eclipse Lint

Спасибо PT за то, что похоже на правильный ответ на вопрос. Создание приложений с несколькими SDK для Android в Eclipse без потери времени проверки . Однако, когда я пытаюсь использовать аннотацию @TargetApi (), как рекомендовано, она генерирует синтаксические ошибки.

@TargetApi(11) // location 1 public class DisplayMessageActivity extends Activity { @Override @TargetApi(11) // location 2 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { @TargetApi(11) // location 3 getActionBar().setDisplayHomeAsUpEnabled(true); } 

Генерирует две синтаксические ошибки в строке @TargetApi, когда она находится в середине кода, как показано в позиции 3:

 x Syntax error, insert "enum Identifier" to complete EnumHeaderName x Syntax error, insert "enumBody" to complete BlockStatements 

Ошибки существуют, есть @TargetApi строка @TargetApi перед оператором if или после нее, как показано. Существуют ли какие-либо предварительные условия (импорт) или другие соображения, не упомянутые в Lint API Check статью http://tools.android.com/recent/lintapicheck, чтобы получить работу @TargetApi () правильно?

— Редактировать 9/3/2012 —

Если я перемещаю аннотацию @TargetApi до определения класса (показано как местоположение 1) или до определения метода (показано как местоположение 2, до или после аннотации @Override), я получаю разные ошибки:

 x TargetApi cannot be resolved to a type x The attribute value is undefined for the annotation type TargetApi 

— Редактировать 9/4/2012 —

Вот полный исходный код:

 package com.example.my.first.app; import android.app.Activity; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.v4.app.NavUtils; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; public class DisplayMessageActivity extends Activity { @TargetApi(11) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ActionBar introduced in Android 3.0 Honeycomb API 11 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getActionBar().setDisplayHomeAsUpEnabled(true); } // Up Navigation // Get the message from the intent Intent intent = getIntent(); String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); // Create the text view TextView textView = new TextView(this); textView.setTextSize(40); textView.setText(message); // Set the text view as the activity layout setContentView(textView); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_display_message, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: NavUtils.navigateUpFromSameTask(this); return true; } return super.onOptionsItemSelected(item); } } 

FizzBuzz предоставил ответ на этот вопрос: Как вы используете код версии в Android без предупреждений компилятора? ,

В дополнение к аннотации @TargetApi(nn) в коде вам также необходимо импортировать определение этой аннотации:

 import android.annotation.TargetApi; 

По какой-то неизвестной причине импорт не требуется для использования аннотации @Override . Было бы полезно, если бы документация ADT http://tools.android.com/recent/lintapicheck была исправлена, чтобы исключить пример фиктивного кода и указать требуемый импорт.

Пример на веб-сайте с использованием аннотации в середине кода просто неправильный (или, может быть, устаревший). Объявление самой аннотации показывает, что это разрешено только для типов, методов и конструкторов :

 /** Indicates that Lint should treat this type as targeting a given API level, no matter what the project target is. */ @Target({TYPE, METHOD, CONSTRUCTOR}) @Retention(RetentionPolicy.CLASS) public @interface TargetApi { /** * This sets the target api level for the type.. */ int value(); } 

Вставить аннотацию целевого API чуть выше переопределенной аннотации

Intereting Posts
Что-то не так с импортом org.ksoap2.transport.AndroidHttpTransport; Мне нужно установить путь для сохранения изображений с помощью приложения для Android и IOS с UNITY Dummy callback interface Можете ли вы сделать ввод EditText справа налево? Внедрение OnValueИзменить на NumberPicker в Android Как я могу использовать несколько значений для свойств макета Android XML? Извлечение файлов изображений из синтаксического анализа Переопределение одного крана Photoview Scrollview чрезвычайно медленный на ics (android 4.0), когда содержит длинный текст Как автоинкремент версии Код в Android Gradle Android Studio: как удалить / фильтровать варианты сборки для отладки и выпуска buildTypes по умолчанию и сохранить только те, которые используют пользовательские типы buildTypes? Панель инструментов NavigationIcon потеряла тему Android.support.v7 Панель инструментов & DrawerLayout- как скрыть значок гамбургера Обнаружение ориентации телефона с событиями датчиков Android Studio – варианты сборки не отображаются