Android MapActivity上的NoClassDefFoundError
在某些设备上,我们的应用程序在启动地图活动时因NoClassDefFoundError而崩溃 是的,我们有权限和库以及运行MapActivity所需的所有东西。99.9%的设备(所有的设备都有谷歌服务…)都能正常工作 然而,有2-3台我从未听说过的设备(例如:Prestigio-PAP4040_DUO或MID-PAD-FMD700P或rockchip AN9G2)似乎没有谷歌服务,也不可能打开地图活动 有没有可能检测到这一点,并可能显示类似“您的手机不支持谷歌地图,对不起” (是的,我们可以忽略数千台2-3台设备,但我们尝试支持所有设备) 有没有可能检测到这一点,并可能显示类似“您的手机不支持谷歌地图,对不起” 如果您的Android MapActivity上的NoClassDefFoundError,android,google-maps,Android,Google Maps,在某些设备上,我们的应用程序在启动地图活动时因NoClassDefFoundError而崩溃 是的,我们有权限和库以及运行MapActivity所需的所有东西。99.9%的设备(所有的设备都有谷歌服务…)都能正常工作 然而,有2-3台我从未听说过的设备(例如:Prestigio-PAP4040_DUO或MID-PAD-FMD700P或rockchip AN9G2)似乎没有谷歌服务,也不可能打开地图活动 有没有可能检测到这一点,并可能显示类似“您的手机不支持谷歌地图,对不起” (是的,我们可以忽略
MapActivity
没有绑定到启动程序图标,可能是这样。我猜您的NoClassDefFoundError
来自MapActivity
或来自Maps V1 SDK插件的其他内容。在这种情况下,在尝试启动任何MapActivity
之前,请使用Class.forName()
检测是否有来自Maps V1的类
这说明了这一点。启动器图标绑定到主题.NoDisplay
活动,该活动具有以下onCreate()
:
如果查看MapActivity
是否存在的测试成功,我们可以安全地启动MapActivity
(此处命名为NooYawk
)。如果我们得到一个异常,我们只需退出一个Toast
有没有可能检测到这一点,并可能显示类似“您的手机不支持谷歌地图,对不起”
如果您的MapActivity
没有绑定到启动程序图标,可能是这样。我猜您的NoClassDefFoundError
来自MapActivity
或来自Maps V1 SDK插件的其他内容。在这种情况下,在尝试启动任何MapActivity
之前,请使用Class.forName()
检测是否有来自Maps V1的类
这说明了这一点。启动器图标绑定到主题.NoDisplay
活动,该活动具有以下onCreate()
:
如果查看
MapActivity
是否存在的测试成功,我们可以安全地启动MapActivity
(此处命名为NooYawk
)。如果我们遇到异常情况,我们只需带着祝酒辞退出即可
谢谢您的快速回答。对我来说似乎是合法的,我很快就会接受它,但是:你知道如何在没有一千台设备的情况下测试它吗?我们这里有几个BB10设备,我们将在它们上进行测试(编译、侧加载、测试),但可能对其他人有任何提示?@Christoph:使用没有Google API的模拟器映像。在模拟器中测试,效果非常好。Thx如果你能把catch(异常e){改为catch(ClassNotFoundException e),也没问题(永远不要捕获所有内容),谢谢你的快速回答。对我来说似乎是合法的,我很快就会接受。但是:你知道如何在没有一千台设备的情况下测试这个吗?我们这里有两台BB10设备,我们将在它们上进行测试(编译、侧载、测试)但可能对其他人有任何提示吗?@Christoph:使用没有Google API的仿真器映像。在仿真器中进行测试,效果完美。Thx如果您可以将catch(异常e){更改为catch(ClassNotFoundException e),也可以(从不捕获所有内容)
public void onCreate(Bundle instanceState) {
super.onCreate(instanceState);
try {
Class.forName("com.google.android.maps.MapActivity");
startActivity(new Intent(this, NooYawk.class));
}
catch (Exception e) {
Toast
.makeText(this,
"Google Maps are not available -- sorry!",
Toast.LENGTH_LONG)
.show();
}
finish();
}