Android 存储库 Flutter TensorFlow-lite by Bintray 中的问题 502

Nau*_*lus 5 android gradle bintray flutter tensorflow

当我编译 Android Flutter 应用程序时,出现此错误

Could not determine the dependencies of task ':app:processDebugResources'.
> Could not resolve all task dependencies for configuration ':app:debugRuntimeClasspath'.
   > Could not resolve org.tensorflow:tensorflow-lite:+.
     Required by:
         project :app > project :tflite
      > Failed to list versions for org.tensorflow:tensorflow-lite.
         > Unable to load Maven meta-data from https://google.bintray.com/exoplayer/org/tensorflow/tensorflow-lite/maven-metadata.xml.
            > Could not get resource 'https://google.bintray.com/exoplayer/org/tensorflow/tensorflow-lite/maven-metadata.xml'.
               > Could not GET 'https://google.bintray.com/exoplayer/org/tensorflow/tensorflow-lite/maven-metadata.xml'. Received status code 502 from server: Bad Gateway
Run Code Online (Sandbox Code Playgroud)

Bintray 已关闭https://google.bintray.com/exoplayer/org/tensorflow/tensorflow-lite/maven-metadata.xml

错误 502 服务器 Bintray

出现此问题后,尝试将 android/build.gradle 中的存储库从 Jcenter() 更改为 mavenCentral()

我的 android/build.gradle

buildscript {
    repositories {
        mavenCentral()
        google()
        //jcenter()
    }

    dependencies {
        //classpath 'com.android.tools.build:gradle:3.5.0'
        classpath 'com.android.tools.build:gradle:3.5.4'
        //classpath 'com.google.gms:google-services:4.3.5'
        classpath 'com.google.gms:google-services:4.3.4'
    }
}

