DateFormatSymbols on Donut

拙作のCalendarViewでは、月名と曜日名を表示するのに、表題のDateFormatSymbolsクラスを使用している。
例えばロケールに合わせた曜日名を退避しておくには、以下のコードを使う。

String[] weekdays = new DateFormatSymbols().getShortWeekdays();

これで日本語ロケールで使用した場合には配列weekdaysに、["日", "月", "火", "水", "木", "金", "土"]と格納されて表示されるのだ。

ところが先日、Android 1.6上で久しぶりに動作確認した所、以下のように曜日名と月名が全く取れていないことに気がついた。(なんで今まで気がつかなかったんだろう)

調べてみると、DateFormatSymbols#getShortWeekdaysで曜日名が数字に変わってしまっており、これはSDK 1.6のバグらしい。(2.1ではfixされている)
Issue 3985 - android - DateFormatSymbols bugs in Japanese locale sdk1.6 - Project Hosting on Google Code

月名と曜日名それぞれは、以下のようにandroid.text.format.DateUtilsを用いれば1.6, 2.1の双方で問題は発生しない。

//月名を取得
String[] monthNames = new String[] { 
    DateUtils.getMonthString(Calendar.JANUARY, DateUtils.LENGTH_LONG), 
    DateUtils.getMonthString(Calendar.FEBRUARY, DateUtils.LENGTH_LONG), 
    DateUtils.getMonthString(Calendar.MARCH, DateUtils.LENGTH_LONG), 
    DateUtils.getMonthString(Calendar.APRIL, DateUtils.LENGTH_LONG), 
    DateUtils.getMonthString(Calendar.MAY, DateUtils.LENGTH_LONG), 
    DateUtils.getMonthString(Calendar.JUNE, DateUtils.LENGTH_LONG), 
    DateUtils.getMonthString(Calendar.JULY, DateUtils.LENGTH_LONG), 
    DateUtils.getMonthString(Calendar.AUGUST, DateUtils.LENGTH_LONG), 
    DateUtils.getMonthString(Calendar.SEPTEMBER, DateUtils.LENGTH_LONG), 
    DateUtils.getMonthString(Calendar.OCTOBER, DateUtils.LENGTH_LONG), 
    DateUtils.getMonthString(Calendar.NOVEMBER, DateUtils.LENGTH_LONG), 
    DateUtils.getMonthString(Calendar.DECEMBER, DateUtils.LENGTH_LONG) 
}; 

//曜日名を取得
String[]  weekdays = new String[] { 
    DateUtils.getDayOfWeekString(Calendar.SUNDAY, DateUtils.LENGTH_LONG), 
    DateUtils.getDayOfWeekString(Calendar.MONDAY, DateUtils.LENGTH_LONG), 
    DateUtils.getDayOfWeekString(Calendar.TUESDAY, DateUtils.LENGTH_LONG), 
    DateUtils.getDayOfWeekString(Calendar.WEDNESDAY, DateUtils.LENGTH_LONG), 
    DateUtils.getDayOfWeekString(Calendar.THURSDAY, DateUtils.LENGTH_LONG), 
    DateUtils.getDayOfWeekString(Calendar.FRIDAY, DateUtils.LENGTH_LONG), 
    DateUtils.getDayOfWeekString(Calendar.SATURDAY, DateUtils.LENGTH_LONG), 
};

今回のことに留まらないのだが、Androidの開発で悩むのはターゲットのバージョンをいくつにするかだ。
現在発売している端末にインストールされているAndroidのバージョンを考えると、1.5以前のことはもう考慮しなくても良いと思うのだが、問題は1.6ベースにするか、2.1ベースにするかだ。

国内の3キャリアが発売する端末のAndroidのバージョンを見ると、

製品名 Android
Docomo HT-03A 1.6
Docomo SO-01B 1.6
SOFTBANK X06HT 2.1
au KDDI IS01 1.6

と、未だ1.6が多数派だ(X06HTは、HTC Desireに殆ど手を加えず発売している)。
心情的には最新である2.1(来週からは2.2)で開発しつつ、1.6への後方互換性を考慮するということにしたいのだが、上記のようなバージョン固有の問題があるのがやっかいだ。

ライセンスの自由度はAndroidのメリットの一つなのだが、メーカが独自性を出そうとして自らがAndroidに手を加えると、最新のバージョンに上げるのは難しくなってしまう。

できるだけ早く、一つのバージョンに集約して欲しいところ。