0

我在低于 3 的 Android 版本上从我的应用程序收到(来自 bugsense)崩溃报告。但应用程序已在清单中声明:

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="17" />

因此,一旦用户移动,应用程序就会崩溃。

这怎么可能?我知道安装应该失败并显示“包分析失败”消息。我是否必须实施应用内 Android 版本检查?还是我在清单中遗漏了什么?

一个例子:

0java.lang.NoSuchMethodError: xxx.xxx.xxx.MyActivity.getFragmentManager
1at xxx.xxx.xxx.MyActivity.onCreate(MyActivity.java:98)
2at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
3at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
4at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
5at android.app.ActivityThread.access$1500(ActivityThread.java:117)
6at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
7at android.os.Handler.dispatchMessage(Handler.java:99)
8at android.os.Looper.loop(Looper.java:123)
9at android.app.ActivityThread.main(ActivityThread.java:3729)
10at java.lang.reflect.Method.invokeNative(Native Method)
11at java.lang.reflect.Method.invoke(Method.java:507)
12at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:874)
13at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:632)
14at dalvik.system.NativeStart.main(Native Method)

我敢打赌我SuchMethod在 Android 2.3.3 中没有

无论如何,本周的总错误仅发生3在每天大约 1k 用户和 3.5k 会话上。所以把这个 Q 当作一个练习。

4

2 回答 2

0

如果应用程序安装在不符合指定 API 级别的设备上,则会在执行特定于某个不受支持的 API 级别的代码时崩溃。但是,指定 minSdkVersion 应该会阻止它安装在不符合此级别的设备上。

但是,使用上面的“uses-sdk”定义,满足最低 SDK 要求的设备也有可能启动应用程序,但稍后当您使用特定于目标 SDK 更高级别的方法时会崩溃(即在仅满足级别 11 的最低要求的设备上使用 API 级别 17 方法)。如果是这种情况,您将不得不使用应用程序内检查或使用 @TargetApi 或类似方法注释方法。但是,看到您提到您收到低于最低 SDK 级别的 Android 版本的崩溃,似乎还有其他问题。

不想开玩笑:但是您能否确认此应用程序的所有版本(已向公众提供)都包含您帖子中描述的“uses-sdk”声明?可能是旧版本的应用程序崩溃了,而您阅读的不是最新可用 APK 的错误报告,而是以前版本...

于 2013-05-13T15:14:02.373 回答
-2

每当您使用低于 3 的 Android 版本时。您需要使用较低的 minSdkVersion 到 8。

<uses-sdk  android:minSdkVersion="8" 
    android:targetSdkVersion="17" />

使用它,它将适用于所有 Android 版本的设备。

于 2013-05-13T15:08:51.523 回答