【问题标题】:What factors are important in choosing target android OS for development在选择目标安卓操作系统进行开发时,哪些因素很重要
【发布时间】:2014-02-05 14:04:06
【问题描述】:

在为应用开发选择目标安卓操作系统之前,我需要考虑什么?

这是我对如何做到这一点的理解,任何澄清将不胜感激:

  1. 确定当前使用最多的操作系统版本。查看分布图等。
  2. 以该版本为目标。

这是我一直阅读的内容,但我有一些问题。

假设 4.0 是安卓手机消费者中使用最多的版本,所以我应该以 4.0 为目标。现在,假设我不使用 4.0 独有的功能。我的应用程序可以与 4.0 以下的任何版本(包括 1.5、2.3 等)一起使用吗?考虑相反的情况。如果我以 2.3 版为目标并且我的应用仅使用 2.3 版可用的功能,我的应用是否可以在运行 4.0 版的手机上运行,​​即使我不会使用 4.0 版独有的功能?

谢谢。

【问题讨论】:

    标签: android operating-system version target


    【解决方案1】:

    看看你的 AndroidManifest.xml
    如果您想支持所有运行 2.2 及更高版本的设备,则有 targetSdkVersionminSdkVersion,然后将 minSdkVersion 设置为 api 级别 8 (android 2.2)
    但总的来说,以最新的 api 作为目标(目前是 API 19,Android 4.4)进行开发是一种很好的做法,因此您可以确保它从您选择的分钟到最新的 OS api 都可以工作

    因此,如果您希望至少支持 KitKat 的 Gingerbread,请在您的清单中执行此操作:

    <uses-sdk android:minSdkVersion="9"
        android:targetSdkVersion="19" />
    

    并针对 api 19 进行开发 :)

    【讨论】:

    • 感谢大家提供的信息,但是......所以我应该把它放在我的清单文件中...... 因此,使用此配置,即使我的目标是最新版本 KitKat,我的姜饼用户也应该能够安装和使用我的应用程序。但是,如果我开发的应用程序使用 KitKat 独有的功能或只有 KitKat 提供的功能怎么办。那么即使我指定 minsdkversion 为“9”,ginerbread 用户也无法正确安装或使用该应用程序,对吗?
    • 不,如果您将 minSdkVersion 设置为 9,他们将能够安装它,但是如果您运行关键代码 sn-p,它将因为 NoSuchMethodError 而强制关闭。但是如果 api 级别小于 19 (KitKat),你可以创建一个 if ( Build.VERSION.SDK_INT &lt; 19) 并执行任何操作
    • 我很困惑。假设我不使用 KitKat 独有的任何功能,那么姜饼用户在手机上运行应用程序应该没有问题,而应用程序不会以 nosuchmethoderror 权限强制关闭?那么我不必使用 if(Build.VERSION.SDK_INT
    • 如果您只使用姜饼或更低版本上可用的功能,则无需任何if(...SDK_INT) 即可工作。但是,如果您使用 kitkat 唯一功能,则必须执行if(...SDK_INT &lt; 19) { //not kitkat code } else { //kitkat only code },因此您必须找到 kitkat 唯一代码的替代方案。现在清楚了吗?
    • 是的,没错,或者至少它应该做一些你的应用程序能够工作的事情。没有该代码(例如,通知用户该错误,自己编写代码,...)
    【解决方案2】:

    假设 4.0 是安卓手机消费者中使用最多的版本,所以我应该以 4.0 为目标。现在,假设我不使用 4.0 的新功能。我的应用可以与 4.0 以下的任何版本(包括 1.5、2.3 等)一起使用吗?

    仅当您不使用在您希望应用运行的最早版本之后引入的 API 时。

    如果我以 2.3 版为目标,并且我的应用仅使用 2.3 版可用的功能,我的应用是否可以在运行 4.0 版的手机上运行,​​即使我不会使用 4.0 版独有的功能?

    是的。某些功能在较新的操作系统版本中已被弃用,但其中大部分功能仍可在较新的版本中使用以保持兼容性。

    我觉得这里要强调的是,Android 向后兼容,因此新版本几乎可以运行为旧操作系统版本开发的应用。

    【讨论】:

      【解决方案3】:

      目标版本是您测试过的最高版本。如果可以的话,您应该始终以绝对最新的为目标。最低版本是能够安装应用程序的最低版本。

      所以在清单中,您通常会有这样的内容:

      <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="19" ...
      

      根据您的应用运行所绝对需要的功能选择minSdkVersion

      所以你可能想知道targetSdkVersion 的目的是什么。一个原因是,如果您的应用具有一些在 SDK 更高版本中的可选功能。 targetSdkVersion 将允许您使用这些后来的功能,但您需要保护这些方法调用,并使用类似的调用检查设备的 SDK

      if (Build.VERSION.SDK_INT >= 11)
          myMethodThatUsesFeaturesOnlyInHoneycombAndLater();
      

      另一个原因是,有时 Android 团队会更改您的类的各种设置中的一些默认值,但为了保持与您尚未测试应用的未来版本的兼容性,如果您的应用未测试,他们会保留旧的默认值'不要声称以这个更高版本为目标。

      例如,在 Honeycomb 之后,菜单应该与操作栏集成在一起。但是使用早期 SDK 编译的旧应用程序尚未使用 Honeycomb 或更高版本进行测试,正如它们的 targetSdkVersion 小于 11 所证明的那样,因此操作系统知道显示旧样式菜单。一旦此开发人员决定在更新的targetSdkVersion 上测试他们的应用程序,他们就会更新值,并且操作系统可以相信他们已经在 Honeycomb 上测试了它,因此它可以安全地显示新样式的菜单。

      【讨论】:

        猜你喜欢
        • 2015-05-28
        • 2012-03-05
        • 2022-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-29
        相关资源
        最近更新 更多