Flutter,后台获取包不工作,androidx 不兼容

标签 flutter background-fetch

我想在app没有运行的时候做一些操作,所以我决定使用background fetch包。我是按照android设置一步步来的 这是我的 pubspec.yaml 的一部分

version: 1.0.0+1

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter


  google_maps_flutter: ^0.5.16
  geolocator: ^5.1.1
  flutter_local_notifications: ^0.7.1+1
  shared_preferences: '0.5.6+3'
  background_fetch: '^0.5.1'

这是我的 AndroidManifest.xml 的一部分

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="firenzepuliziastrade.firenze_pulizia_strade">
    <!-- io.flutter.app.FlutterApplication is an android.app.Application that
         calls FlutterMain.startInitialization(this); in its onCreate method.
         In most cases you can leave this as-is, but you if you want to provide
         additional functionality it is fine to subclass or reimplement
         FlutterApplication and put your custom class here. -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <application
        tools:replace="android:label"
        android:name="io.flutter.app.FlutterApplication"
        android:label="Firenze Pulizia Strade"
        android:icon="@mipmap/ic_launcher">

这是我的 app/build.gradle 的一部分

android {
    compileSdkVersion rootProject.ext.compileSdkVersion


    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "firenzepuliziastrade.firenze_pulizia_strade"
        minSdkVersion 16
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

}


dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}

这是我的 android/build.gradle 的一部分

buildscript {
    ext.kotlin_version = '1.3.50'
    ext {
        compileSdkVersion   = 28                // or higher
        targetSdkVersion    = 28                // or higher
        appCompatVersion    = "1.1.0"           // or higher
    }

    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            // [required] background_fetch
            url "${project(':background_fetch').projectDir}/libs"
        }
    }
}

这是我的 gradle.properties

org.gradle.jvmargs=-Xmx1536M
android.enableR8=true
android.useAndroidX=true
android.enableJetifier=true

我什至尝试了额外的步骤来启用 Headless 机制,尽管我认为这没有必要,因为我的 flutter 版本是 Flutter 1.12.13 并且我最近创建了这个项目。 但所有这些都表明我无法让应用程序在不运行时做一些工作,它只是在后台工作。所以我认为原因是我在 Debug模式下启动应用程序,我试图在 Release模式下启动它,但我收到以下错误:

Launching lib/main.dart on POT LX1 in release mode...
Running Gradle task 'assembleRelease'...

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':path_provider:verifyReleaseResources'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > Android resource linking failed
     /home/nik/.gradle/caches/transforms-2/files-2.1/0a271e99b6771ad4a84318244d532fb7/core-1.0.0/res/values/values.xml:57:5-88:25: AAPT: error: resource android:attr/fontVariationSettings not found.

     /home/nik/.gradle/caches/transforms-2/files-2.1/0a271e99b6771ad4a84318244d532fb7/core-1.0.0/res/values/values.xml:57:5-88:25: AAPT: error: resource android:attr/ttcIndex not found.


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 7s
The built failed likely due to AndroidX incompatibilities in a plugin. The tool is about to try using Jetfier to solve the incompatibility.
Building plugin background_fetch...
Running Gradle task 'assembleAarRelease'...
Finished with error: ProcessException: Permission denied
  Command: /home/nik/Desktop/Pulizia_Strade/flutter/.pub-cache/hosted/pub.dartlang.org/background_fetch-0.5.6/android/gradlew -I=/home/nik/Desktop/Pulizia_Strade/flutter/packages/flutter_tools/gradle/aar_init_script.gradle -Pflutter-root=/home/nik/Desktop/Pulizia_Strade/flutter -Poutput-dir=/home/nik/Desktop/Pulizia_Strade/firenze_pulizia_strade/build/app -Pis-plugin=true -Ptarget-platform=android-arm,android-arm64,android-x64 assembleAarRelease

我尝试创建一个新的 flutter 项目,指定 androidx,但它不起作用,我得到了同样的错误。谁能帮帮我,我现在真的不知道该怎么办...

最佳答案

您的应用似乎与 AndroidX 不兼容。到目前为止,您已经完成了一些故障排除,但还没有成功。尝试仔细检查 AndroidX Migration Guide如果你没有错过任何东西。

到目前为止,您已经通过将以下行添加到 [project_folder]/android/app/gradle.properties

来启用 Jetifier
android.useAndroidX=true
android.enableJetifier=true

现在尝试通过在 [project_folder]/app/build.gradledefaultConfig 中添加这一行来启用 multidex

defaultConfig {
    ...
    multiDexEnabled true
}

然后在[project_folder]/android/build.gradle文件中升级gradle依赖:

classpath 'com.android.tools.build:gradle:4.1.0'

指定的 flutter 中使用的最新版本 here .

接下来,确保 pubspec.yaml 中的所有包都是最新版本。

最后,运行 flutter clean 并重建您的项目。

关于Flutter,后台获取包不工作,androidx 不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62900562/

相关文章:

flutter - 如何将 VideoPlayer 全屏模式更改为横向而不是纵向

ios - 执行后台获取时不一直返回 UIBackgroundFetchResultNewData 的缺点是什么?

ios - 向应用程序发送静默推送通知,更新位置并在后台发送到服务器

ios - 如何在应用程序处于后台时将推送通知有效负载插入数据库

ios - 我无法在 iOS 后台获取数据

ios - 使用后台获取将数据发送到服务器?

flutter - TextField Causing 'Looking up a deactivated widget' 的祖先是不安全的。 flutter

flutter - 如何让 TextField 占据所有可用的垂直空间?

flutter - 当 AppBar 下没有滚动内容时如何禁用 AppBar 阴影

flutter - 如何将 "system"消息添加到我的提示中?