【问题标题】:Why my app installs on (presumed) not supported versions of Android?为什么我的应用安装在(假定的)不受支持的 Android 版本上?
【发布时间】:2013-05-13 14:59:36
【问题描述】:

我在 Android 版本低于 3 的应用中收到(来自 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)

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

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

【问题讨论】:

  • 好吧,要么有人拥有您的代码并正在通过 SDK 安装,要么有人将您的 APK 侧载到旧版本的设备上。崩溃报告是什么样的?
  • 可能是这种情况,因为它是开源的,因此代码是免费提供的。我正在编辑问题以包含类似的错误。
  • 无论如何,我的应用程序仅通过侧载安装(和应用程序内更新);)

标签: android android-version


【解决方案1】:

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

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

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

【讨论】:

  • 你在第一段中所说的正是我所知道的。我可以确认所有版本一直都报告了 Manifest 摘录。
【解决方案2】:

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

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

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

【讨论】:

  • 我不打算支持低于 3 的版本。所以 11 作为 minSdkVersion 对我来说很好。我只是从低于 3 的版本中崩溃。
猜你喜欢
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
相关资源
最近更新 更多