原本项目使用images_picker是很正常的,然后某一天,引入一个cunning_document_scanner插件,这个插件主要是拍照能够使用识别文档,快速提取文档的截图,然后集成下来后,images_picker打开摄像头直接闪退
提示是 images_picker的某一个类的方法未定义:
java.lang.NoSuchMethodError: No static method ofVideo()I in class Lcom/luck/picture/lib/config/PictureMimeType; or its super classes (declaration of 'com.luck.picture.lib.config.PictureMimeType' appears in /data/app/~~tWyTaDkEa47YOVMJelOxzg==/com.example.flutter_test_demo-doYoOXvfqgHRdb_pqKnMkA==/base.apk!classes10.dex)
E/AndroidRuntime(18943): at com.chavesgu.images_picker.ImagesPickerPlugin.onMethodCall(ImagesPickerPlugin.java:169)
E/AndroidRuntime(18943): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:267)
然后我看了一下images_picker插件的原生依赖代码
作用是依赖了 ‘io.github.lucksiege:pictureselector’库,我看了这个库github最新版已经是v3.11.2了
我猜测是cunning_document_scanner应该是使用了 ‘io.github.lucksiege:pictureselector’的高版本,导致 images_picker的旧版本被覆盖了。
然后我去看了cunning_document_scanner的原生依赖,发现没有使用io.github.lucksiege:pictureselector,不过估计是套中套
为了证明这一点,我在flutter的安卓,强制使用低版本
configurations.all {
resolutionStrategy {
force 'io.github.lucksiege:pictureselector:v2.7.3-rc10'
}
}
如果能运行,那就啥事没有,如果有报错,说明上面套中套的猜想是对的
果然,强制使用新版本,报错了
F:\flutterPro\flutter_test_demo\android\app\src\debug\AndroidManifest.xml:64:13-58 Error:
Attribute activity#com.yalantis.ucrop.UCropActivity@theme value=(@style/Base.Theme.NoActionBar) from [io.github.lucksiege:pictureselector:v2.7.3-rc10] AndroidManifest.xml:64:13-58
is also present at [io.github.lucksiege:ucrop:v3.11.2] AndroidManifest.xml:12:13-69 value=(@style/Theme.AppCompat.Light.NoActionBar).
Suggestion: add 'tools:replace="android:theme"' to <activity> element at AndroidManifest.xml:62:9-65:20 to override.
注意看‘io.github.lucksiege:ucrop:v3.11.2’,cunning_document_scanner就是使用了最新版,导致images_picker旧版被覆盖了
后面想修改images_picker的依赖,想想并不简单,因为要对比新旧版的差别,然后再github找了一圈,发现有人已经升级到最新版了
后面还是下到本地修改一下,因为有两个地方一直报错,都是R.drawable.ps_image_placeholder找不到
把这两句注释了,然后本地库导入flutter即可