金田著「はじめてのandroidプログラミング 第5版」を使って、勉強しています。
「第10章アニメーションする ツーリスト情報アプリを作ろう」の第一段階p393まで、写経が進みました。コンパイルしたところ、次のようなエラーが発生しましたので報告します。
また、より正しそうな変更方法が、@Teramonte4 さんのご教示により分かりましたので、本レポートの続編「Kotlin Json文字列のserializationのParseが使えなくなったので、使えるように修正しました。」も参照してください。(2021/02/02追記)
以下、本書を持っている前提で説明します。本書を使って勉強中の方、一緒に勉強しましょう。
##1.エラーの発生状況
e: E:\Engineering\AndroidStudioProjects\hajimeteno5\TouristSights\app\src\main\java\com\example\touristsights\Sight.kt: (12, 1):
Your current kotlinx.serialization core version is too low,
while current Kotlin compiler plugin 1.4.21 requires at least 1.0-M1-SNAPSHOT.
Please update your kotlinx.serialization runtime dependency.
(現在のkotlinx.serializationコアのバージョンが低すぎます。
現在のKotlinコンパイラプラグイン1.4.21では1.0-M1-SNAPSHOT以上が必要です。
kotlinx.serialization のランタイム依存関係を更新してください。)
これは、次のコードで発生していました。
package com.example.touristsights
import kotlinx.serialization.Serializable
// 省略
@Serializable // ここで発生
class Sight ( )
##2.調査
付属のソースコードと比較してみると、build.gradle(Project)ファイルの次の部分で差異がありました。(コメントアウト削除の方が、エラーが発生した時。)
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
// ext.kotlin_version = "1.4.21" // 削除
ext.kotlin_version = "1.3.72" // 修正
repositories {
google()
jcenter()
}
##3.一時対策
修正の通り、変更しSyncNowを実行し、再コンパイルしたところ、成功しました。(とりあえず、現状、写経を目的としているため、とりあえずこれで良しとします。)
##4.原因として考えられること
AndroidStudioのバージョンの違い、或いはKotlinのバージョンの違い
私 :ver.4.1.2
本の推奨:ver4.1
##5.本当の対策方法
ググったところ、「【2020年秋版】kotlinx.serializationで配列のJson文字列をパース」という資料を見つけた。試してみようと思いましたが、
plugins {
id 'org.jetbrains.kotlin.jvm' version "$kotlin_version"
id "org.jetbrains.kotlin.plugin.serialization" version "$kotlin_version"
}
を入れる部分が分からなかったので、今日は諦めました。今後、写経が終わったら、gradleを勉強しつつ、またkotlinx.serialization 1.0 releasedといった資料を物色して、再挑戦したいと思います。
どなたか、対策を見つけられたら教えてください。
##6.その他追記:表示の回転について
本アプリは、表示を回転させ、横画面でも表示できるように作られているが、エミュレータの端末(Nexus5x API30)で回転すると、なぜか縦表示のままです。本書指定のpixel2 api30や実機huawei nova lite(CAZ-TL10)、そしてhuaweiP10lite(was-lx2j)では正常動作を確認しました。