Android Studio 3.1～3.2 Beta5 で Built-in Shrinker を使うと Run できない件

# AS3.2 で Built-in Shrinker が使えない問題

今日1日検証した内容のメモ。

いわゆる 64K メソッド問題を multi-dex 以外で解決する方法として Built-in Shrinker を愛用しているんですが、Android Studio 3.1 以降にするとどうにも Run や InstantRun ができない問題が発生していました。

Built-in Shrinker はこんなやつ

```groovy
android {
...
    buildTypes {
...
        debug {
            // Built-in Shrinker
            minifyEnabled true
            useProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
```

4月頃試したけど

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Android Studio 3.1.1 にアップデートして InstantRun 有効にして起動したらこれ <a href="https://t.co/1tmhcsEAf7">pic.twitter.com/1tmhcsEAf7</a></p>&mdash; 竹内裕昭 (@takke) <a href="https://twitter.com/takke/status/983509348436422657?ref_src=twsrc%5Etfw">April 10, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Android Studio 3.2 Canary 10 でも InstantRun で実行できないので Android Studio 3.0 に戻してみる</p>&mdash; 竹内裕昭 (@takke) <a href="https://twitter.com/takke/status/983526302857641985?ref_src=twsrc%5Etfw">April 10, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

AS 3.2 Beta5 が出たのでそろそろ修正されているかと思ってやってみましたが

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Android Studio 3.2 Beta5 が出てたのでこれで Build -&gt; Run できるところまでプロジェクト側をごにょごにょする</p>&mdash; 竹内裕昭 (@takke) <a href="https://twitter.com/takke/status/1024089277032845312?ref_src=twsrc%5Etfw">July 31, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">AS3.2 Beta5 + AGP 3.2.0-beta05 で試したけどやっぱりダメだった。検証作業始めるか。 <a href="https://t.co/4cPCW2K1qj">pic.twitter.com/4cPCW2K1qj</a></p>&mdash; 竹内裕昭 (@takke) <a href="https://twitter.com/takke/status/1024118733428613123?ref_src=twsrc%5Etfw">July 31, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

という感じでダメだったので最小プロジェクト構成で試してみました。

# 最小プロジェクト構成で試す

Android Studio 3.2 Beta5 で EmptyActivity のプロジェクトを作り、Built-in Shrinker を有効にしたところ、いきなり Run できなくなりました。

https://github.com/takke/AS32BuiltInShrinkerIssueSample

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">AS32で新しくEmptyActivityのプロジェクト作って Built-in Shrinker だけ有効にしても Run に失敗した。どうなってるんだろう。</p>&mdash; 竹内裕昭 (@takke) <a href="https://twitter.com/takke/status/1024158995492167680?ref_src=twsrc%5Etfw">July 31, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# AGP 3.3 alpha03 なら動く

```Android Studio 3.2 Beta5``` + ```Android Gradle Plugin 3.3.0-alpha03``` + ```Gradle 4.9 rc1``` という構成だと Run および InstantRun できました。
但し Java 1.8 対応の方式が変わっているので ```gradle.properties``` に ```android.enableR8.desugaring=false``` の記述が必要。

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr"><a href="https://t.co/J64GpqcSOA">https://t.co/J64GpqcSOA</a>に android.enableR8.desugaring=false を書いて experimental だから unsupported だぞ、と warning されるけどともかく AS3.2+AGP 3.3.0-alpha03+Gradle 4.9rc1 で Run/InstantRun できるようになった。APK作れるだろうか。</p>&mdash; 竹内裕昭 (@takke) <a href="https://twitter.com/takke/status/1024183705479204864?ref_src=twsrc%5Etfw">July 31, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

APK 作って普通に実機に入れても動いたので experimental が気になるとはいえ一応解決かもしれない。

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">APKで無事起動した。できれば3.2betaが良かったけども仕方ない。</p>&mdash; 竹内裕昭 (@takke) <a href="https://twitter.com/takke/status/1024186936997494785?ref_src=twsrc%5Etfw">July 31, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# (2018/8/3追記) AGP 3.3 alpha04 でも動いた

[```Android Studio 3.3 Canary 4```](https://androidstudio.googleblog.com/2018/08/android-studio-33-canary-4-available.html) が出たので ```Android Gradle Plugin 3.3.0-alpha04``` + ```Gradle 4.9```(```4.9 rc1```からアップデート) に差し替えましたが無事 Run および InstantRun できました。

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">AGP 3.3.0-alpha04 にしたら &quot;Minimum supported Gradle version is 4.9. Current version is 4.9-rc-1.&quot; と言われたので恐る恐るアップデートする</p>&mdash; 竹内裕昭 (@takke) <a href="https://twitter.com/takke/status/1025180595352043521?ref_src=twsrc%5Etfw">August 3, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">AGP 3.3.0-alpha03+Gradle 4.9rc1 のときは警告がモジュール数分並んでたんだけど AGP 3.3.0-alpha04+Gradle 4.9 にすると1つにまとめられた。GJだけど早くこの警告なくなって欲しいなー <a href="https://t.co/VY85GvQQWb">pic.twitter.com/VY85GvQQWb</a></p>&mdash; 竹内裕昭 (@takke) <a href="https://twitter.com/takke/status/1025182242174189568?ref_src=twsrc%5Etfw">August 3, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>