2011-12-17 8 views
1

私は質問のこの種を知っている中で、輸入と下のバージョンで利用できるが、ここで例えば、以前に頼まれました:Android: how to code depending on the version of the API?- だけ高いバージョン

あり

それも一つに持っていると述べられています最新のAndroidレベルにコンパイルします。 私の基本的なアプリケーションのバージョンは7で利用できるようになり、レベル12から始める方が進んでいます。

これは、プロジェクトのターゲット設定がマニフェストのmin-sdkと同様に12であることを意味します。

でも、Androidマーケットのアプリはレベル12のデバイスでのみ使用できますか?たとえ機能が限られていても、アプリは7から起動する必要があります。

また、レベル12では、12から始まる特定のパッケージをインポートする必要があります。したがって、Androidのターゲットを低く設定することもできませんでした。そうしないとコンパイルエラーが発生します。

ので、要約で:

  1. アプリケーションは、ユーザーがレベル12+を持っている場合、アプリは、これらの機能
  2. 一定のレベルに12+パッケージをインポートして利用できるようにしなければならないレベル7
  3. で始まる利用可能であるべきですユーザーが< 12の場合、パッケージはインポートされません。

多くの感謝!

答えて

1

私が正しくあなたの質問を読んでいるなら、これはあなたがあなたのプロジェクトの目標、すなわちしたい任意のターゲットに設定することができますアプリケーションは、レベルの開発のために7

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

を持つデバイスにインストールすることができるようになることができますSDK 4.0ではマニフェストターゲットは1.5(アンドロイド: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(); 

を行うことができますが、それは私のために素晴らしい作品。レベル3の携帯電話で安全に実行されているSDK 13のメソッドを使用するアプリケーションがあります。

これが役に立ちます。

+0

ありがとう - 私はこれを試してみます。私のケースでは、レベルに応じて私はちょうど1つの機能を無効/有効にするので、チェックは本当に簡単です。しかし、あなたが助けることができるいくつかのコードサンプルがあれば、とても親切で掲示してください。 – user387184

関連する問題