2011年に作成したアプリを、2020年の今になってバージョンアップすることにしました。以前はEcliseで開発していたので、Android Studioに移行した際にハマった点をメモします(もう皆さんとっくに移行済みだと思うので、自分の備忘として記載)
Android Studio
日本語化しない方がいいです。問題が発生したとき、英語のエラーメッセージでそのまま検索し、翻訳した方がゴールへ近いです。
起動してから2~3分は何もしないで放置しておいた方がよいです。起動してすぐにデバッグしようとしたら謎のエラーが出て困ったのですが、しばらく放置していたら自然と消えました。
ちょっと面倒ですが、Eclipseより断然安定してデバッグできます。
プロジェクトの移行
Android Studioの移行機能は使わない方がよいです。謎のエラーにハマります。新規プロジェクトでActivityなしを選択し、作成されたプロジェクトに既存のJavaソースを入れた方がよいです。
Javaソースはそのまま使えました。
※ソースのフォルダパス中に日本語が含まれるとエラーになります。
ActivityやRなどの仕組みもそのままでした。懐かしい。。。
AndroidManifest.xmlも引き続き存在していますが、ただ、Sdkのバージョン等の指定はこのファイルではなく、build.gradleというファイル内で行うように変わっています。
2020/10/11現在、minSdkVersionは14(Android 4.0)以上しか指定できません。
SDKのバージョンはこちらのWikiを参考にしました。
DatePicker
日付選択に利用していたDatePickerのデザインが大きく変わっていました。年月日をそれぞれ指定するコントロールだったのですが、カレンダー形式になっています。
次の2つのプロパティを指定することで、これまでと同じデザインに戻せました。
android:calendarViewShown="false"
android:datePickerMode="spinner"
Activityの背景色
黒色がデフォルトだったのですが、白色に変わっていました。
元の色に戻れば良いので、「setBackgroundColor(Color.BLACK)」にて色を変更しました。
ネットからデータのダウンロードはメインスレッドでは不可
実行時エラーになってしまうようになりました。
このサイトを参考に非同期に変更しました。
GPSの取得
これは未だに良くわかっていませんが、以下のように指定したところ、以前作成したよりもGPSの受信頻度が格段に上がりました(2種類指定する)。これで様子を見ようかと思います。
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 1, this);
mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 500, 1, this);
パーミッションのリクエスト
以前はAndroidMarketからダウンロードする際に、必要な権限の承諾が求められたはずですが、これがアプリ起動時の承諾に変わっています。
そのため、いきなりActivityを表示するとエラーになってしまいます。
権限を承諾してくれない場合も考慮する必要があります(といっても、承諾してくれなければアプリが使えないので、「許可してください」といったメッセージを表示するくらいしかできないのですが・・・)
こちらのサイトを参考に、承諾画面の表示と、承諾された場合のイベントを実装することで対処できました。
アプリのアイコン
以前はサイズ違いのファイルを用意して、それぞれのフォルダに配置していって面倒だった記憶がありますが、今はとても楽になりました。
こちらのサイトを参照ください。
終わりに
ずっとバージョンアップできずにいたのですが、一度やり始めてしまえば何とかなりました。日本語のサイトが少なくなっている気がしますので、眠っているソースがあれば早めに以降した方がよさそうです。