ReactNativeで開発中、Androidのビルドで64K問題のエラーが出てハマった
64K問題
ReactNativeに限った話ではないが
Androidアプリでメソッド数が65536を超えるとビルドエラーになる問題のこと
Androidエンジニアにとっては常識だと思うが、Webから入った人間からすると結構厄介だった
検索すると沢山ヒットする
分かりやすかった記事
こんなエラーが出る
調査する
前提として64K以上いけるMultidex
化はしたくない
ビルドしたapkファイルにいくつメソッドがあるか調べる
dex-method-counts を使う方法があるけど、Android Studioの標準機能で出来る
これ64Kでビルド落ちた時apk作られないから調べられなくない…?
とりあえず、ビルド通ってた時期のapkファイルを調べてみた
めっちゃギリギリ! このあと新しい機能を入れたら落ちるようになったので、まずは原因を調査
$ ./gradlew :app:dependencies
を実行すると依存してるパッケージの一覧が出る
64K問題の原因で多いのは google-services
系を全パッケージ読み込んでるとか、別々のバージョンが入ってるとからしい
compile (project(':react-native-device-info')){ exclude group: "com.google.android.gms" } compile ("com.google.android.gms:play-services-gcm:10.0.1") { force = true; }
exclude
するとコンパイル対象から除外されるので、依存してるreactnativeのパッケージからすべて除外して
最後に除外した play-services-xxx
を必要なもののみ追加する
ここら辺の設定は人による
いろいろやってメソッド数が減ったのは確認できたけど、目的の機能入れたときに結局落ちた
中途半端になってしまったが調査中‥
いい方法を知りたい