Android

ProGuardからR8への移行

投稿日:

AndroidStudio 3.4からコードシュリンカー・難読化にR8がデフォルトで使用されるようになりました。
自分が担当していアプリではProGuardは一般的な用途でしか使っていなかったのですが、この度R8に切り替えました。
特にアプリ自体に挙動の変化はなかったのですが、少し注意点がありました。
ただしすべての環境で再現するかは不明です・・・。

特定のビルドタイプで難読化を解除したい

自分たちのアプリはビルドタイプにDebugとReleaseの2つを使用しております。
Releaseでは難読化を行うのですがDebugでは難読化を行っていませんでした。
ところがAndroid Studio 3.4.1にアップデートしてデバッグ実行すると難読化が行われるようになりました。

minifyEnabled true
useProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules-debug.pro'

R8とProguardの関連性がいまいちよくわかっていないのですが、おそらくR8が有効になっているからだとおもいます。
以下のようにDebugビルドタイプのときに読み込むProGuardの設定ファイルに以下を追加しました。

-dontobfuscate

proguard manual usage

ProGuardが使われビルドに失敗した

実はAndroid Studio 3.3時代に自分たちのアプリで特定のライブラリが原因でProGuardでビルドが失敗する現象がありました。
特定のバージョンのProGuardを使うことでワークアラウンドで対応しておりました。
このワークアラウンドが書いてあるIssuesにAndroid Studio 3.4からR8が使われるからこのワークアラウンドは必要ないとも記載されておりました。
Android Studio 3.4.0にアップデートするとR8が使われるようになったので実際にこのワークアラウンドがない状態でもビルドが行えました。
ところがAndroid Studio 3.4.1にアップデートしてビルドすると同じエラーでビルドが失敗する現象が再発しました。
ProGuardが使われていることが原因なのですが、よく見返してみるとビルドタイプがReleaseの場合build.gradleでuseProguard trueとなっていたためこれをuseProguard falseに変更してビルドし直すと正常にビルドできるようになりました。
ということは、3.4.0のときはR8とProGuardが変に混ざっていたのかな・・・。
Android Studio 3.4.1のリリースノートも見てみたのですが、どの記載が影響しているか知識不足でわかりませんでした。

Firebase Crashlytics

FirebaseのCrashlyticsでスタックトレースの難読化が解除されないという現象が発生しました。
これは使っているプラグインによるのでしょうが、自分たちはfabric-gradle-pluginを使っていました。
このバージョンが1.28.0以上じゃないとマッピングファイルがアップロードされないみたいです・・・。

fabric-gradle-plugin changelog

まとめ

いろいろありましたが、自分たちのアプリがそれほど大きくないので思ったより簡単に移行できました。
今の所体感ですがR8の恩恵はそれほどないのですが、最適化がより良くなっているみたいなのでよい影響はあるのだと思います。

-Android

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

アサーションライブラリのGoogle Truthを使ってみる

AndroidXのTestではGoogleのアサーションライブラリのTruthが使われるみたいです。 Set up project for AndroidX Test Truthを必ず使えというよりも …

IntelliJ IDEA(AndroidStudio)でもgit rebase squashできるよ!

普段開発しているとGitを使ってバージョン管理することが多いと思います。 その時によくローカルブランチを作って、変更をガンガンコミットしていきます。 ある程度実装してリモートブランチにマージする時に、 …

AndroidStudioのLayout XMLのフォーマット設定

AndroidStudioで新しいプロジェクトを作るたびにLayout XMLの属性フォーマット設定方法を忘れるのでメモです。 AndroidStudioで以下の設定を開きます。 File | Set …

Androidアプリ開発を行う前に知っておきたかったこと

Androidアプリ開発を行うようになってから半年以上経過しました。 最初の頃に比べてると習熟度は上がったと思うのですが、まだまだ知らないことが多くて毎日勉強の日々です。 自分がAndroidアプリ開 …

Firebaseにプロジェクトを追加する手順

Androidアプリを公開するときFirebaseを使っている方がほとんどだと思うのですが、自分で設定したことがありませんでした。 今回サンプルプロジェクトですが、Firebaseに設定してみました。 …