2

即使我在android上做了一些应用程序,我仍然感到困惑。是否可以使用 SDK 4.0 中的功能,并在 android 2.1 或更低版本上运行应用程序?

我尝试了你们提到的方法,但出现错误 -

字段需要 API 级别 11(当前最小值为 7):android.os.AsyncTask#THREAD_POOL_EXECUTOR,如果我将 min 更改为 11,应用程序无法在 android 2.1 上安装,所以即使我可以使用更高的 API,但它仍然可以t在android较低版本上运行...如何解决?

根据 Kzinch 的建议,将 TargetApi 设置为 11,然后它就可以工作了!

4

5 回答 5

2

如果您想要一个同时在 SDK4 和 SDK 2.1 上运行的程序,您有两种可能性。一种是在需要时为您的代码提供替代实现,即,如果 SDK4 中的某些功能在 SDK2.1 中不可用,那么您在代码中添加一个条件块,用于检查 SDK 版本并为每个分支提供代码。

另一种可能性是使用Android 支持库以便为两个 SDK 使用相同的代码(不需要条件块)。如果您需要 SDK4 提供但 SDK2.1 不需要的功能,您可以检查该功能是否由支持库提供。如果是,您可以使用它,您的代码将在 SDK4 和 SDK2.1 上运行良好,无需任何版本检查。例如,如果您需要使用LruCache自 API 级别 12 起可用的类(因此在 SDK2.1 上不可用),您可以使用提供该功能并适用于 SDK2.1 和 SDK4 的 v4 支持库。所以在你的代码中你会使用

import android.support.v4.util.LruCache;

代替

import android.util.LruCache;
于 2012-10-22T13:25:54.887 回答
1

是的,您可以在代码中使用来自较高 API 的函数,但您必须确保它们永远不会在运行时在较低 API 上调用。

您应该在运行时检查 API 级别并提供该 API 级别存在的替代实现。

让我提供一些简单的例子:

    SharedPreferences.Editor edit = PreferenceManager
            .getDefaultSharedPreferences(getActivity()).edit();
    edit.putInt(KEY, VALUE);
    if (Build.VERSION.SDK_INT >= 9) {
        edit.apply();
    } else {
        edit.commit();
    }

apply()方法是一种更快(异步)的commit()方法实现,但它在低于 9 的 API 级别上不受支持。在 API 版本检查的帮助下,它对所有设备都适用。

更新@TargetApi 注释可用于抑制 API 检查的 Lint 警告/错误。

于 2012-10-22T12:40:42.240 回答
1

it doesn't matter what SDK level you compile your code against. Important is which methods/classes are you calling/instantiating.

If you use any newer classes or methods your code WILL crash running on older devices. The suggested method to deal with it is Lazy Loading: http://android-developers.blogspot.co.uk/2010/07/how-to-have-your-cupcake-and-eat-it-too.html

and remember, I'm saying this about the SDK.

The compatibility pack is a library developed by google that you can add to any project and use the functions of the library without issues.

Furthermore, there're 3rd party libraries (such as the ActionBar Sherlock http://actionbarsherlock.com/ that aims to bring higher SDK level functionalities to lower SDK levels)

于 2012-10-22T12:42:32.790 回答
1

No. You cannot use methods from higher API, because the code to handle it is simply not present on lower version of API. You can, however target as high API version as possible, but you may take care to call these methods on right API. You can easily check that at runtime with. i.e.

f( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) {
     // code to be run on Honeycomb and higher versions
}
于 2012-10-22T12:42:58.900 回答
0

If you are using the API which are specific to higher version, then the app wont work in older version.As those are not defined in the older version it will throw an error.That is the reason we restrict apps before uploading into market using minSDK in AndroidManifest.xml.

于 2012-10-22T12:42:22.710 回答