2018.08.08

【正誤情報】『基本からしっかり身につくAndroidアプリ開発入門 Android Studio 3.x対応』

基本からしっかり身につくAndroidアプリ開発入門 Android Studio 3.x対応

■Android Studioのバージョンアップによるプロジェクト修正について
本書の第1刷は、Android Studioのバージョン3.1.2で動作確認を行っていましたが、バージョン3.2やバージョン3.3にバージョンアップを行った環境では、Android Gradle Pluginのバージョンのアップデートが求められます。このアップデートを行った後、サンプルプロジェクトを読み込むと、Kotlinのバージョンが古く、新しいAndroid Gradle Pluginに対応していないという内容のGradle Sync Issuesが表示されるようになりました。
これに対応するため、ダウンロードサンプルプロジェクトファイルを修正したものに差し替えております。以下の点を修正しております。

■Android Studio 3.3へのバージョンアップ時の修正
下記のバージョン3.2への修正に加えて、次の修正を行っております。

●Kotlinのバージョンの更新
Android Gradle Plugin 3.3以上では、Kotlinのバージョンが1.3.0以上でないとエラーが表示されます。
これに対応するため、各サンプルプロジェクトのプロジェクトビューの「Gradle Scripts」の「build.gradle(Project: プロジェクト名)」を開き、以下の箇所を修正しています。

(修正前)ext.kotlin_version = ‘1.2.30’
(修正後)ext.kotlin_version = ‘1.3.11’
(バージョン3.2への対応サンプルでは、「1.2.61」にしていました)

●ビルドエラーなどへの対応
第8章の「Map」アプリ、「SQLiteOpenHelper」アプリ、「Location(行動記録)」アプリでは、プロジェクトビューの「Gradle Scripts」の「build.gradle(Module:app)」にある以下の指定の「jre 」を「jdk」に修正しております。

(修正前)implementation “org.jetbrains.kotlin:kotlin-stdlib-jre7”
(修正後)implementation “org.jetbrains.kotlin:kotlin-stdlib-jdk7”

さらに、「Map」アプリでは、AndroidManifestのタグの配下に、以下の1行の追加が必要です。

(追加)<uses-library android:name=”org.apache.http.legacy” android:required=”false” />

■Android Studio 3.2へのバージョンアップ時の修正
●Kotlinのバージョンの更新
各サンプルプロジェクトのプロジェクトビューの「Gradle Scripts」の「build.gradle(Project: プロジェクト名)」を開き、以下の箇所の修正をお願いいたします。

(修正前)ext.kotlin_version = ‘1.2.30’
(修正後)ext.kotlin_version = ‘1.2.61’

●ビルドエラーへの対応
Android Gradle Pluginのバージョン更新にともない、第8章の行動記録アプリでビルドエラーが発生いたしましたので、以下の修正をお願いいたします。

・453ページ 上のコードの4行目
(修正前)switchFragment.onActivityResult(requestCode, resultCode, data)
(修正後)switchFragment?.onActivityResult(requestCode, resultCode, data)

●警告への対応など
Android Gradle Pluginのバージョン更新にともない、第4章の割引計算機アプリ、第5章の世界時計アプリのビルド時の警告に対応するため、以下の修正をお願いいたします。
ただし、第6章のRSSリーダーアプリでは、LoaderManagerなど、Loader系のクラスが全てdeprecatedとなったことによる警告が発生しますが、ビルドはでき、動作します。

・196ページ コードの4行目から
(修正前)
// 入力画面でIntentに詰めた値を取り出す
val price = intent.extras.getInt(“price”, 0)
val discount = intent.extras.getInt(“discount”, 0)

(修正後)
// 入力画面で値が入れられていなければ、何もしない
val extras = intent.extras ?: return

// 入力画面でIntentに詰めた値を取り出す
val price = extras.getInt(“price”, 0)
val discount = extras.getInt(“discount”, 0)

・253ページ コード4行目
(修正前)
val timeZones = pref.getStringSet(“time_zone”, setOf())
(修正後)
val timeZones = pref.getStringSet(“time_zone”, null) ?: setOf()

・254ページ ページ下のコードの下から2行目
(修正前)
val timeZones = pref.getStringSet(“time_zone”, mutableSetOf())
(修正後)
val timeZones = pref.getStringSet(“time_zone”, mutableSetOf())?.toMutableSet() ?: mutableSetOf()

■本書第1刷の内容に下記のような誤りがありました。お詫びの上、訂正いたします。

・P.33 「日本語入力の有効化」の一番最初の図の引き出し位置
(誤)「物理キーボード」から引き出している
(正)「仮装キーボード」から引き出す

・P.224 ページ上の画像の横のコード4行目
(誤)TimeZones
(正)timeZones

・P.230 上の手順3の画像の引き出し(3)が差すID名
(誤)textZone
(正)timeZone

・P.283 コード「onBindViewHolderの実装(「MainActivity.kt」)の5行目
(誤)hodler.name.text
(正)hodler.timeZone.text

・P.327 コード「チャンネルを作成する関数(「Notification.kt」)」の下から3行目
(誤)・・・NotificationManager:class.java)
(正)・・・NotificationManager::class.java)

・P.439 コード「位置情報のリクエストを開始するフラグメント(「SwitchFragment.kt」)の下から2行目
(誤)activity.finish()
(正)activity?.finish()

・P.443 コード「位置情報のパーミッション確認(「SwitchFragment.kt」)の上から2行目と3行目
(誤)//contexがnullなら何もしない
   val ctx = contex ?: return
(正)//contextがnullなら何もしない
   val ctx = context ?: return