【问题标题】:Making an Android 2.2 app work on 1.6使 Android 2.2 应用程序在 1.6 上运行
【发布时间】:2011-05-09 02:29:02
【问题描述】:

我为 Android 编写了一个简单的应用程序,当我第一次创建项目时,我选择了 v2.2 作为构建目标。我发现我的应用程序在 v1.6 上无法运行,它运行了几秒钟然后崩溃。 所以我想我正在使用一些在 1.6 中没有实现的命令。所以我需要找出这些命令是什么并找到 1.6 的等效命令。我猜应该不会太难。

我真正的问题是;制作 1.6v 是创建新项目并将构建目标设置为 1.6 然后复制并粘贴源代码并重新编译的唯一方法?或者有没有更简单的方法?即我可以使用我现有的 2.2 版本然后告诉它编译到 1.6 吗?

非常感谢您的帮助。

【问题讨论】:

    标签: android versioning


    【解决方案1】:

    规则是您始终使用最新的 SDK 构建,但使用 <uses-sdk> 属性的 android:minSdkVersion 值来指示您的应用可以支持的最低 API 级别。

    请注意,此属性只是安装程序和市场的线索...将其设置为 4(对于 1.6)并不意味着您的应用程序可以神奇地在 1.6 上运行。如果更现代的 API 不可用,则由您来设计好的后备方案(或者如果应用程序在没有它们的情况下无法运行,则适当提高您的 minSdkVersion)。

    假设您的应用可以在没有 2.x API 的情况下在 1.6 上运行,那么您需要确保您的 2.x API 使用是从不会在 2.x 上加载的类中完成的。这是一个例子:

    import android.view.Display;
    
    // Class for wrapping APIs only available in 
    // API level 8 and up. (i.e. 2.2, a.k.a. Froyo)    
    class ApiLevel8Only {
        public static int getDisplayRotation(Display display) {
            return display.getRotation();
        }
    
    }
    

    该 getRotation() 调用将在 1.6 上导致强制关闭。为避免这种情况,您在引用 API 包装类之前检查当前版本

    if (Integer.parseInt(Build.VERSION.SDK) >= 8) {
        ApiLevel8Only.getDisplayRotation(...);
    }
    

    希望这是有道理的。

    【讨论】:

      【解决方案2】:

      您所要做的就是在清单中设置 minsdk 值。这会将 1.5 设置为您的 minsdk,并将 1.6 设置为您的目标,例如:

      <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"/>.
      

      Versioning your app.

      android:minSdkVersion — 应用程序将在其上运行的 Android 平台的最低版本,由平台的 API 级别标识符指定。

      因此,您将其设置为 1.5 或 1.6 的 API #,您的应用将在这些旧版本的 Android 上运行。但是您必须检查对较新版本 Android 的 API 调用。您不能在 1.5 等中使用 2.2 功能。

      因此,您可以将目标设置为 Android 2.2,并将 minsdk 设置为 Android 1.5。然后,您可以使用Build.VERSION 确定用户使用的 Android 版本,以避免在旧版本的 Android 中使用更新的 API 调用。

      【讨论】:

      • 并不是要在此处复制您的答案,但预编辑的版本要短 很多! :)
      • 感谢各位的帮助。说得通。由于我没有 1.6 设备,因此我需要让 Eclipse 模拟器作为 1.6 设备运行以进行测试。这可能吗?再次非常感谢,非常感谢您的帮助。
      • 当然,只需为该版本创建一个新的模拟器。进行清单更改后,您将能够很快分辨出来。
      • @Entropy1024 如果您需要旧设备进行测试,G1s 在 ebay 上的售价约为 100 美元。
      • 对此非常陌生...如何在 v1.6 中创建新的模拟器?谢谢
      猜你喜欢
      • 1970-01-01
      • 2012-10-29
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多