2012-01-12 96 views
8

我正在开发一个在web视图中使用Flash视频的项目。我解决了所有关于代码的问题,但只在Honeycomb下工作。如何使我的项目兼容不同的sdk版本,同时使用特定版本的功能

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

提供一些详细信息...有问题的代码是这一个:

android:hardwareAccelerated="true" 

这是被列入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> 

在此先感谢。

更新: 我已经在使用Mike解释的,也就是说,正确定义minSdk和targetSdk,但是我被以下事实弄糊涂了。通过这样的项目配置,当您在eclipse中运行该项目时,它会提示以下窗口: Capture of eclipse running a project with a targetSdk above the device api level 红叉意味着项目targetSdk级别高于设备API级别。所以我认为这只是在这个设备上不起作用,但事情是你可以真正运行它,并按预期工作。

+0

你为什么认为你“不会跑姜饼。”?您可以让min sdk = 8,目标SDK和目标生成项目生成SD = 15.只要确保为每个版本启用任何适用的版本。您可以使用版本相关的布尔属性,只要您喜欢就可以打开和关闭。 – user1076637 2012-01-13 02:55:24

+0

@ user1076637,我只是犯了一个错误,因为...当我更新了我的答案,设置适当的minSdk和targetSdk是一个有效的解决方案。 – mdelolmo 2012-01-13 08:07:07

回答

8

OP在他的问题下发表的评论(基本上指出targetSDK不影响编译应用程序)是完全错误的!对不起,生硬。

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

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

举另一个例子,如果你想要使用姜饼或蜂窝的功能。有些人很快就会获得更新,但许多人,尤其是旧硬件,可能会一直停留在Eclair上,直到他们购买新设备。这可以让你使用一些很酷的新功能,但不会排除部分可能的市场。

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

致OP:我写这篇文章的目的主要是为了在未来碰巧遇到这个问题的任何人的利益。

+0

对不起,我有点失落,请问什么问题?无论如何,我相信,我使用minSdk和targetSdk的方式是描述的情况之一。这是一个功能,必须由cetain财产,其中包括姜饼启用。在此之前,这个财产并不需要让事情发挥作用。 – mdelolmo 2012-01-12 14:39:42

3

我有版本控制Android清单类似的问题。对于旧手机,我希望拥有几个预定义尺寸的小部件,对于支持调整大小的新手机,我希望拥有一个可调整大小的小部件。找不到一种方法来做到这一点。可能这就是为什么谷歌与multiple APK support

Adam's Powell上面提到的文章没有提到这种版本控制。 (伟大的文章BTW)。

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

+0

不错,谢谢。这也适用于接收器,我需要禁用奥利奥 – 2017-09-25 19:25:18

相关问题