android - 如何在使用特定版本的功能时使我的项目与不同的 sdk 版本兼容

标签 android eclipse flash webview android-4.0-ice-cream-sandwich

我正在开发一个在 WebView 中使用 Flash 视频的项目。我解决了所有与代码有关的问题,但只在 Honeycomb 下工作。

阅读 this我发现了如何解决 Android 3.0 及更高版本(包括 ICS)的问题,但现在这是个大问题......如果我让我的项目与 ICS 兼容,我必须使用该指令,但我不会在 Gingerbread 上运行。

要提供更多信息...有问题的代码是这段代码:

android:hardwareAccelerated="true"

这是一个包含在 Android 3.0 中的属性。

那么,我能做些什么来避免构建两个不同的 apk(有些像 pre-HoneyComb apk 和 post-HoneyComb apk)?

这是我的 Android list 的一部分:

<application android:label="@string/app_name" 
             android:icon="@drawable/elabora"
             android:theme="@android:style/Theme.NoTitleBar">
    <activity android:name="es.fundacionvodafone.elabora.android.controlador.InicioElaboraTest"
              android:label="@string/app_name"
              android:noHistory="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="es.fundacionvodafone.elabora.android.controlador.InicioElabora"
              android:configChanges="orientation|keyboardHidden"
              android:label="@string/app_name"  
              android:hardwareAccelerated="true">
            <!--            
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            -->
    </activity>

提前致谢。

更新: 我已经在使用 Mike 解释的内容,也就是说,正确定义了 minSdk 和 targetSdk,但我对以下事实感到困惑。这样的项目配置,在eclipse中运行项目时,会提示如下窗口: Capture of eclipse running a project with a targetSdk above the device api level 红叉表示项目targetSdk级别高于设备API级别。所以我认为它只是不能在此设备上运行,但事实是您可以实际运行它,并且按预期运行。

最佳答案

OP 在他的问题下方发表的评论(基本上是说 targetSDK 不会影响应用程序的编译)是完全错误的!抱歉,直言不讳。

简而言之,声明与 minSDK 不同的 targetSDK 的目的是:这意味着您正在使用比最低级别更高的 SDK 中的功能,但您已确保向后兼容。换句话说,假设您想使用最近才引入的功能,但它对您的应用程序并不重要。然后,您可以将 targetSDK 设置为引入此新功能的版本,并将最低版本设置为更低版本,以便每个人仍然可以使用您的应用。

举个例子,假设您正在编写一个广泛使用手势检测的应用程序。但是,可以通过手势识别的每个命令也可以通过按钮或菜单来完成。在这种情况下,手势是一个“很酷的额外功能”,但不是必需的。因此,您可以将目标 sdk 设置为 7(引入 GestureDetection 库时为“Eclair”),并将 minimumSDK 设置为 level 3(“Cupcake”),这样即使手机真的很旧的人也可以使用您的应用程序。您所要做的就是确保您的应用程序在尝试使用手势库之前检查其运行的 Android 版本,以避免在它不存在时尝试使用它。 (不可否认,这是一个过时的例子,因为几乎没有人仍然拥有 v1.5 手机,但曾经有一段时间保持与 v1.5 的兼容性非常重要。)

再举一个例子,如果您想使用 Gingerbread 或 Honeycomb 的功能,您可以使用它。有些人很快就会获得更新,但许多其他人,尤其是使用旧硬件的人,可能会一直使用 Eclair,直到他们购买新设备为止。这会让您使用一些很酷的新功能,但不会排除您的部分潜在市场。

Android developer's blog 有一篇非常好的文章关于如何使用此功能,特别是如何设计我上面提到的“在使用之前检查功能是否存在”代码。

致 OP:我写这篇文章主要是为了让将来偶然发现这个问题的人受益。

关于android - 如何在使用特定版本的功能时使我的项目与不同的 sdk 版本兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8834745/

相关文章:

java - 无法解析方法 'loadTrustMaterial'

android - 动态绘制自定义圆段

eclipse - 在 OSX 下卸载 Eclipse?

javascript - swf播放完毕后有什么办法运行JS?

java - adb命令在java中的等效版本?

Android 谷歌身份验证登录 handleSignInResult :false

java - 将 Eclipse 插件添加到 Eclipse RCP App

java - 从 Eclipse 返回已删除的项目

javascript - Flash ActionScript 如何使用网络摄像头读取手势?

java - 如何捕获(录制)进入我的浏览器的视频流?