allprojects {
    repositories {
        mavenCentral()
        //google()
        //jcenter()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Run Code Online (Sandbox Code Playgroud)

进行此更改后,错误继续出现,因为它来自 Google Bintray 存储库,但我无法删除存储库中的 Google,因为我使用了一些服务,应该如何解决该问题?我知道 Bintray 已经关闭了大约 10 天,但我想知道如何为 tensor-flow-lite 包正确实现 mavenCentral() 。

我是全新的,我不知道maven-metadata是否可以下载以及如何实现它,所以我需要知道如何解决这些依赖关系,这对我来说非常复杂。

[更新]

Android [502] 中 Bintray 的依赖问题已解决。IDE Android Studio 版本 4.1.1 。

在等待 bintray 的回复并通过电子邮件联系我后,我意识到最终 bintray 服务器将被阻止,因为 Jfrog 正在将工件迁移到 Artifactory,电子邮件回复如下“正如博客文章中所述,Bintray 将被日落无限期地,并且不会成为一个功能工具,因为我们将 Bintray 工具集迁移到 Artifactory。” 这是 bintray 的博客文章已关闭

此后,bintray 很可能将不再可用,或者尽管正如电子邮件回复所述,如果 Jfrog 考虑提升 bintray 服务器,迁移工件将需要很长时间。

要解决这个问题并且它完美地工作是:

[1.] 检查您的项目需要哪些工件

[2.] 将包含工件的存储库导入到存储库中的 build.gradle

[3.] 评论(如果您希望 google bintray 返回)google 存储库 ()。

[4.]验证依赖项的正确实现

所有这些将使存储库查找 bintray 中的依赖项并从您选择的提升服务器中占用它。

就我个人而言,我的工件位于 maven() 存储库中,因此我在 build.gradle 中进行了此更改。

将存储库中的 google() 和 jCenter() 替换为 maven()。

构建.gradle


buildscript {
    repositories {
        mavenCentral()
        maven {
            url 'https://maven.google.com'
        }
        //mavenCentral()
        //google()
        //jcenter()
    }

    dependencies {

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

        //classpath 'com.google.gms:google-services:4.3.5'
        classpath 'com.google.gms:google-services:4.3.4'
    }
}

allprojects {
    repositories {
        mavenCentral()
        maven {
            url 'https://maven.google.com'
        }
        //mavenCentral()

        //google()
        //jcenter()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Run Code Online (Sandbox Code Playgroud)

这为他们提供了他们需要的存储库......

检查您是否安装了 Google Play 服务,它解决了我的一些问题。

另请检查 Android Studio 是否安装了以下“Google 服务”

颤振插件

有一个类似的答案可以帮助解决这个问题,但它与 Android IDE 不对应,并且这个答案需要更多的小步骤。

Flutter插件(部分)尽管在一般项目中通过maven()对build.gradle中的存储库进行了更改,但仍会继续搜索google.bintray存储库,因为插件本身在其build.gradle中有此存储库,如果没有,肯定会出现此错误以下已解决。

 > Unable to load Maven meta-data from https://google.bintray.com/exoplayer/org/tensorflow/tensorflow-lite/maven-metadata.xml.
Run Code Online (Sandbox Code Playgroud)

这是一个颤振插件“tflite”的示例。

为了解决这个问题,你必须寻找pubspec.yaml获取的flutter插件。

注意:重要的是,这些更改只是一个临时技巧,直到 google 修复其在 bintray 中的存储问题,或者虽然,直到有针对 maven () 的版本,至少这允许应用程序被编译并且可以在我的情况是好的,但我再说一遍,这是一个诡计,不应该这样做。

[1.]在项目级别,在外部库>Flutter插件>搜索插入错误(例如tflite)中查找flutter插件。 搜索 Flutter 插件

[2.]打开插件并修改其build.gradle,更改工件在另一台服务器上的存储库,在我的例子中它仍然在maven()中。 build.gradle 插件

更改依赖项中工件的版本,如果出现+,则将其删除,保留固定版本。

注意:添加repository中的“includeGroup”是为了让插件不再寻找bintray插件,如果删除这个或者google仓库(),我不知道为什么插件一直在寻找那个路径,所以就最好将其排除在外,以便它在自行指定的存储库中查找。

插件的build.gradle(例如tflite)

group 'sq.flutter.tflite'
version '1.0-SNAPSHOT'

buildscript {
    repositories {//Changes here ***************
        mavenCentral()
        maven {
            url 'https://maven.google.com'
        }
        google {
            content {
                includeGroup "https://google.bintray.com/exoplayer/org/tensorflow/tensorflow-lite/0.0.1/tensorflow-lite-0.0.1.pom"
            }
        }

    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
    }
}

rootProject.allprojects {
    repositories {
        mavenCentral()
        maven {
            url 'https://maven.google.com'
        }
        google {
            content {
                includeGroup "https://google.bintray.com/exoplayer/org/tensorflow/tensorflow-lite/0.0.1/tensorflow-lite-0.0.1.pom"
            }
        }
    }
}

apply plugin: 'com.android.library'

android {
    compileSdkVersion 27

    defaultConfig {
        minSdkVersion 16
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    lintOptions {
        disable 'InvalidPackage'
    }

    dependencies {//Changes here, delete 0.0.5+ to 0.0.5 example..
        compile 'org.tensorflow:tensorflow-lite:0.0.1-gpu-experimental'
    }
}

Run Code Online (Sandbox Code Playgroud)

提醒:记得检查好存储库,并在依赖项中删除包含 + 的版本,例如 0.0.5+,并将其更改为现有的固定版本例如 0.0.2。

如果您的编辑器说该文件不属于您的项目,请选择“我仍然想编辑此文件”。

所有这些更改将导致 Flutter 插件本身搜索具有补充且功能正常的服务器,而 google 不会修复此问题或启动新版本,如果您更新 pubspec.yaml,您可能可以在插件中恢复您自己的更改,所以要小心,但这现在应该可以编译你了。

小智 4

我可以确认这是有效的修复。已经赞成你的答案。

这是我为我的tensorflow-lite项目修改的tflite构建gradle插件

group 'sq.flutter.tflite'
version '1.0-SNAPSHOT'

buildscript {
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
    }
}

rootProject.allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

apply plugin: 'com.android.library'

android {
    compileSdkVersion 30

    defaultConfig {
        minSdkVersion 21
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    lintOptions {
        disable 'InvalidPackage'
    }

    dependencies {
        implementation 'org.tensorflow:tensorflow-lite:2.3.0'
        implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我当前的构建 gradle。我将所有 jcenter 更改为 mavencentral 以使其正常工作。我的项目现在可以离线和在线运行。

buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
        google()  // Google's Maven repository
        mavenCentral()  // removed jcenter add this
    }

    dependencies {
        classpath 'com.google.gms:google-services:4.3.4'
        classpath 'com.android.tools.build:gradle:4.0.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()  // Google's Maven repository
        mavenCentral() // removed jcenter add this
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)

通过我使用TFlite plugin version 1.1.1

Gradle 包装版本

distributionUrl = https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
Run Code Online (Sandbox Code Playgroud)