2

まあ、それはよく説明されていないと思うし、今は少し混乱している. このリンクから:

Compile Withは、アプリをコンパイルするプラットフォームのバージョンです。デフォルトでは、これは SDK で利用可能な Android の最新バージョンに設定されています。(Android 4.1 以上である必要があります。そのようなバージョンが利用できない場合は、SDK Manager を使用してインストールする必要があります)。古いバージョンをサポートするようにアプリをビルドすることはできますが、ビルド ターゲットを最新バージョンに設定すると、新しい機能を有効にしてアプリを最適化し、最新の端末で優れたユーザー エクスペリエンスを実現できます。

代わりにこれから

アプリケーションを開発するときは、アプリケーションをコンパイルするプラットフォーム バージョンを選択する必要があります。一般に、アプリケーションがサポートできるプラットフォームの可能な限り低いバージョンに対してアプリケーションをコンパイルする必要があります

さて、それらは矛盾しているので、ここで私が理解したことを説明します: api 5 でコンパイルするとしましょう。これは、1 から 5 まで実行すると、アプリケーションは動作しますが、バージョンでは動作しないことを意味します > 5.だから:

  1. compileWith が 5 に設定されている場合、なぜ minSdkVersion を設定する必要があるのですか?
  2. targetSdkVersion とは何ですか?

ポイントは、compileWith が最新バージョンに設定されている場合、最新の API を使用して下位互換性を維持できるかどうかです。私は間違っていると確信しており、何かが欠けています。ありがとうございました。

編集 1

今、私はもっと理解していますが、とにかく何かが欠けています: minSdk が 9 で、ターゲットが 18 (私の現在の SDK) であるとしましょう。古いバージョンのサポート パッケージがない限り、api 18 に固有のものは使用できないということですよね? 私は別のことを考えています。上位互換性を得るために、可能な限り低いバージョンでコンパイルします。つまり、Win2000 で Windows アプリケーションをコンパイルすると、Windows 8 まで実行されますが、Win2000 API に限定されます。Windows 8 でコンパイルする場合、実行時に下位互換性をチェックする必要があり、Win2000 で Windows 8 API を使用できるのは「サポート パッケージ」のみです (明らかに例です)。右?

編集 2

これは、私が Android について尋ねていることです (JVM についてではありません)。Android は順方向と逆方向を混合しており、Windows の例を使用してさらに混合しました。参考までに、こちらの例で説明されているように、Windows には下位互換性があるようです。では、Android はどうでしょうか。minSdk バージョンは開発者からテストする必要があるようです。つまり、最新バージョンでコンパイルし、アプリケーションの動作を変更しない最小 API レベルまでテストする必要があります。したがって、コンパイルされたAPIレベルよりも低いすべてのAPIレベルでテストすることにより、下位互換性をテストする必要があるようであり、それらは上位互換性を保証します。右?

前方互換性定義と後方互換性定義を混在させていると思います。私がそれらを読むたびに、それらは異なっているように見えます。

4

1 に答える 1

2

ドキュメンテーションから、以下を読むことができます:

Android:minSdkVersion

アプリケーションの実行に必要な最小 API レベルを指定する整数。システムの API レベルがこの属性で指定された値よりも低い場合、 Android システムはユーザーがアプリケーションをインストールできないようにします。この属性は常に宣言する必要があります。

android:targetSdkVersion

アプリケーションが対象とする API レベルを指定する整数。設定されていない場合、デフォルト値は minSdkVersion に指定された値と同じです。この属性は、ターゲット バージョンに対してテストしたことをシステムに通知し、システムはターゲット バージョンとのアプリの前方互換性を維持するために互換動作を有効にすべきではありません。アプリケーションは、古いバージョン (minSdkVersion まで) でも実行できます。

最後の質問に答えると、最新の API をターゲットにすると、古い電話で新しいメソッドを実行したり、新しいクラスを使用したりできなくなります。そのため、サポート パッケージを使用する必要があり、それに近い結果を得ることができます。新しい API でできること。

これにより、なぜこれら 2 つの値が存在するのか、およびそれらの違いがより明確になることを願っています。

アップデート:

Windows 2000用に構築され、Windows 8で動作するものの例については、それが動作することを保証するものではありません。そのため、Windowsでは「互換性を持って実行」モードがあり、必要なオペレーティングシステムに応じて選択しますそれを実行します。

これは、おそらく両方の OS (またはこの場合は API) が同じメソッドまたはオプションを持っているか、異なる方法で実行しているか、他のアクセス許可が必要であるためです。ここでも同じことが起こるため、ターゲット SDK はテスト対象の参照フレームになるため、ターゲット SDK よりも新しいデバイスで実行すると、その動作が使用されます。

min と target の間の API については、通常どおりに実行されるため、常に奇妙な動作が発生する可能性があり、パッチが必要になる場合があります。通常、2.x から 3.x へのジャンプで最も顕著です。

更新 2:

さて、別の方法で説明してみましょう。

minSDK は、アプリケーション全体で使用できるメソッドとオプションを決定します。これは、メソッドがその API の後でしか使用できない場合、そのメソッドを使用できず、代わりにエラー メッセージが表示されることを意味します。

targetSDK は、テストした API の最新バージョンを表しているため、電話に指定した API よりも新しい API がある場合、指定した API バージョンと同じように動作しようとします。セクション重要な動作の変更:

この不正確なバッチ処理の動作は、更新されたアプリにのみ適用されます。targetSdkVersion を「18」以下に設定した場合、アラームは Android 4.4 での実行時に以前のバージョンと同様に動作し続けます。

ご覧のとおり、targetSDK を以前の API (19 より前) に設定すると、以前のように動作しますが、最新の API (現時点では API 19) をターゲットにすると、動作が異なります。 .

私が十分に明確であることを願っています。そうでない場合は、躊躇せずに質問してください。

于 2013-10-31T21:09:06.493 に答える