Android 3.xで発生する互換性問題など
数日前にAndroid 3.2のSDKがリリースされました。そこで、以前まとめた Android 3.0で発生する互換性問題など (速報版) の後にわかった事を書きたいと思います。
※なお、記載内容に間違いがある可能性もありますので、間違っている場合にはご指摘下さい。
– エミュレータの動作速度 –
(おそらく)SDK Tool r12 (ADT 12.0.0)になってからAndroid 3.xのエミュレータの速度が実用レベルに改善されたようです。
やっとこれで普通に開発ができるようになったかと思います。
また、Google API Level 8の後から使えなくなっていたLicensing Verification Library(LVL)が使えるようになったようです。これが普通なのですがね。
もしかしたら少し前から使えていたのかも。使えない事は問題ですから。
– Deprecatedになったメソッド –
Android 3.2になり、特に気になったのが、Activityクラスにある以下の各種Dialog関連メソッドがDeprecatedになった事です。
詳細はこちら
- void dismissDialog(int)
- void removeDialog(int)
- Dialog onCreateDialog(int, Bundle)
- void onPrepareDialog(int, Dialog, Bundle)
- boolean showDialog(int, Bundle)
- void showDialog(int)
3.2では上記メソッドを使用していても問題なく動くようですが、今後使えなくなる可能性が出てきましたので 直接Dialogを表示する、またはDialogFragmentクラスの使用を考えた方が良いのかも知れません。
かなり強引なFragments APIへの誘導ですね。
なお、上記メソッドを使用してDialogを表示した場合、割り込み処理などで再度Activityに戻って来た際に内部では同じDialogを表示してくれる様に処理しているので、代わりに直接表示する場合は注意が必要です。
– 取得できる画像のサイズ –
※この問題はAndroid 3.2からという訳では無く以前からあった問題なのだと思います。
前提としてAndroid 1.6向けに以下の画像を用意していたとします。
- drawable-hdpi (800×480などのWVGA向け)
- drawable-mdpi (480×320などのHVGA向け)
WVGAよりも大きな画面サイズの端末で表示した場合、当然一番大きなWVGA向け画像が読み込まれるものと考えていたのですが、なぜか小さい方のHVGA向け画像が読み込まれるようです。
そのため、画面サイズに応じて座標を固定にして使用していたアプリではWVGA画像ではなくHVGA画像が来たため、ずれる問題が発生していました。
以前、発売前のQHD(960×540 Density 270)端末で表示するとずれる、という報告をもらった事があったのですが、QHD指定のエミュレータでは再現せず、端末の問題だと考えていました。しかし、改めて1280×800のエミュレータで試した所、発生したのでわかった次第です。
なお、Android 3.2のエミュレータでもQHD指定にするとAndroid 2.xのスキンに変わる様ですが、同じ問題は発生せずWVGAの画像が読み込まれるようです。つまり、非常にわかりづらい問題です。
– 拡大表示モード –
Android 3.2から主にスマートフォン向けのアプリをタブレットの様に画面サイズが大きい端末で拡大表示するモードが搭載されました。
ユーザーはアプリの初回起動時に選択するか、右下の時計部分の左側にあるリサイズアイコンを選択してリストから「Zoom to full screen」(なぜか英語表示)を選択するとアプリがぼやけた拡大表示されます。
Android 1.6向けアプリで試した所、先に取り上げた取得できる画面サイズの通り、WVGAではなくHVGAの画像が使用され、そして全画面にぼやけて拡大表示されます。
座標系などの修正は自動で行われる様ですが、あくまでも単純拡大なのでぼやけて表示されるようです。
iPadでは最初からこの機能が付いていましたが、Androidではタブレット機が余り売れていない(おそらく世界で100万台程度) -> アプリが増えないジレンマに陥っている感があるため、(いつもの通り)iPadの真似をして対策をしたのだと思います。
何となくスマートフォン向け、タブレット向けを1つのアプリファイルで対応するのではなく、別ファイルにした方が楽な気がします。
何しろAndroid Marketでは近日複数APKファイルに対応する様ですし。要は互換性の無さを暗に認め、端末毎にアプリファイルを提供できるようにするという話です。何か間違えている気がするのですがね。
– その他 –
2011/07/20追記
Windows 7 x64環境でEclipse 3.6.2 & ADT 12.0.0を使用した所、Eclipseから起動したADTマネージャーがまっさらで何も出ないウインドウと化しました。SDK、ADTマネージャーアプリを直接起動すると問題ない様です。
仕方ないのでEclipse 3.7にした所、問題は出ませんでした。
ただし、Eclipse からリリースビルド(Export)しようとすると以下のエラーダイアログが頻繁に出るようになってしまいました。
- Conversion to Dalvik format failed with error 1
Webで調べてプロジェクトをクリーンしたりEclipseをクリア実行したり色々試しましたが駄目で、結局「Eclipse以外の重いソフトを終了させるとリリースビルドが成功する」という状態になりました(?_?)
リリースビルドにメモリを食うので他のソフトが起動しているとエラーになっていたのかも知れません。
※なお、実機接続がされていると駄目な場合が多々ありますので、Eclipse以外の重いソフトを終了させると共に実機接続をはずしてみると良いかも知れません。
2011/09/10 追記
上記問題は、こちらのブログでも説明している様に、ADT 12.0.0に含まれるProGuardが古いために発生しているようです。
– SkyArts について –
私ども SkyArts ではAndroid/iOSアプリなどのスマートフォン開発のコンサルティングなどを承っております。
加えて、私どもの既存アプリ のカスタマイズ開発なども承っております。「このアプリに自社業務向けにこの様な機能を入れたい!」といったご要望にお応えいたします。
ご連絡は メール、Twitter などでお気軽にお問い合わせ下さい。