Flutter image_cropperでのエラー。NoClassDefFoundError対応

最近、Flutter始めました。
ハイブリッドプログラマーとしてCocos2d-xに長い事親しんできましたが
そろそろ新しい技術にも触れてみようかと。
とはいえやってみた感じ、たとえツール系でも既存のCocos2d-xアプリをFlutterに置き換えるのは正直しんどそうです。私の気持ちはとっくに折れました。
実際アプリ化しようと思うと、つまずきポイント多すぎるんですね。
モチベーション保つためにも新規アプリ作ろうと思います!

そんなFlutterアプリにimage_cropperというライブラリを入れてみた時のメモです。

パッケージ読みこんでメソッド呼び出せば、画像の切り抜き画面を表示してくれるとっても優秀なやつでした。
iPhoneとAndroidで使ってるネイティブライブラリが違うから見た目が変わっちゃうけど
その辺も受け入れられるなら写真の切り抜き機能としてオススメです。
ただ実装に少しハマりました・・・

Dart package / image_cropper

https://pub.dartlang.org/packages/image_cropper

基本は上記のページにある手順どおりに入れればいいのですが
私の場合、iOSとAndroidで追加手順がありました。

iOS側対応

まずiOSについてですが
TOCropViewControllerというネイティブ側ライブラリを使ってるので
[自分のFlutterアプリフォルダ]/ios/Podfileに以下を記載します。

pod ‘TOCropViewController’

そしてpod install
ここですんなりいけばいいのですが、私の場合、podのレポジトリ情報が古くなってたので以下のようなエラーがでました。

Specs satisfying the `TOCropViewController, TOCropViewController (~> 2.4.0)` dependency were found, but they required a higher minimum deployment target.

なるほど。
pod repo updateして再度、pod installで解決です。

Android側対応

続いてAndroidです。苦しめられました。
image_cropperが使っているネイティブ側ライブラリ「UCrop」の情報を眺める必要がありました。
image_cropperのページにかいてある通りにgradleの設定を行うとアプリは起動するのですが
肝心のimage_cropperの実行時に以下のエラーで落ちてしまいます。

I/rks.app.egstoc(32313): Rejecting re-init on previously-failed class java.lang.Class: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/app/Fragment;

勘のいい方はわかると思いますが、Android X移行が関係しています。
ざっくりいうとUCrop側の最新ではAndroid X対応が終わってるので自分のアプリがAndroid X対応していないと異なるパッケージを使ってしまうため、UCrop側で落ちてしまってるという感じです。

■Android Xのパッケージ対応一覧はこちら
https://developer.android.com/jetpack/androidx/migrate

というわけでてっとり早い方法は自分のFlutterアプリをAndroid X移行してやる事です。
手順は以下のページを参照してください。
https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility
上記ページの手順に従って
– android/gradle.properties
– android/build.gradle
– android/app/build.gradle
をちょこっと変えてやるだけです。

Gradleビルド時に以下のエラーがでます。本来ならこちらもAndroid X対応が必要ですがWarningなのでとりあえず動きます。

API ‘variant.getMergeAssets()’ is obsolete and has been replaced with ‘variant.getMergeAssetsProvider()’

私はワイルドな生き方が好きなのでスルーしました。
ビルド後、アプリを起動してUCropの画像切り抜き画面が表示されることを確認しましょう。

コメントを残す

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