我刚刚在我的玻璃XE 20.1上尝试了更新的gdk,我的测试应用程序崩溃了,因为新的api不可用。
CardBuilder card = new CardBuilder(this, CardBuilder.Layout.TEXT);
(旧的Card构造函数已弃用.Builder模式正在替换它。)
日志:
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,但是当新的sdk出来时,Glass SDK_INT将不会更新。
处理这个问题的正确方法是什么?有没有比使用反射来测试特定类的可用性更好的方法?
我错过了什么吗?
修改
基于API演示,似乎我们不应该关心。让它打破旧的XE。希望所有眼镜都很快得到更新。 请参阅https://github.com/googleglass/gdk-apidemo-sample/commit/e644c7325bb74a02b0f383bf9f19e9f851313dc2
答案 0 :(得分: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();
}
}
注意:我没有在旧的XE上进行过测试,因为我已经刷过了XE 21。
但这很难看。希望我们有更好的方法来解决这个问题。
答案 1 :(得分:1)
您使用的是XE21.0还是XE20.1?如果您使用的是XE20.1,则CardBuilder不可用。随着XE21.0本周开始推出,您需要等到本周某个时候更新设备。
在检查Glass的运行时版本方面,当前的设置肯定不是很好。一般情况下,即使GDK类被弃用,它们也将在未来的版本中大部分可用,以免破坏向后兼容性。因此,对于更多版本,您可能最好不要使用旧的API,即使它已被弃用。
据说,除了使用反射之外,您还可以检查增量构建版本(http://developer.android.com/reference/android/os/Build.VERSION.html#INCREMENTAL)。这应该与XE版本进行1:1映射,但不会公布每个版本的增量版本(您必须尝试找到这个)。
答案 2 :(得分:-1)
由于Google Glass仍处于“测试版”状态,因此无论何时发布新版本,我们都需要升级到当前的GDK版本。新版本几乎每月发布一次。
我希望一旦谷歌眼镜以公开形式发布,可能会支持“最低版本号”......但谷歌尚未发布该声明。
所以..随着GDK的每个版本的发布(以及补丁纠正问题或添加功能)密切关注变化,以便您(以及我们其他人)可以保留我们新生的Glassware(或“bo”玻璃器皿)将继续运行。)