我知道以前有人问过这种问题,例如这里:Android: how to code depending on the version of the API?
其中还提到必须编译到最新的 Android 级别。 我的基本应用程序版本应该从 7 开始可用,更高级的版本从 12 级开始。
那是不是意味着项目的目标设置应该是12以及 list 中的min-sdk。
但是 Android 市场中的应用程序将仅适用于 12 级设备?即使应用程序应该从 7 开始运行 - 只是功能有限。
同样在第 12 级,我需要导入某些仅从 12 级开始可用的包。所以我什至不能设置较低的 Android 目标,否则我会收到编译器错误。
总结一下:
- 应用应从 7 级开始可用
- 如果用户的级别超过 12 级,则该应用应导入某些 12 级以上的程序包并提供这些功能
- 如果用户只有 < 12,则不应导入包
非常感谢!
最佳答案
如果我没看错你的问题,那么这将允许你的应用程序安装在 7 级设备上
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="12" />
对于开发,您可以将其设置为您想要的任何目标,即您的项目目标可以是 SDK 4.0,但您的 list 目标可以是 1.5 (android:targetSdkVersion="3"),反之亦然。 Eclipse 会给您一个警告,但您可以针对任何目标进行开发,并将 list 设置为任何目标,只要您考虑到后果即可。
您可能知道在您的代码中有一些工作要做,以确保应用程序在尝试调用第 7 级不存在的方法时不会崩溃。我已经编写了代码来处理如果你想要一些例子。
编辑:
一个对我有用的例子。
/**
* Get the current SDK version as an integer. If we are using 1.5 the SDK is
* returned as a String so using the Build.VERSION.SDK_INT method will cause
* the application to crash. This method will return 3 if the version is 1.5
* and will return the proper result for Build.VERSION.SDK_INT if that
* method is available.
*
* @return
*/
public static int getSdkInt() {
if (Build.VERSION.RELEASE.startsWith("1.5"))
return 3;
try {
return YourInternalClass.getSdkIntInternal();
} catch (VerifyError e) {
Log.e(TAG, e.toString());
return 3;
}
}
您应该调用内部类中可能不存在的任何方法,以便在调用该方法之前不会加载。
private static class YourInternalClass {
private static int getSdkIntInternal() {
return Build.VERSION.SDK_INT;
}
}
现在您可以查看SDK版本了。如果您有任何方法只存在于大于 7 的包中,请将这些方法放在内部类中。那么你可以做
if(TheClassYouPutThisMethodIn.getSDKInt() >= 12)
YourInternalClass.yourLevel12Method();
我确信可能有更好的方法来执行此操作(我希望有人可以发布它)但它对我来说非常有用。我的应用程序使用 SDK 13 中的方法,可以在级别 3 的手机上安全运行。
希望这对您有所帮助。
关于android - 在应用程序上为不同的 Android 版本创建 - 在较低版本上可用,仅在较高版本中导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8547806/