2011-12-17 54 views
1

我知道这种问题的较低版本的进口可用之前一直问,比如这里:Android: how to code depending on the version of the API?创建的应用程序为不同的Android版本 - 只有在更高版本

在那里,它也提到,一个具有编译到最新的Android级别。 我的基本应用版本应该提供7和更高级从12级开始。

所以这意味着项目的目标设置应该是12以及清单中的min-sdk。

但是Android市场中的应用只能用于12级设备?即使应用程序应该从7开始运行 - 仅限于有限的功能。

同样在12级中,我需要导入某些仅从12开始可用的包。所以我甚至无法设置较低的Android目标,否则会出现编译器错误。

因此,在总结:

  1. 应用应该可以开始7级
  2. 如果用户有水平12+然后应用程序应导入一定的水平12+封装和提供这些功能
  3. 如果用户只有< 12,那么包不应该导入

非常感谢!

回答

1

如果我正确地读你的问题,那么这将允许在设备上安装了7级

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="12" /> 

对于开发应用程序,你可以将其设置为你想要,即你的项目目标可以是任何目标SDK 4.0,但你的清单目标可以是1.5(android:targetSdkVersion =“3”),反之亦然。 Eclipse会给你一个警告,但你可以为任何目标进行开发,并且只要你考虑到后果就可以将其展现给任何目标。

您可能已经意识到在代码中有一些工作要做,以确保应用程序在尝试调用7级中不存在的方法时不会崩溃。我编写了代码来处理如果你想要一些例子。

编辑:

一个适用于我的例子。

/** 
* Get the current SDK version as an integer. If we are using 1.5 the SDK is 
* returned as a String so using the Build.VERSION.SDK_INT method will cause 
* the application to crash. This method will return 3 if the version is 1.5 
* and will return the proper result for Build.VERSION.SDK_INT if that 
* method is available. 
* 
* @return 
*/ 
public static int getSdkInt() { 
    if (Build.VERSION.RELEASE.startsWith("1.5")) 
     return 3; 

    try { 
     return YourInternalClass.getSdkIntInternal(); 
    } catch (VerifyError e) { 
      Log.e(TAG, e.toString()); 
     return 3; 
    } 
} 

你应该叫,可能无法在内部类存在的任何方法,所以它不会加载,直到该方法被调用。

private static class YourInternalClass { 
    private static int getSdkIntInternal() { 
     return Build.VERSION.SDK_INT; 
    } 
} 

现在您可以检查SDK版本。如果您只有在大于7的包中存在任何方法,请将这些方法放在内部类中。那么你可以做

if(TheClassYouPutThisMethodIn.getSDKInt() >= 12) 
YourInternalClass.yourLevel12Method(); 

我敢肯定,有可能是一个更好的方式来做到这一点(我希望有人能够将它张贴),但它为我的伟大工程。我有的应用程序使用SDK 13中的方法在具有级别3的手机上安全地运行。

希望这会有所帮助。

+0

谢谢 - 我会试试这个。我期望在我的情况下,检查是非常简单的,因为取决于水平,我只会停用/激活一个功能。但是如果你有一些可以提供帮助的代码示例,请尽可能地发布并发布它们。 – user387184 2011-12-17 22:58:27

相关问题