こんにちは、コンテンツクリエイターのともすけです。
最初に書いておくと、ヤフー黒帯さんたちのコードが悪いのではなくて、一般にサンプルコードであっても古い環境用に書かれたモノは今の環境で動かすのはたいへんです、という話です。
筆者はいま、あるアプリを開発中です。ある程度仕組みができてきて、完成度を上げようとした段階で新しい技術に取り組む必要が出ました。
昨今、ネットから無料で得られる情報というのは「部分的」であり、体系立てた情報を得ようとすると有料コンテンツを探す必要があるかと思います。
今回、7年くらい前に購入していた「黒帯エンジニアが教えるプロの技術 Android開発の教科書」に載っているRecyclerView関係について勉強していたのですが、ダウンロードできるサンプルコードがやはり古く。
想定内でしたが、いまの環境で動作させるのに3時間くらいかかったのでまとめたいと思います。
読みたい人っているのかな?
古いコードをまるっと持ってきたときに気をつけること
以下は注意が必要だと思っています。
- manifestファイル
- 各ソースコード
- xmlファイル
書いてみて思いました。全部じゃね?これ、と。だいたい全部かと思います。
今回ハマったポイント
RecyclerViewのライブラリ周りでハマりました。7年前くらいだと、supportライブラリというのがGoogleから提供されており、したがってコードもそのライブラリを使用するように書かれています。
各コードの先頭に import文 がありますが、筆者は基本的に「一度」消します。するとコード内でAPIを使用している各箇所においてサジェストの吹き出しが出てくるので、そこでいまの環境で使えるライブラリを指定することで基本的に解決します。
それでソースコードのエラーを潰したのですが、buildフェーズで内部的に生成されるコードがありまして。このコードにも supportライブラリ が使われている箇所があったんです。
え?なにそれ。どうしろっていうの?
まあそれで四苦八苦しながら調べていたら、xmlファイルにも supportライブラリのベタ指定が見つかりました。
ベタ指定とは、要するに「そこに直接書く」こと
たぶんヤフーの黒帯さんたちも、「ここのベタ指定は仕方がない」とか考えていたかと思うのですが、筆者にとっては予想外だったので気づくのに時間がかかりました。
ちなみにね、バカでかい開発プロジェクトとかやったことある人ならわかると思うんだけど、ベタ指定されたコードのせいでbuildで落ちたりして、そういうときのエラーコードがわかりづらかったりするんですよ。すると、そのエラー潰しに結構いい時間費やしちゃうので、サラリーマンだと無駄な作業工数として怒られます。
まとめ
古いソースコードはそのときの環境では問題なく動くものの、環境のアップデートなどが発生すると修正にわりと工数が発生します。環境依存系の記述はなるべく避けるか、避けられないときはできるだけ同じところに集中させましょう。そうすれば修正しやすいし、修正抜けも減ります。
なお、ヤフー黒帯さんのソースコードはAndroid12で動作するようになりました。
それではまた