Bintray 502 的 Android 存储库 Flutter TensorFlow-lite 中的问题
Posted
技术标签:
【中文标题】Bintray 502 的 Android 存储库 Flutter TensorFlow-lite 中的问题【英文标题】:Problems in Android repository Flutter TensorFlow-lite by Bintray 502 【发布时间】:2022-01-15 09:58:10 【问题描述】:当我编译我的 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
Bintray 因这个 https://google.bintray.com/exoplayer/org/tensorflow/tensorflow-lite/maven-metadata.xml 而失败
出现此问题后尝试将 android/build.gradle 中的存储库从 Jcenter() 更改为 mavenCentral()
我的安卓/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
更改后,由于来自Google Bintray存储库,错误继续出现,但是由于我使用了一些服务,无法删除存储库中的Google,应该如何解决问题?我知道 Bintray 已经关闭了大约 10 天,但我想知道如何为 tensor-flow-lite 包正确实现 mavenCentral()。
我是新手,不知道maven-metadata是否可以下载以及如何实现,所以我需要知道如何解决这些依赖关系,这对我来说非常复杂。
[更新]
Bintray 在 Android [502] 中的依赖问题已解决。 IDE Android Studio 4.1.1 版。
在等待 bintray 的回复并通过电子邮件与我联系后,我意识到最终 bintray 服务器将被阻止,因为 Jfrog 正在将工件迁移到 Artifactory,电子邮件回复如下 “正如博文中所述,Bintray 将无限期地被淘汰,并且在我们将 Bintray 工具集迁移到 Artifactory 时将不再是一个功能性工具。 " This is the blog post for bintray is down
在此之后,很可能 bintray 将不再可用,或者尽管正如电子邮件回复所说,如果 Jfrog 考虑解除 bintray 服务器,迁移工件将需要很长时间。
要解决这个问题并完美运行的是:
[1.] 检查您的项目需要哪些工件
[2.] 将包含工件的仓库导入仓库中的 build.gradle
[3.] 注释(如果您希望 google bintray 返回)google 存储库 ()。
[4.] 验证依赖项的正确实现
所有这些都将使存储库查找 bintray 中的依赖项,并从您选择的提升服务器中占用它。
就我个人而言,我的工件位于 maven() 存储库中,因此我在 build.gradle 中进行了此更改。
将仓库中的 google() 和 jCenter() 替换为 maven()。
build.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
这得到了他们需要的存储库...
检查您是否安装了 Google Play 服务,它为我解决了一些问题。
Flutter 插件
有一个类似的答案similar对此有所帮助,但它与 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.
这是一个带有颤振插件“tflite”的示例。
要解决这个问题,你必须寻找pubspec.yaml获得的flutter插件。
注意:重要的是,这些更改只是一个临时技巧,直到 google 修复了它在 bintray 中的存储问题,或者尽管直到有指向 maven() 的版本,至少这允许编译应用程序并且它有效,在我的情况下它很好,但我再说一遍,这是一个技巧,不应该这样做。
[1.]在项目层面,在External library>Flutter plugins>Search plugging error(example tflite)中寻找flutter plugins。
[2.]打开插件并修改它的 build.gradle,更改工件在另一台服务器上的存储库,在我的情况下它仍然在 maven() 中。
更改依赖中的artifact的版本,如果出现+,删除,保留固定版本。
注意:添加repository中的“includeGroup”是为了让插件不再寻找bintray插件,如果你删除这个或者google repository(),不知道为什么插件一直在找那个路径,因此最好将其排除在外,以便在自指定的存储库中查找。
插件的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'
提醒:记得检查好仓库,并在依赖关系中删除包含+的版本,例如0.0.5+并将其更改为现有的固定版本例如0.0.2。
如果您的编辑器说该文件不属于您的项目,请选择“我还是要编辑此文件”。
所有这些更改将导致 Flutter 插件本身搜索具有补充功能且功能正常的服务器,而 google 未修复此问题或启动新版本,可能如果您更新 pubspec.yaml,您可以恢复您自己的更改插件,所以要小心,但现在应该编译你。
【问题讨论】:
你可以试试我发布的答案for a similar question。在您的情况下,您将不得不寻找tflite
插件而不是location
,并将插件build.gradle
中包含org.tensorflow:tensorflow-lite:+
的任何行替换为固定版本号而不是末尾的+
。看起来你可以找到一些版本号来尝试here。另一种选择是更改为最近更新的 Tensor Flow Lite 插件。
@Magnus 非常感谢我能够做到这一点,但我还必须进行其他更改并且它有效,我将发布更新以提供帮助。
【参考方案1】:
我可以确认这是有效的修复程序。已经对您的答案表示赞同。
这是我为我的 tensorflow-lite 项目修改的 tflite build 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'
这是我当前的构建 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
即时通讯使用TFlite plugin version 1.1.1
Gradle 包装器版本
distributionUrl = https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
【讨论】:
以上是关于Bintray 502 的 Android 存储库 Flutter TensorFlow-lite 中的问题的主要内容,如果未能解决你的问题,请参考以下文章
使用选定的风格将 Android 库 (aar) 发布到 Bintray
android studio maven 拉取代码出现 bad gateway 502