前人未踏の領域へ アプリ開発編

Android, iOSアプリ開発に関する調査メモ置き場。ほとんどAndroid。はてなダイアリーから移行したため古い記事にはアプリ以外も含まれます。

View Binding : includeしたファイルのViewが見つからない

課題

View Bindingを使ってみたが、include タグ以下のVIewの情報が取得できない。

原因

Includeファイルに対してidを指定していない。View Bindingはidを付与したものに対してしかコードを生成しない。

対応

includeファイルにidを付与すると、そのファイルのBindingを返すクラスが取得できるようになる。 取得したBindingクラスを通じてincludeしたファイルのViewの処理を記述する。

<include android:id="@+id/include_tab" layout="@layout/include_tab_layout" />
//includeTabが IncludeTabLayoutBindingになる
binding.includeTab.tabLayout

mergeに対してもいくつか試してみたが起点となるViewを持たないため無理そうだった。 素直に空のViewGroupを親にして include するのが良さそうな感じ。

setProguardSeedsConsumerメソッドが見つからない

問題

Android Studioから端末にアプリをインストールしようとしたところ以下のエラーが発生。

Unable to find method 'com.android.tools.r8.CompatProguardCommandBuilder.setProguardSeedsConsumer

原因

build.gradle にあるcom.android.tools.r8の設定が邪魔していたらしい。すでにR8はgradleプラグインに含まれているようだ。

対応

classpath 'com.android.tools:r8:1.5.68'
classpath 'com.android.tools.build:gradle:3.6.0-beta01'

となっていたのを

classpath 'com.android.tools.build:gradle:3.6.0-beta01'

に変更

参考

Android R8 Unable to find method - Stack Overflow

Android 3.6でビルドエラー

課題

Android3.6がβ版に昇格していたのでアップデートして起動したところ、Gradleのアップデート案内が通知されたので更新したらビルドが通らなくなった。 Gradle Pluginのバージョンを上げたのが原因らしい。

対応

とりあえず app/build.gradle の設定を順にコメントアウトしていったら testBuildType を外した時点でビルドが通った。 なので以下の行を削除して対応。

android {
        ...
        testBuildType "staging"
    }

必要になったらまた考えよう。