1

在我的应用程序中,我想针对所有 Android 版本 >= 8(需要推送通知),但我很难理解我的项目设置所需的 API / 依赖项的正确组合。

该项目将需要用于基于位置的服务的 Google API,并且我需要/想要使用ActionBarSherlock来支持 ActionBar。

这个设置正确吗?


AndroidManifest.xml:

(1)

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />

<application
    android:theme="@style/Theme.Sherlock.Light" >
    ...

库:

(2) 我加了android-support-v4.jar

项目属性:

(3) 设置为Google-APIs 16

动作条夏洛克:

(4) 我按照 ActionBar-FAQ 上的视频将 ABS 设置为库项目,并在其项目探测器中将其设置为 Android Level 16,并添加android-support-v4.jar到其 lib 文件夹中。


我知道这是一个基本问题,但我不确定我是否选择了正确的设置。我特别想知道 (3) 是否正确,或者我是否应该将整体 API-Level 设置为 8?

更新 1:我在理解support.jar. 如果我将构建目标设置为最大值 - 系统如何确保高级功能(如片段)在较低的 API(如 8)中工作。这是自动完成的,还是我必须针对支持包手动编码? 更新 2关于support.jar我必须知道我正在使用哪些功能,并且必须针对 support.jar 进行编码。如果我失败并使用了一个太高级的功能,那么在较低 API 级别上的 ClassCastException 将被抛出......?

任何帮助表示赞赏。另外:我是初学者,因此具有一些背景信息的答案将受到高度重视:)

谢谢!

4

3 回答 3

1

看起来是对的。如 ActionBarSherlock.com 上的视频所述,您希望将步骤 #3 设置为您的 ActionBarSherlock 版本可用的最高“项目构建目标”。所以如果你有 ABS 4.1.0,你需要 Platform 4.1,API 16。

您是否也将 ABS 项目设置为库?您的项目的依赖项应该同时具有:

  • <Your-ABS-Library >.jar
  • 安卓支持-v4.jar
于 2012-07-29T15:48:31.640 回答
1

你的设置是正确的。如果您将其设置为版本 8 (3),您将无法编译它。由于 ActionBarSherlock 至少需要 api 级别 14。

但是这样设置,需要考虑的一件事是,您使用的所有 Android API 必须是 API <= 级别 8。也就是说,您不能使用 API 级别 8 中未包含的功能,否则应用程序将崩溃ClassNotFoundException 或 MethodNotFound 异常。

至于 Fragment,您应该始终选择支持库 Fragment。那就是你应该导入 android.support.v4.app.Fragment,而不是 android.app.Fragment。

对于更新 2:

是的,它会在运行时抛出,它会使您的应用程序无法运行。但可以肯定的是,您可以通过检查当前的电话 API 级别来避免这个陷阱。

例如

if(android.os.Build.VERSION.SDK_INT >= 11) {
    // API that supported in API >= 11
}
else {
    // API that supported in API < 11
}

我自己确实验证了这一点。您也可以尝试使用 Emulator 进行验证,例如 Running version 8 Emulator 和 Run code with API version >= 8 code。

于 2012-07-29T15:52:36.303 回答
0

我建议您将 Build SDK 设置为 API 15。我也将它与 Sherlock ActionBar 一起使用,一切正常。

于 2012-07-29T15:49:36.423 回答