栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Flutter plugin库Android端编译不通过问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flutter plugin库Android端编译不通过问题

Flutter库集成时的报错
A problem occurred configuring project ':flutter_document_picker'.
> Failed to notify project evaluation listener.
   > java.lang.AbstractMethodError (no error message)

就是plugin库编译没通过,基本是 你的项和plugin库 配置 不一致导致的(具体看下面)

一般解决方案:
  1. 学习第三方库,把关键代码copy,改改到你项目里面
    • 强烈推荐
    • 防止了大量不可控代码的引入
    • 又向别人学习了
  2. 改自己项目配置,升或降版本 (一般是第三方库的版本高)
    • 推荐,根本思路嘛,总的积极些
    • 但是有成本,小心 依赖的依赖 搞死人。。。。
  3. 把第三方库copy到你本地,然后改
    • 不好,很不好,有偷懒嫌疑
    • 要是有依赖的依赖,得搞死了
    • 但假设双端,缺乏一端支持,倒是可以节省人力
先收集信息

扩大log输出,可以先分析下

1. Android项目依赖plugin
  • cd到 shell根目录
  • 运行assemble方法,./gradlew :app:assembleDebug --info --stacktrace
2.如果是plugin依赖plugin,可以让plugin打包收集信息

flutter build aar --no-profile --no-release -v

版本相关冲突

下面就是可能遇到的一些差异

gradle相关

gradle的版本,查看 gradle-wrapper.properties文件

distributionUrl=https://services.gradle.org/distributions/gradle-4.10.1-all.zip 
build tool 版本

build.gradle 文件
com.android.tools.build:gradle:3.2.1

kotlin相关
  1. kotlin首先要编译,即kotlin的gradle插件版本 与 gradle版本对相应。
  2. kotlin的运行时版本

kotlin的gradle插件 (使项目可以构建kotlin)

  • build.gradle的buildscript里
## build.gradle里   classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
ext.kotlin_version = '1.2.51'	

kotlin的标准库

  • 分为jdk7 和 jdk8 的
  • 在build.gradle的dependencies里
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
Android X 与 AppCompat 部分对应关系

还有项目中的import,我就省略了

//appcompat
    implementation 'com.android.support:appcompat-v7:27.1.0'
    implementation 'com.android.support:support-v4:27.1.0'
    implementation 'com.android.support:exifinterface:27.1.0'

//AndroidX
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'androidx.core:core-ktx:1.6.0'
    implementation 'androidx.exifinterface:exifinterface:1.3.2'
Android、IOS高版本API

编译时支持了高版本API,一般是 第三方库plugin 维护的比较新,你的项目比较老,没支持这些API。

Android支持了高版本API

配置想对应

android {
    compileSdkVersion 29
///...
            return if (useOldApi || Build.VERSION.SDK_INT < 29) {
                DBUtils
            } else {
                AndroidQDBUtils
            }
///...

@RequiresApi(Build.VERSION_CODES.R)
object Android30DbUtils : IDBUtils {
///...

IOS支持了高版本 API
        if (@available(iOS 15, *)) {
            [PHPhotoLibrary.sharedPhotoLibrary
             presentLimitedLibraryPickerFromViewController: controller
             completionHandler:^(NSArray * _Nonnull list) {
                [handler reply: list];
            }];
        } else {
            [PHPhotoLibrary.sharedPhotoLibrary presentLimitedLibraryPickerFromViewController: controller];
            [handler reply:nil];
        }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572225.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号