Обратная совместимость Google Glass GDK?
Я только что опробовал обновленный gdk на моем стекле XE 20.1, и мое тестовое приложение упало, потому что новый API недоступен.
CardBuilder card = new CardBuilder(this, CardBuilder.Layout.TEXT);
(Старый конструктор Card устарел. Шаблон строителя заменяет его.)
Журнал:
09-09 00:27:16.239 1992-1992/com.prat.testgdk E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.prat.testgdk, PID: 1992
java.lang.NoClassDefFoundError: com.google.android.glass.widget.CardBuilder
at com.prat.testgdk.MainActivity.buildView(MainActivity.java:95)
at com.prat.testgdk.MainActivity.onCreate(MainActivity.java:40)
На других устройствах Android я могу проверить android.os.Build.VERSION.SDK_INT или установить minSdkVersion, но на Glass SDK_INT не будет обновляться при выходе нового sdk.
Как правильно с этим бороться? Есть ли лучший способ, чем использовать рефлексию для проверки доступности определенных классов?
Я что-то пропустил?
Редактировать:
Судя по демоверсии API, нам все равно. Пусть это сломается на старых XE. Надеюсь, все очки скоро будут обновлены. См. https://github.com/googleglass/gdk-apidemo-sample/commit/e644c7325bb74a02b0f383bf9f19e9f851313dc2
3 ответа
Сейчас я бы использовал отражение... Вероятно:
private View buildView() {
try {
String cardBuilderName = "com.google.android.glass.widget.CardBuilder";
Class clazz = Class.forName(cardBuilderName);
CardBuilder cardBuilder = new CardBuilder(this, CardBuilder.Layout.TEXT);
cardBuilder.setText(R.string.hello_world);
return cardBuilder.getView();
} catch (Exception e) {
//ClassNotFoundException?
Log.v(TAG, e.toString());
Card card = new Card(this);
card.setText(R.string.hello_world);
return card.getView();
}
}
Примечание: я не тестировал старые XE, потому что прошил XE 21.
Но это безобразно. Надеюсь, у нас есть лучший способ справиться с этим.
Вы на XE21.0 или XE20.1? Если вы используете XE20.1, то CardBuilder недоступен. Вам нужно будет подождать, пока ваше устройство не будет обновлено где-то на этой неделе, так как XE21.0 начал развертываться на этой неделе.
С точки зрения проверки рабочей версии Glass, определенно, настройка в настоящее время невелика. Обычно, даже если классы GDK устарели, они будут в основном доступны в будущих выпусках, чтобы не нарушать обратную совместимость. Так что вам, вероятно, лучше придерживаться старого API, даже если он устарел, для еще нескольких выпусков.
С учетом сказанного, помимо использования рефлексии, вы можете проверить версию инкрементной сборки ( http://developer.android.com/reference/android/os/Build.VERSION.html). Это должно иметь соотношение 1:1 с выпусками XE, хотя в нем не объявляется, что такое инкрементная версия для каждого выпуска (вам придется экспериментировать, чтобы найти это).
Поскольку Google Glass все еще находится в состоянии "бета", нам нужно будет обновляться до текущей версии GDK при каждом выпуске новой версии. Новые выпуски были сделаны почти ежемесячно.
Я ожидаю, что после того, как Google Glass будет выпущен в общедоступной форме, "минимальная версия SDK" может быть поддержана... но это объявление еще не было сделано Google.
Так что... внимательно следите за изменениями по мере выпуска каждой версии GDK (и исправляйте проблемы или добавляйте новые функции), чтобы вы (и остальные из нас) могли оставить нашу зарождающуюся стеклянную посуду (или стеклянную посуду "до бо" и впредь бежать).