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

mde*_*lmo 8 eclipse flash android webview android-4.0-ice-cream-sandwich

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

阅读本文后,我发现了如何解决Android 3.0及更高版本(包括ICS)的问题,但现在这是一个大问题......如果我让我的项目与ICS兼容,我必须使用该指令,但后来我不知道跑在姜饼上.

为了提供更多信息......有问题的代码是这一个:

android:hardwareAccelerated="true"
Run Code Online (Sandbox Code Playgroud)

这是Android 3.0中包含的属性.

那么,有什么我可以做的,以避免建立两个不同的apks(somehitng像一个前HoneyComb apk和后HoneyComb apk)?

这是我的Android清单的一部分:

<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>
Run Code Online (Sandbox Code Playgroud)

提前致谢.

更新:我已经在使用迈克解释的内容,也就是说,正确定义minSdk和targetSdk,但我对以下事实感到困惑.使用这样的项目配置,当您在eclipse中运行项目时,它会提示以下窗口: 捕获运行项目的eclipse,其中targetSdk高于设备api级别 红叉表示项目targetSdk级别高于设备API级别.所以我认为它只是不在这个设备上工作,但问题是你可以实际运行它,并按预期工作.

小智 8

OP发布的评论低于他的问题(基本上说明targetSDK不会影响应用程序的编译)是完全错误的!对不起,直言不讳.

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

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

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

Android开发人员的博客中有一篇非常好的文章介绍了如何使用此功能,特别是如何设计上面提到的"检查使用它之前存在的功能"代码.

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