Я новичок в разработке Android и хотел немного узнать об инструменте Lint и проверке NewApi. Однако после некоторых тестов я немного запутался.
После создания нового проекта Android-приложения в IntelliJ IDEA я добавил код в метод onCreate, и теперь он выглядит так:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Display d = getWindowManager().getDefaultDisplay();
Point size = new Point();
d.getSize(size); // API level 13
isDestroyed(); // API level 17
NativeActivity nativeActivity = new NativeActivity(); // API level 11
nativeActivity.getContentResolver(); // API level 11
Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); // API level 9
boolean canDisableShutterSound = cameraInfo.canDisableShutterSound; // API level 17
}
В файле манифеста у меня есть
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="17" />
После компиляции проекта и запуска lint из командной строки:
lint --check NewApi --classpath c:\_dev\TestNewApi\out c:\_dev\TestNewApi
Я получил следующий результат:
Scanning TestNewApi: .......
out\production\TestNewApi\com\example\TestNewApi\MyActivity.class: Error: Call requires API level 9 (current min is 7): android.app.NativeActivity#getContentResolver [NewApi]
out\production\TestNewApi\com\example\TestNewApi\MyActivity.class: Error: Call requires API level 9 (current min is 7): new android.app.NativeActivity [NewApi]
out\production\TestNewApi\com\example\TestNewApi\MyActivity.class: Error: Call requires API level 9 (current min is 7): new android.hardware.Camera.CameraInfo [NewApi]
out\production\TestNewApi\com\example\TestNewApi\MyActivity.class: Error: Field requires API level 9 (current min is 7): android.hardware.Camera.CameraInfo#canDisableShutterSound [NewApi]
4 errors, 0 warnings
Так что никаких претензий к методам getSize и isDestroyed нет. И после изменения minSdkVersion на 9 результат проверки:
Scanning TestNewApi: .......
No issues found.
Мне кажется, что в обоих случаях проверяются только классы, и если класс был введен в minSdkVersion или после него, то все в порядке. Это ожидаемое поведение? А может я что-то упускаю?
1 ответ
Это ожидаемое поведение?
ИМХО нет. Я вижу такое же поведение в Eclipse, и ИМХО, это ошибка. Обычно Lint будет жаловаться на методы, которые новее, чем ваши android:minSdkVersion
или @TargetApi()
. Я не совсем уверен, почему здесь этого не делают.
Я подал проблему, связанную с этим.
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.