1

在使用 eclipse 创建项目时,我需要最低 SDK 作为 Android 2.2(Froyo) 和 Target SDK 作为 Android 4.2(Jelly Bean) 与 Android 4.3 一起编译。我使用 sqlitebrowser v2.ob1 来创建数据库。我的应用程序运行时没有任何错误(尽管在 logcat 中只有几行红色),并且在我在模拟器中运行它时满足了我的要求。我尝试了 3 种不同的模拟器,效果很好。但是当我在移动设备上尝试这个应用程序时,只要与数据库有关,它就会显示强制关闭。我的意思是说,当它必须从数据库中检索或连接到数据库时,它会显示强制关闭。通过搜索,我了解到即使在其中使用外部创建的数据库(复制到 assets 文件夹,然后复制到默认位置),只要 .apk 文件就足以让应用程序运行。我的问题是

  1. 我的应用程序不应该在从 Android 2.2 到 4.2 的任何设备上正常工作吗?

  2. 我应该尝试用 Android 4.2 编译应用程序吗?

  3. 我不确定我尝试过的设备版本,但我确定它在 2.2 和 4.2 之内。(可能是姜饼)。除了通过 USB 将设备插入 PC 并查看 logcat(因为我没有安卓手机),我还能做些什么来解决这个问题?

  4. 应用程序的版本、模拟器和移动设备或任何其他设备的版本如何相关?

  5. 我的应用程序可以在哪些版本的设备上运行?

这是我的第一个 android 应用程序,所以任何帮助表示赞赏。提前感谢

4

1 回答 1

4

您可能在应用程序中使用了较低版本的 SDK 不支持的功能。如果没有任何源代码或堆栈跟踪,很难准确地告诉你那可能是什么,但我可以澄清你对minSdkVersionand的理解targetSdkVersion

考虑到 Android SDK 的每个新版本都会引入以前版本中不存在的附加功能和 API。显然,旧版本的 Android 不支持这些功能。

当您指定 a 时targetSdkVersion,您指定您正在使用在该特定 Android 版本中引入的功能。您还暗示您已经在该特定 API 级别测试了您的应用程序,并且它可以正常工作。

当您指定aminSdkVersion低于.targetSdkVersion

例如,如果我想运行 Jelly Bean 中引入的功能但我想保留对较低 API 级别的支持(例如 Gingerbread),我可能会在运行该功能之前添加以下检查(请参阅此处的其他版本代码):

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    // run some code specific to API level 16
}

Android SDK 可以自动处理在较低 API 级别引入的代码,但不能自动处理特定于较高 API 级别的代码。

因此,考虑到这一点,回答您的问题:

  1. 不,它只保证您的应用程序可以在 Android 4.2 上正常运行。您可以确保它与您希望支持的早期版本保持向后兼容。

  2. 应该没关系。相反,您应该首先确定您的应用程序是否在与您的目标运行相同 API 级别(Android 4.2,API 级别 17)的设备/模拟器上运行,然后在运行较低版本的设备/模拟器上运行它并尝试隔离导致它崩溃的代码(logcat 会很有帮助)。

  3. 您可以通过进入设置 > 关于手机 > Android 版本来检查设备的 Android 版本。如果它正在运行 Gingerbread,请记住从那时起已经引入了许多新功能,并且您的应用程序可能正在使用其中一些功能。对于模拟器,您可以在创建模拟器时指定 API 级别(您可以从 SDK 管理器下载其他版本使用)。

  4. 我认为到目前为止我的回答已经明确了这种关系。

  5. 重申一下,您的应用程序将在任何运行 Android 2.2 或更高版本的设备上运行,但如果您使用的 API 级别高于设备正在运行的功能,它可能会崩溃。

如果这仍然不清楚,您应该在 Android 文档中阅读更多关于支持多个平台版本的信息:这里

于 2013-11-04T06:56:21.710 回答