在使用eclipse创建项目时,我需要使用最低SDK作为Android 2.2(Froyo)和Target SDK作为Android 4.2(Jelly Bean)使用Android 4.3进行编译。我使用sqlitebrowser v2.ob1来创建数据库。我的应用程序运行没有任何错误(尽管在logcat中红线很少)并且当我在模拟器中运行它时满足我的要求。我尝试了3种不同的模拟器,它工作正常。但是,当我在移动设备中尝试使用此应用程序时,只要与数据库有关,它就会显示强制关闭。我的意思是说它必须从数据库检索或连接到数据库时显示强制关闭。通过搜索,我了解到只有.apk文件足以让应用程序运行,即使在其中使用了外部创建的数据库(复制到资源文件夹然后再到默认位置)。我的问题是
我的应用程序在Android 2.2到4.2之间的任何设备上都不能正常工作吗?
我应该尝试使用Android 4.2编译应用程序吗?
我不确定我尝试过的设备版本,但我确定它在2.2和4.2之内。 (可能是姜饼)。除了通过USB将设备插入PC并看到logcat(bcoz我没有自己的Android手机),我该怎么办才能解决这个问题?
该应用的版本,模拟器和手机版本或任何其他相关设备如何相关?
我的应用可以在哪些版本的设备上运行?
这是我的第一个Android应用程序,所以任何帮助表示赞赏。谢谢你的推荐
答案 0 :(得分:4)
您可能正在使用较低版本SDK不支持的应用程序功能。如果没有任何源代码或堆栈跟踪,很难准确地告诉您这可能是什么,但我可以清楚地了解minSdkVersion
和targetSdkVersion
。
考虑到每个新版本的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级别的代码。
考虑到这一点,回答你的问题:
不,只能保证您的应用程序在Android 4.2上正常运行。您可以确保它保持向后兼容您希望支持的早期版本。
没关系。相反,您应首先确定您的应用程序是否在运行与您的目标相同的API级别的设备/模拟器上运行(Android 4.2,API级别17),然后在运行较低版本的设备/模拟器上运行它并尝试隔离导致它崩溃的代码(logcat会很有用)。
您可以访问设置>查看设备的Android版本。关于手机> Android版本。如果它正在运行Gingerbread,请记住,从那时起已经引入了许多新功能,并且您的应用程序可能正在使用其中的一些功能。对于模拟器,您可以在创建模拟器时指定API级别(可以从SDK Manager下载其他版本)。
我认为到目前为止我的答案已经明确了这种关系。
重申一下,您的应用程序将在运行Android 2.2或更高版本的任何设备上运行,但如果您使用的API级别高于设备运行的功能,则可能会崩溃。
如果仍然不清楚,您应该阅读有关在Android文档中支持多个平台版本的更多信息:here。