2011-02-01 4 views
4

Android版の画面サイズ(小さいものは除く)とSDKバージョン2.0以上の密度で動作するアプリがあります。AndroidManifest.xmlのAndroidの互換性設定

さらに大きな画面でも表示されます。 は現在、私は、この追加しました:

<supports-screens 
     android:largeScreens="true" 
     android:normalScreens="true" 
     android:smallScreens="false" 
     android:anyDensity="true" 
    /> 

をしかし、私はまた、デフォルトでは、それが偽であることから、android:xlargeScreens="true"を追加するために、余分な大画面のデバイス上で、Androidマーケットでそれが見えるようにする必要があります。

しかし、私はこの属性はAPIレベルから添加した2.3に私の日食のtargetsettingsを変更する必要がandroid:xlargeScreensを追加する9.

だから私はこのシナリオのための私の目標コンパイル設定で何をすべきか?コンパイル中に2.3にする必要がありますか?はいの場合、アプリは2.0バージョンのデバイスで動作している間は何の問題も生じませんか?

+0

マニフェストでアンドロイドを追加するだけで、xlargeScreens = "true"と表示されます。プロパティの全プロジェクトターゲットをAPIレベル9に変更してコンパイルして配布する必要がありますか?これは、すべての下位バージョンで実行されているビルドに害を与えることはありませんか?マニフェストで既にを設定していましたが、現在はEclipseプロジェクトターゲットプラットフォームを2.0に設定しています。これは私がサポートする必要がある最小限のレベルです。 – Pritam

答えて

0

ブログの投稿thisを読んでいる間、私は私の古い質問に対して答えがあると思います。以下の抜粋(3.2から導入された別のマニフェスト属性 "requiresSmallestWidthDp"の場合):

"requiresSmallestWidthDp属性を使用するには、アプリケーションをAndroid 3.2以降でコンパイルする必要があります。この属性を理解してコンパイル時にエラーが発生することがあります。最も安全なことは、minSdkVersionに設定したAPIレベルに一致するプラットフォームでアプリケーションを開発することです。 Android 3.2にビルドターゲットを追加し、requiresSmallestWidthDp属性を追加してください。3.2より古いバージョンのAndroidでは、単にXML属性が無視されるため、ランタイムに失敗する危険はありません。

0

私は2.3を試していませんが、それは2.2と同じです。

2.2についてコンパイルし、1.6でテストして、すべてが期待どおりに動作することを確認します。私はそれに関する問題に取り組んでいない。

ダブルチェックを行うには、ターゲットを2.3に設定してから、より低いバージョンのエミュレータをセットアップしてすべて動作することを確認します。

+0

ターゲットを2.3に設定してコンパイルした場合、実行コンフィギュレーションでは、eclipseで2.3未満のavd(エミュレータ)は表示されません。 – Pritam

+0

@Pritam:AVDマネージャを使用して、エミュレータを起動します。次に、実行構成を設定して手動で展開ターゲットを選択し、プロンプトが表示されたら実行中のエミュレータを選択します。それはあなたが2で実行する方法です。1エミュレータのプロジェクトを2.3に設定します。 –

+0

Pritamを使用するには、uses-sdkタグを使用して、サポートしたいminSdkVersionを定義する必要があります。私の答えの中のリンクを見てください。 – achie

2

はい、use sdkを2.3に変更する必要がありますが、2.0に含まれていない新しいapiや、サポートされている最小限のsdkバージョンが使用されていることを確認してください。または、それらを使用したい場合は、リフレクションを使用する必要があります。

しかし、more about how to use the sdk versions is hereおよびmore about uses-sdk is hereです。

私のアプリケーションでも同じことを行い、リリース前の両方のバージョンでアプリケーションをテストしていることを確認してください。

ベスト、 アチー。

+0

はい、私たちはそれを行うことができますが、新しいAPIでコンパイルしないと古いデバイスのどこかにアプリケーションが壊れてしまいます--- APIは古いバージョンからサポートされていますが、その実装は新しいバージョンでオーバーライド(最適化)古いバージョンでは存在しなかったメソッド。 – Pritam

