2014-09-09 3 views
3

Я только что попробовал обновленный gdk на моем стекле XE 20.1, и мое тестовое приложение разбилось, потому что новый api недоступен.Google Glass GDK обратная совместимость?

CardBuilder card = new CardBuilder(this, CardBuilder.Layout.TEXT); 

(. Старый конструктор карты осуждается Builder шаблон заменяет его.)

Log:

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.

Каков правильный способ справиться с этим? Есть ли лучший способ, чем использовать рефлексию для проверки наличия определенных классов?

Я что-то упустил?

Edit:

На основе АНИ демо, кажется, что мы не должны заботиться. Пусть это сломается на старых XE. Надеюсь, все очки скоро будут обновлены. https://github.com/googleglass/gdk-apidemo-sample/commit/e644c7325bb74a02b0f383bf9f19e9f851313dc2

ответ

-1

Поскольку Google Glass по-прежнему находится в состоянии «бета-тестирования», нам нужно обновиться до текущей версии GDK всякий раз, когда будет выпущена новая версия. Новые выпуски были сделаны почти ежемесячно.

Я ожидаю, что после того, как Google Glass выпустит в нем публичную форму, можно поддерживать «минимальную версию sdk» ... но это объявление еще не было сделано компанией Google.

Итак, внимательно следите за изменениями, поскольку каждая версия GDK освобождается (и исправляет проблемы или добавляет функции), поэтому вы (и остальная часть нас) можете сохранить нашу зарождающуюся посуду (или «болоть») Стеклянная посуда будет продолжать работать).

2

На данный момент, я хотел бы использовать отражение ... Возможно:

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(); 
    }   
} 

Примечание: Я не проверял на старых префиксов, потому что я мелькнула КСЕНОН 21.

Но это некрасиво. Надеюсь, у нас есть лучший способ справиться с этим.

1

Вы на XE21.0 или XE20.1? Если вы находитесь на XE20.1, то CardBuilder недоступен. Вам нужно будет дождаться, пока ваше устройство будет обновлено на этой неделе, когда XE21.0 начнет развертываться на этой неделе.

С точки зрения проверки версии стекла, определенно, установка в настоящее время невелика. В целом, хотя даже если классы GDK устарели, они будут в основном доступны в будущих выпусках, чтобы не нарушать совместимость в обратном направлении. Таким образом, вы, вероятно, лучше придерживаетесь старого API, даже если он устарел, для еще нескольких выпусков.

С учетом сказанного, помимо использования отражения, вы можете проверить инкрементную версию сборки (http://developer.android.com/reference/android/os/Build.VERSION.html#INCREMENTAL). Это должно иметь сопоставление 1: 1 с выпусками XE, хотя его не объявили о том, какая инкрементная версия для каждой версии (вам придется поэкспериментировать, чтобы найти это).

Смежные вопросы