その2の続き
元の状態では Eclipse ADT のプロジェクトでしたが、とっくになくなって Android Studio になっているので、こっちに移行します。
まず、Eclipse ADT のプロジェクトを変換することを考えました。変換する機能は最新バージョンでは既に削除されているので、ちょっと古い Giraffe というバージョンを Android Studio download archives から取ってきました。ちなみにアーカイブのページの日本語表示版だとレイアウトが壊れてるのでまともに見れません。
で、変換しようとしたのですが…ちゃんと変換できません。そんなに大きいアプリではないのでさっさと諦めて、新規プロジェクトを作ってコードをコピってくる方法で移行することにします。
ファイルを配置するパスがちょっと違っている程度でそこまで手動変換に手間取ることはないのですが、注意点が2つあります。
1つは難読化ツールの(デフォルトの?)挙動です。昔はコンストラクタは直接呼ばれていなくても削除されなかったのですが、今だと直接呼ばれていないと削除されます。これによりリフレクションで構築しようとするとコンストラクタが見つからなくて InstantiationException
が飛んできます。以下のようなルールを書くことで削除されないようにします。ちなみにこれの確認が不十分で、音叉アプリで壊れたものをリリースしてしまいました。
-keepclassmembers class com.example.FooClass { public <init>(); }
2つ目はサポートライブラリで、今は AndroidX に移行してパッケージ名やクラス名が変わっています。普通なら移行ガイドを見ながらソースを書き換えていくべきなのですが、この時は AndroidX ではない組み込みのクラスを使うように書き換えていました。
で、ビルドしたら…ダークテーマだったのがライトテーマに変わってしまいました。私は気にしない人なのでとりあえずこれで Play ストアに持ってったのですが、なんでダークテーマじゃなくなったの?というレビューがちらほら来ていました。AndroidX で使う最も単純なテーマ (Theme.AppCompat) を使っていたらダークテーマのままだったことに気づくのはもうしばらく後のことです。
これで移行は基本的に終わりで、あとは言語機能の向上や API バージョンの上昇によって deprecated になった API の置き換えなどをやっていました。(おしまい)
no comment untill now