android - 设备的Android版本与应用中指定的版本之间的关系

标签 android android-version

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

  1. 我的应用难道不能在 Android 2.2 到 4.2 的任何设备上正常运行吗?

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

  3. 我不确定我试用过的设备版本,但可以肯定它在 2.2 和 4.2 之间。 (可能是 Gingerbread )。除了通过 USB 将设备插入 PC 并看到 logcat(因为我没有 Android 手机)之外,我还能做些什么来解决这个问题?

  4. 应用的版本、模拟器和手机或任何其他设备的版本有什么关系?

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

这是我的第一个 Android 应用程序,因此非常感谢您的帮助。提前致谢

最佳答案

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

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

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

当您指定的 minSdkVersion 低于您的 targetSdkVersion 时,您暗示您的应用程序将在较低的 API 级别上正常工作因为您手动编程测试或检查您的代码,以确保当前的 API 级别在运行之前与功能兼容

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

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 Manager 下载其他版本以供使用)。

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

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

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

关于android - 设备的Android版本与应用中指定的版本之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19760713/

相关文章:

Android 版本依赖编译

java - Android 应用程序支持主要的 android 版本

Android:JavaCv 从相机获取 IplImage

android - 当我已经手动安装旧版本的 apk 时,Google Play 不显示 "Update"功能

android - ListView 和 ReferenceHolder

java - 在类中找不到 Social_Security_Number 的 setter /字段

android - 如何找到运行 Android 应用程序的 ChromeOS 版本?

android - 为什么Android版本代码和版本名称一直回到1和1.0?

Android EditText - 专注于它并以编程方式选择所有文本

java - java.sql.PreparedStatement 的 Android 实现