2

私はアンドロイドでいくつかのアプリを実行しましたが、私はまだ混乱しています。SDK 4.0の関数を使用して、Android 2.1以下でアプリを実行することは可能ですか?

私はあなたたちが言及した方法を試しましたが、エラーが発生しました-

フィールドにはAPIレベル11が必要です(現在の最小値は7です):android.os.AsyncTask#THREAD_POOL_EXECUTOR、最小値を11に変更すると、アプリはandroid 2.1にインストールできないため、より高いAPIを使用できますが、それでも可能です。アンドロイドの下位バージョンで実行する...それを修正する方法は?

Kzinchのアドバイスから、TargetApiを11に設定すると、機能します。

4

5 に答える 5

2

SDK4とSDK2.1の両方で実行されるプログラムが必要な場合は、2つの可能性があります。1つは、必要に応じてコードに代替実装を提供することです。つまり、SDK4の一部の関数がSDK2.1で使用できない場合は、SDKのバージョンを確認し、各ブランチにコードを提供する条件付きブロックをコードに追加します。

もう1つの可能性は、両方のSDKに同じコードを使用するためにAndroidサポートライブラリを使用することです(条件付きブロックは必要ありません)。SDK4で提供されている関数が必要であるが、SDK2.1では必要ない場合は、その関数がサポートライブラリによって提供されているかどうかを確認できます。もしそうなら、それを使用することができ、バージョンチェックを必要とせずにコードはSDK4とSDK2.1の両方で正常に実行されます。たとえば、APIレベル12以降で使用できる(したがってSDK2.1では使用できない)クラスを使用する必要がある場合は、その機能を提供し、SDK2.1およびSDK4で動作するv4サポートライブラリを使用できます。したがって、コードでは次のように使用しますLruCache

import android.support.v4.util.LruCache;

それ以外の

import android.util.LruCache;
于 2012-10-22T13:25:54.887 に答える
1

はい、コードで上位APIの関数を使用できますが、実行時に下位APIで関数が呼び出されないようにする必要があります。

実行時にAPIレベルをチェックし、そのAPIレベルに存在する代替実装を提供する必要があります。

簡単な例をいくつか挙げましょう。

    SharedPreferences.Editor edit = PreferenceManager
            .getDefaultSharedPreferences(getActivity()).edit();
    edit.putInt(KEY, VALUE);
    if (Build.VERSION.SDK_INT >= 9) {
        edit.apply();
    } else {
        edit.commit();
    }

apply()メソッドはメソッドのより高速な(非同期の)実装ですcommit()が、9未満のAPIレベルではサポートされていません。APIバージョンチェックを使用すると、すべてのデバイスで完全に機能します。

更新@TargetApi注釈を使用して、APIチェックのLint警告/エラーを抑制することができます。

于 2012-10-22T12:40:42.240 に答える
1

コードをコンパイルするSDKレベルは関係ありません。重要なのは、どのメソッド/クラスを呼び出し/インスタンス化するかです。

新しいクラスまたはメソッドを使用すると、古いデバイスでコードがクラッシュします。これに対処するための推奨される方法は、遅延読み込みです:http ://android-developers.blogspot.co.uk/2010/07/how-to-have-your-担ないと

そして覚えておいてください、私はSDKについてこれを言っています。

互換性パックは、Googleによって開発されたライブラリであり、任意のプロジェクトに追加して、問題なくライブラリの機能を使用できます。

さらに、サードパーティのライブラリがあります(SDKレベルの高い機能をSDKレベルの低いものにすることを目的としたActionBar Sherlock http://actionbarsherlock.com/など)

于 2012-10-22T12:42:32.790 に答える
1

いいえ。それを処理するコードが下位バージョンのAPIに存在しないため、上位APIのメソッドを使用することはできません。ただし、可能な限り高いAPIバージョンをターゲットにすることはできますが、適切なAPIでこれらのメソッドを呼び出すように注意することができます。で実行時に簡単に確認できます。すなわち

f( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) {
     // code to be run on Honeycomb and higher versions
}
于 2012-10-22T12:42:58.900 に答える
0

上位バージョンに固有のAPIを使用している場合、アプリは古いバージョンでは機能しません。古いバージョンでは定義されていないため、エラーがスローされます。そのため、minSDKを使用して市場にアップロードする前にアプリを制限します。 AndroidManifest.xmlで。

于 2012-10-22T12:42:22.710 に答える