Как реализуется создание нескольких сборок под разный API ?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Как реализуется создание нескольких сборок под разный API ?
Ситуация такая. Есть НЕМНОГО кода, который идет с API, который по уровню выше. К примеру нужно мне обращаться к нескольким камерам, но наше приложение заточено к API 7, а там только с API 9. Тут я вижу только вариант двух сборок, либо что-то на подобие дополнительной библиотеки, например как FragmentDialog.
Но хочется чтобы можно было в одном приложении отслеживать параметры устройства и уже решать, что включать. Возможно ли такое дело?
Но хочется чтобы можно было в одном приложении отслеживать параметры устройства и уже решать, что включать. Возможно ли такое дело?
Re: Как реализуется создание нескольких сборок под разный AP
Зачем разные сборки?
Можно же реализовать проверку версии API устройства и если она подходит то выполнить нужный метод через invoke.
Можно же реализовать проверку версии API устройства и если она подходит то выполнить нужный метод через invoke.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Как реализуется создание нескольких сборок под разный AP
Т.е. использовать рефлексию? А если такого кода не один метод? Я думаю это слишком громоздко выйдет. Неужели альтернатив никаких?
Re: Как реализуется создание нескольких сборок под разный AP
Без проблем, никаких отражений не нужно, пусть приложение отслеживает под какой версией Андроид запускается и по результатам исполняет соответствующий код. Компилировать нужно, естественно, с API в которой поддерживаются все используемые методы и классы (иначе не построится).
Чтобы Lint не ругался на методы которые не поддерживаются в API указанной в minSdkVersion можно пометить их аннотацией @TargetApi() (в скобках указать версию API в которой этот метод поддерживается)
Чтобы Lint не ругался на методы которые не поддерживаются в API указанной в minSdkVersion можно пометить их аннотацией @TargetApi() (в скобках указать версию API в которой этот метод поддерживается)
Код: Выделить всё
import android.annotation.TargetApi;
...
if (Build.VERSION.SDK_INT>=9){
methodSupportedAPI9();
}
...
@TargetApi(9)
private void methodSupportedAPI9() {
}
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Как реализуется создание нескольких сборок под разный AP
Благодарю! Это в точности, что мне надо!
Re: Как реализуется создание нескольких сборок под разный AP
Кстати, если кто не обратил внимание, гугловцы пометили 9-ю платформу как устаревшую (Obsolete) так же как и 2,5,6. Это означает, что они перестали поддерживать эти версии на уровне SDK.
Я 9-ю вообще удалил, чтоб не мешалась, т.к. пользуюсь последними версиями ADT и SDK-Tools, а в них она глючит, особенно визуальный редактор, а раз она помечена как вышедшая из употребления, то претензий не принимают ))
Я 9-ю вообще удалил, чтоб не мешалась, т.к. пользуюсь последними версиями ADT и SDK-Tools, а в них она глючит, особенно визуальный редактор, а раз она помечена как вышедшая из употребления, то претензий не принимают ))
Re: Как реализуется создание нескольких сборок под разный AP
А есть такой же простой способ, чтоб определить планшет или смартфон?
Re: Как реализуется создание нескольких сборок под разный AP
http://stackoverflow.com/questions/9279 ... -or-tabletneoksi писал(а):А есть такой же простой способ, чтоб определить планшет или смартфон?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Как реализуется создание нескольких сборок под разный AP
Спасибо.rezak90 писал(а):http://stackoverflow.com/questions/9279 ... -or-tabletneoksi писал(а):А есть такой же простой способ, чтоб определить планшет или смартфон?
П.С. Сначала прочел про решение через разрешение и приуныл, но когда увидел решение через ресурсы, просто возрадовался
Re: Как реализуется создание нескольких сборок под разный AP
Мне решение через ресурсы (по приведенной ссылке) слишком изящным не показалось, скорее извращенным.
Создавать два файла в ресурсах чтобы косвенным образом определять с каким размером экрана запущена программа?
А почему напрямую не спросить это у системы?
где 4 это значение константы Configuration.SCREENLAYOUT_SIZE_XLARGE т.к. она определена начиная с API 9 , чтобы проект нормально компилировался с более ранними API можно просто взять её значение.
Создавать два файла в ресурсах чтобы косвенным образом определять с каким размером экрана запущена программа?
А почему напрямую не спросить это у системы?
Код: Выделить всё
int ScreenSize=getResources().getConfiguration().screenLayout&Configuration.SCREENLAYOUT_SIZE_MASK;
if (ScreenSize==4){
//Tablet size
}
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Как реализуется создание нескольких сборок под разный AP
А в чем может быть проблема? Подчеркивает что таких методов нету, а именно getRotation: "The method getRotation() is undefined for the type Display"
Я ведь понимаю, что если определить метод как targetApi(8), то и внутри него можно использовать API 8. Импорт аннотаций добавил.
Код: Выделить всё
@TargetApi(8)
private void setDisplayOrientation(Camera camera, int angle) {
Parameters parameters = camera.getParameters();
Display display = ((WindowManager)context.getSystemService(context.WINDOW_SERVICE)).getDefaultDisplay();
if(display.getRotation() == Surface.ROTATION_0){
parameters.setPreviewSize(height, width);
camera.setDisplayOrientation(90);
}
if(display.getRotation() == Surface.ROTATION_90){
parameters.setPreviewSize(width, height);
}
if(display.getRotation() == Surface.ROTATION_180){
parameters.setPreviewSize(height, width);
}
if(display.getRotation() == Surface.ROTATION_270){
parameters.setPreviewSize(width, height);
camera.setDisplayOrientation(180);
}
camera.setParameters(parameters);
}
Re: Как реализуется создание нескольких сборок под разный AP
Компилировать нужно с API в котором этот метод есть.
targetApi(8) не подключает библиотеки соответствующего API, а только информирует Lint чтобы он не ругался на несоответствии метода с уровнем API указанным в minSdkVersion в манифесте.
targetApi(8) не подключает библиотеки соответствующего API, а только информирует Lint чтобы он не ругался на несоответствии метода с уровнем API указанным в minSdkVersion в манифесте.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Как реализуется создание нескольких сборок под разный AP
А как это будет выглядеть? Нужно удалить старую библиотеку (у меня она 2.1) и поставить с API9 ? Или добавочно подгрузить API9? Второй вариант полазив в настройках, никак не смог найти.
Re: Как реализуется создание нескольких сборок под разный AP
Просто в настройках Project->Properties->Android справа выбираете нужный API и все. ADT автоматически поменяет библиотеку
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Как реализуется создание нескольких сборок под разный AP
Да, был там. У меня там только 2.1 стояла. потом до меня дошло, что скачал только 2.1 . Благодарю за помощь, думаю сейчас всё должно получиться.