Androidx以前のサポートライブラリをAndroidxバージョンにMigrateする

寝かせていたAndroid教本に着手したら、エラーの連発。どうやらライブラリが読み込めていないらしい。
これをFixするために小一時間格闘したので、備忘のために記録

初期症状

教材のソースをインポートしたら、ソースの至る所にエラーが出現
よく見ると、@overrideのほぼ全てにエラーが出ている(Main ActivityのOnCreateまで!)
一方で、Import文には*.Activityがなく、代わりに「android.support.v7.app.AppCompatActivity」が入力されており、エラーはv7の部分が見つからないと表示されている。

初動

恐らく、ActivityをOverrideできないと言うエラーは、Activityを継承してるandroid.support.v7.app.AppCompatActivityが動作しないために起こっていると思われるため、android.support.v7.app.AppCompatActivityをググってみる。
すると、android.support.v7.app.AppCompatActivityはAndroidxなるものに代替されているという。

そこで、公式のガイドを読み、gradle.propertiesを編集し、android.useAndroidX=trueとandroid.enableJetifier=trueを追記。Syncして、Refactor->Migrate to Androidx…を実行

結果、自動修正はされず。

解決まで

androidx.appcompat.app.AppCompatActivityをインポートすれば良いということは分かっているので、どうすれば良いか継続調査。ビルドを試みるも、「androidx.appcompat:appcompat:28.0.0が見つからない」と言うエラーが残る。今時点で、最新版は1.4.0と言う記事を見つけたので、androidx.appcompat:appcompat:1.4.0に修正。動かず。

別の資料を参考に、Migrationの手順を調査すると、依存関係を解決する手順が必要らしく、Mavenリポジトリにアクセスする設定が必要とのこと。ググると、Developersの記事が出てきて、以下をbuild.bradle追加。

allprojects {
    repositories {
        google()

     // If you're using a version of Gradle lower than 4.1, you must instead use:
        // maven {
        //     url 'https://maven.google.com'
        // }
        // An alternative URL is 'https://dl.google.com/dl/android/maven2/'
    }
}


ビルド実行すると、急に色々と読み込みを実施。いい感じ。

(これまで何度か試しているが)ソースで、androidx.appcompat.app.AppCompatActivityをインポート出来るか試行→成功!
ここで@Overrideのエラーが消える。
後は細かい調整でコンパイル可能になりました。

結論

古いコードをAndroidx サポートライブラリ準拠にするには

  • 定義ファイルをAndroidx仕様に修正する
    • gradle.propertiesへandroid.useAndroidX=trueとandroid.enableJetifier=trueを追記
    • build.gradleにimplementation ‘androidx.appcompat:appcompat:1.4.0’を追加
      ※バージョンはその時の最新に修正要
  • Mavenリポジトリにアクセスするコードを追加する
  • 適宜コードを修正する(Import部分)

で行けるのではないかと。