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

Android 如何使我的项目在使用特定版本的功能时与不同的sdk版本兼容,android,eclipse,flash,webview,android-4.0-ice-cream-sandwich,Android,Eclipse,Flash,Webview,Android 4.0 Ice Cream Sandwich,我正在开发一个在webview中使用Flash视频的项目。我解决了所有关于代码的问题,但只在蜂巢下工作 通过阅读,我发现了如何解决Android 3.0及更高版本(包括ICS)的问题,但现在这是一个大问题。。。如果我让我的项目与ICS兼容,我必须使用指令,但那样我就不会在姜饼上运行 要提供更多信息。。。有问题的代码如下: android:hardwareAccelerated="true" 这是Android 3.0中包含的一个属性 那么,我能做些什么来避免构建两个不同的apk(比如前蜂窝ap

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

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

要提供更多信息。。。有问题的代码如下:

android:hardwareAccelerated="true"
这是Android 3.0中包含的一个属性

那么,我能做些什么来避免构建两个不同的apk(比如前蜂窝apk和后蜂窝apk)

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


提前谢谢

更新: 我已经在使用Mike解释过的,也就是说,正确定义minSdk和targetSdk,但是我被以下事实弄糊涂了。对于这样的项目配置,当您在eclipse中运行项目时,它会提示以下窗口:
红十字表示项目targetSdk级别高于设备API级别。所以我认为它在这个设备上不起作用,但问题是你可以实际运行它,并按预期工作。

OP在他的问题下面发表的评论(基本上说targetSDK不影响应用程序的编译)是完全错误的!很抱歉直截了当

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

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

再举一个例子,如果您想使用姜饼或蜂巢的特征,可以使用这个。有些人很快就会得到更新,但其他许多人,特别是使用旧硬件的人,可能会一直使用Eclair,直到他们购买新设备。这将允许您使用一些很酷的新功能,但不排除您可能的市场的一部分

来自的有一篇非常好的文章介绍了如何使用此功能,特别是如何设计我上面提到的“使用前检查功能是否存在”代码


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

我对android清单的版本控制也有类似的问题。对于较旧的手机,我希望有一些预定义大小的小部件,对于支持调整大小的较新手机,我希望有一个可调整大小的小部件。还没有找到一个方法来做这件事。可能这就是谷歌的原因

上面提到的Adam's Powell文章没有讨论这种版本控制。(伟大的文章顺便说一句)


编辑:获得解决方案。android清单中的小部件定义有一个布尔“enabled”属性,可以从布尔资源值设置。使用标准版本限定的资源目录名称,资源值可以具有每个版本的值。问题解决。

对不起,我有点迷路了,对什么问题有何评论?无论如何,我相信我使用minSdk和targetSdk的方式就是要描述的案例之一。这是一项必须由姜饼中包含的cetain属性启用的功能。在那之前,这个属性不需要让它工作。为什么你认为你“不会在姜饼上跑步?”?您可以有minsdk=8、targetsdk和targetbuildprojectbuildsd=15。只需确保为每个版本启用任何适用于它的功能即可。您可以使用与版本相关的布尔属性,这些属性将根据您的喜好打开和关闭。@user1076637,我刚才犯了一个错误。。。我更新了我的答案,设置正确的minSdk和targetSdk是一个有效的解决方案。很好,谢谢。这也适用于接收器,我需要为Oreo禁用它
<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>