【Android】初期のAndroidで地雷を踏みまくった話 〜1.6端末を信じた俺がバカだった〜

はじめに

「Android 1.6対応、絶対必要だから」
そう言われて開発に着手したのは、2010年の春だった。

当時の私は、Javaの経験はあったものの、Androidはまだまだ不慣れ。開発端末も限られ、情報も少ない。そんな中で言われるがままに開発を進め、文字通り“地雷原”を突き進むことになる。

この記事は、Android黎明期に1.6端末で起きたさまざまな問題と、そこから得た教訓を記した「黒歴史の供養録」である。

1.6対応を信じた開発スタート

開発対象は、ある業務系アプリ。上司が言ったのは、「法人向けに納品する端末がAndroid 1.6搭載だから、完全対応してほしい」という指示。 Android 2.1が出始めていた頃だったが、「業務用なら最新よりも安定性」と言われれば、素直に従うしかなかった。

当時使っていた開発環境は以下の通り:

  • Eclipse + Android SDK 1.6
  • 実機はなかなか手に入らず、エミュレータ中心
  • サンプルも公式しかなく、Stack Overflowの回答もまだまだ少なかった

当然、今のように“AndroidX”もなければ、まともなレイアウトプレビューすら存在しなかった。

地雷その1:エミュレータと実機の差が地獄

最初の地雷は「レイアウトがエミュレータと実機でまったく違う」というもの。

特に酷かったのが RelativeLayoutListView の組み合わせ。
エミュレータでは正常に表示されていたのに、実機(HT-03A)では画面が真っ白になる。調べてみると、 layout_weight を使った時の互換性がバグだらけで、特定のAPIではうまく描画されなかった。

しかも、レイアウトの調整はEclipseでのXML手打ちだったため、何度もビルド→インストール→確認を繰り返す、超非効率な作業。
今なら「Jetpack ComposeでPreviewを確認すれば一発じゃん」と言えるが、当時は精神力だけが武器だった。

地雷その2:メモリ不足で落ちる、落ちる、また落ちる

当時の1.6端末のメモリは、たったの192MB〜256MB。
しかも、アプリが使えるのはそのごく一部。ImageViewにPNGを数枚並べただけで OutOfMemoryError 。スクロール時のGCでカクつきまくり。

私は無知だった。「Bitmapの解像度落とすとか必要なんですか?」状態。
リソースの最適化・圧縮・Lazy Loadingなど知らず、とにかく「表示されればOK」で作っていた。結果、本番で大量のクラッシュが発生し、納品先から怒鳴り電話が飛んできた。

地雷その3:APIバージョンによる非互換の罠

getDrawable()setBackgroundDrawable() など、APIによって使える・使えないがあり、1.6ではクラッシュするコードを普通に書いてしまっていた。

それに加えて、LocationManager の使い方もAPIごとに挙動が異なり、GPSをONにしているのに全く取得できない事態に。原因は、1.6では明示的にproviderを指定しないと動かなかったため。

当時は「Fragment」すら存在せず、すべてActivityで切り替える構造。タスク設計も甘く、バックスタックがごちゃごちゃになり、再現困難なバグも頻発した。

何が足りなかったのか

今になって思えば、当時の失敗は以下の要素が原因だった:

  • 実機確認の軽視
    → エミュレータ頼りで、本番端末との挙動差を想定していなかった
  • バージョン別の挙動差への無知
    → API Levelごとの条件分岐や廃止メソッドの把握が甘かった
  • UIの柔軟性不足
    → 固定サイズのピクセル指定や、非レスポンシブな作り方
  • メモリ管理の知識不足
    → Bitmapの扱い、Viewの再利用などの知見がなかった

あれから十数年、今だから分かること

現在のAndroid開発は、当時とは比べ物にならないほど快適になっている。

  • Jetpack Composeによる宣言的UI
  • 開発環境の安定性(Android StudioのPreviewやLint)
  • Kotlin CoroutinesやFlowによる非同期処理の扱いやすさ
  • Firebase Crashlyticsによるエラー収集
  • AndroidXによる互換性の吸収

今の私なら、たとえAPI 16以下の対応を求められても、「本当にその端末で使うんですか?」と冷静に確認するだろう。

おわりに

この失敗は、私にとって“ただの黒歴史”ではなく、“成長の原点”だ。
バージョン対応を盲目的に信じたこと、検証を怠ったこと、そのすべてが今の自分を形づくっている。

もしこの記事を読んでいるあなたが、今まさにレガシー端末対応で悩んでいるなら、一つだけ言いたい。

「本当にその端末、必要ですか?」

失敗は恥ではない。
でも、“繰り返す失敗”は、回避できる。

タイトルとURLをコピーしました