Условная компиляция в Android?
Есть ли какая-нибудь условная компиляция для Android?
Я должен был сделать свой проект для Android 3 (API 11) только потому, что ExifInterface почти не имеет полезных атрибутов в Android 2.3 (API 10), несмотря на то, что он появился в API 5 (!!??). Я не хочу ограничивать свое приложение пользователями ICS.
Спасибо!
3 ответа
Вы можете динамически проверять текущую версию API устройства и делать разные вещи в зависимости от этого:
if(Build.VERSION.SDK_INT < 14) {
// Crappy stuff for old devices
}
else {
// Do awesome stuff on ICS
}
Но будьте осторожны, если вам нужно создать экземпляры классов, которые доступны не для всех API, вы должны сделать это в runnable или в отдельном классе-оболочке, например:
if(Build.VERSION.SDK_INT < 14) {
// Crappy stuff for old devices
}
else {
// Do awesome stuff on ICS
new Runnable() {
new AmazingClassAvailableOnICS();
(...)
}.run();
}
import android.annotation.TargetApi;
а затем используйте аннотации:
@TargetApi(11)
public void methodUsesAPI11()
{
...
Использование этого трюка делает очень простую вещь: он позволяет скомпилировать некоторый код, который содержит вызовы уровня 11 API (классы, методы и т. Д.) И все еще установлен android:minSdkVersion="8"
в манифесте. Больше ничего, больше ничего.
Остальное зависит от тебя. Вы должны проверить версию платформы, прежде чем позвонить methodUsesAPI11()
или вы обрабатываете исключения для предотвращения сбоя приложения и выполнения других действий на старых платформах.
Достаточно проверить Build.VERSION.SDK_INT или использовать аннотации, однако эта ссылка, которую я добавил в закладки, может иметь отношение к вашему делу: http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html?m=1
Вы можете использовать то, что они описывают там, чтобы иметь классы, которые могут быть несовместимы, но никогда не будут загружены. Это не условная компиляция, но это может быть то, что вам нужно, однако, это немного сложнее.