+0

@Pritamいいえ、それは起こりません。 apiが存在していて(したがって、デバイス上のAndroid OSコードに含まれている場合)、以前と同じように実行されます。ファームウェアのアップグレードを行わずに古いAPIを最適化することはできません。 – smith324

+0

いいえ、それはできません。最新のメソッドがある場合、新しいAPIで使用されますが、それらを使用しないので、それらのために物を壊すことはできません。より新しいapiがより良い実装を持っていれば、より新しいバージョンで動いているデバイスはそれを実行するのに適切なコードを持っています。 – achie

2

私はコメントからこれを移動して、今後この質問を見る他の人には明らかにしています。

旧バージョンと新バージョンの両方のAndroidをサポートしている場合、新しいリリースがリリースされるたびにフレームワークで多くの変更が加えられても、アプリケーションの管理方法が混乱する可能性があります。

1.5 sdk用に作成されたアプリケーションは、そのAPIレベル用に存在する関数のみを呼び出すことができます。たとえば、マルチタッチAPIは1.5には存在しませんでした。 「Okだが新しいAPIを呼び出す必要はありません。アプリケーションを2.3で動作させ、a2sdのサポートが必要です。」と言います。「Ok、マニフェストでtargetApiを変更し、minSDKを設定してコンパイルします2.3に対して、あなたは良いことだ」

なぜこれが機能しますか? ListViewのonMeasure()メソッドが2.2で変更され、onMeasure()内のbetterCalculateFunction()が呼び出されたらどうなりますか?私のアプリはまだ動作しますか?

これは、Javaでのレイトバインディングの利点です。 Javaがデバイスに到達して実行されるまでコンパイルされることはありません。Eclipseで実行しているのは、後でデバイスによって解釈される一連のバイトコード命令を含むバイトコードに変換することです。バイトコードにはbetterCalculateFunction()への参照は含まれません(直接呼び出す場合を除き)。onMeasure()の呼び出しは間接です。これは、コードがデバイス上で実行されているときにデバイスのAndroidフレームワークにリンクされ、コードがonMeasure()を呼び出しているのは、公開されている外向きのAPIであるためです。実行のパスはフレームワークに入り、必要なものを呼び出してから、コードが完了すると終了します。 > onMeasure (パブリックAPI) - - >

と2.2

行わdoStuff(あなたのコード) - > onMeasureあなたは

doStuff(あなたのコード)表示される場合があります1.5上だから、

(パブリックAPI) - > betterCalculateFunction(プライベート 機能) - >行わ

は今、あなたはか、私はあなたがここに私の関連解答いくつかの物事をクリアしstackoverflow: gracefully downgrade your app

希望を見てお勧めAPIレベルに応じて、存在しない場合があります関数を呼び出す必要があります。アンドロイド用

+0

ありがとうございます。したがって、元の質問では、アンドロイドを追加するだけです:xlargeScreens = "true"マニフェストで私はAPIレベル9にプロパティ内の私のプロジェクトターゲット全体を変更し、コンパイルして配布する必要がありますか?これは、すべての下位バージョンで実行されているビルドに害を与えることはありませんか? – Pritam

+0

マニフェストで既に を設定していましたが、現在、Eclipseプロジェクトターゲットプラットフォームを2.0これは私がサポートする必要がある最小限のレベルなので、 – Pritam

+0

@Pritamはい、まずminSdkエミュレータでテストしてください。あなたのユーザーはそれに感謝します。 – smith324

0

デフォルト値:xlargeScreensは真であるので、あなたは何を変更する必要はありません - それはあなたのminSdkVersionがある限り、デフォルトでオンですかtargetSdkVersionがここよりも高い4. http://developer.android.com/guide/topics/manifest/supports-screens-element.html

+0

オンラインドキュメントには矛盾やエラーがあるようです。 http://developer.android.com/guide/practices/screens_support.htmlここでは、minSdkVersionまたはtargetSdkVersionが9以上の場合にのみ、デフォルト値が「true」になっています。 – Pritam