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

时间:2013-11-04 02:20:25

标签: android android-version

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

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

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

  3. 我不确定我尝试过的设备版本,但我确定它在2.2和4.2之内。 (可能是姜饼)。除了通过USB将设备插入PC并看到logcat(bcoz我没有自己的Android手机),我该怎么办才能解决这个问题?

  4. 该应用的版本,模拟器和手机版本或任何其他相关设备如何相关?

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

  6. 这是我的第一个Android应用程序,所以任何帮助表示赞赏。谢谢你的推荐

1 个答案:

答案 0 :(得分:4)

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

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

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

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

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

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级别高于设备运行的功能,则可能会崩溃。

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

相关问题