无法解析:com.jcodecraeer:xrecyclerview:1.6.0 无法解析:com.github.smarteist:autoimageslider:1.1.1 无法解析:com.android.volley:volley:1.1.1 无法解析:com.pierfrancescosoffritti.androidyoutubeplayer:core:8.0.1 无法解析:tv.danmaku.ijk.media:ijkplayer-java:0.8.8 无法解析:tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8 无法解析:tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8 无法解析:tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8 无法解析:tv.danmaku.ijk.media:ijkplayer-x86:0.8.8 无法解析:tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8
我的build.gradle(app)文件
apply plugin: 'com.android.application'
android {
compileSdkVersion 34
namespace "com.androworld.player.video_player"
defaultConfig {
applicationId "com.androworld.player.video_player"
minSdkVersion 21
targetSdkVersion 34
versionCode 40
versionName "4.2.8"
multiDexEnabled true
ndk {
// config you want to support device
abiFilters 'arm64-v8a', 'armeabi', 'armeabi-v7a', 'x86'
}
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
debugMini {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
configurations.all {
resolutionStrategy {
force 'androidx.annotation:annotation:1.2.0'
}
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '28.0.0'
}
}
}
}
// sourceSets.main {
// jniLibs.srcDirs 'src/main/libs'
// }
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
//noinspection GradleCompatible
//implementation 'androidx.annotation:annotation:1.2.0'
//implementation 'androidx.annotation:annotation-jvm:1.7.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'androidx.multidex:multidex:2.0.1'
//support
implementation 'com.google.android.material:material:1.1.0'
implementation 'com.jcodecraeer:xrecyclerview:1.6.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
//vector,percent,palette
implementation 'androidx.palette:palette:1.0.0'
implementation 'androidx.percentlayout:percentlayout:1.0.0'
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
//equlizer
implementation 'com.joanzapata.iconify:android-iconify-fontawesome:2.2.2'
implementation 'com.joanzapata.iconify:android-iconify-entypo:2.2.2'
// implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.github.smarteist:autoimageslider:1.1.1'
//data
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.android.volley:volley:1.1.1'
implementation 'org.apache.commons:commons-io:1.3.2'
//youtubeplayer
implementation 'com.pierfrancescosoffritti.androidyoutubeplayer:core:8.0.1'
// implementation 'com.pierfrancescosoffritti.androidyoutubeplayer:core:10.0.5'
//Ads
//implementation 'com.google.android.gms:play-services-ads:20.4.0'
//intro_screen
implementation project(':material-intro-screen')
//player
implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'
// implementation project(':ijkplayer-java')
// implementation 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
// implementation project(':xvideoplayer')
// implementation 'com.henryblue.mxvideoplayer:xvideoplayer:1.2.1'
implementation 'com.firebase:firebase-client-android:2.5.0'
implementation 'com.yandex.android:mobileads:5.10.0'
implementation 'com.yandex.android:mobmetricalib:5.0.0'
//implementation 'com.google.android.gms:play-services-ads:17.2.1'
//implementation 'com.facebook.android:audience-network-sdk:5.3.0'
implementation 'androidx.work:work-runtime-ktx:2.7.1' //no started android api 32
}
settings.gradle(项目)
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
maven { url "https://www.jitpack.io" }
}
}
plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0'
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
jcenter() // Note: JCenter is deprecated and should be avoided if possible
maven { url "https://www.jitpack.io" }
maven {
url "https://artifactory-external.vkpartner.ru/artifactory/maven"
}
maven { url 'https://dl.bintray.com/yandexmobile/maven' } // Likely deprecated, use
alternatives
maven { url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-
repository/" }
maven { url "https://dl.bintray.com/theartofdev/Edmodo" } // Deprecated
}
}
include ':app', ':material-intro-screen'
从我的博客交叉发布此材料:
虽然造成这种情况的原因有很多,但最令许多开发人员困惑的一个原因是 现在源于以下事实:JCenter 的 Maven 存储库被许多库出版商使用, 已经不存在了。
对于积极发布的库,库开发人员现在可能已经转移到其他地方了。 对于许多开发人员来说,最好的答案是 Maven Central,尽管有些开发人员还有其他选择。 例如,Google 通过他们自己的 Maven 存储库提供了最新版本的 Volley。
但是,有很多不活跃发布的库。这些可能永远消失了。
JCenter 的更改没有同时影响所有人的原因在于 Gradle 缓存。 Gradle 会缓存工件,并且仅在需要时尝试下载它们,例如:
后两者可能是造成与 JCenter 最相关的悲伤的原因。有些人建造了 以前工作过,也许在其他地方工作过(例如,在同事的机器上)不适合您, 因为“其他地方”已缓存工件,而您没有。使用 CI 服务器进行检索的团队 每个构建上的工件可能会在 JCenter 关闭后的一天内被发现。那些使用 只是本地构建机器可能多年都无法发现,这取决于它们保留多长时间 Gradle 工件缓存周围。
那么,如果你被这个事情抓住了,你会怎么做?
首先,在“teh interwebs”中搜索该库,看看是否有相关网站。许多 这些库是在 GitHub 等地方公开开发的。看看那个网站有没有说明 对于一些更新的维护版本,并迁移到它。相反,如果图书馆还没有 数年更新,请考虑迁移到积极维护的内容。
您还可以搜索MvnRepository。这是几个索引 不同的工件存储库,包括 Maven Central 和 Google 的 Maven 存储库。它曾经 index JCenter,它还有一些其他不太常见的 Maven 存储库。或许你会发现 您需要的特定工件的另一个来源。但是,依赖时要小心 在来自更加随机的存储库的半随机库上 - 你要求成为 供应链攻击的受害者。
如果源代码在 GitHub 或其他地方可用,您可以分叉源代码并维护自己的源代码 复制。无论您将其公开(例如,在 Maven Central 上)还是只是共享 与你的团队取决于你。 Maven Local 是一种快速而简单的方式来建立 Maven 存储库 您的工件机器。设置私有共享存储库(例如通过 Amazon S3)是 非常可行,虽然有点神秘。
展望未来,目标是定期在干净的环境上进行干净的构建。即使你不 选择每晚进行 CI 服务器工作,每月在缺乏 CI 服务器的环境中进行一次构建 Gradle 缓存。这些构建的部分价值是更快地识别这样的问题, 这样您就可以在问题开始影响个别开发人员的生产力之前采取措施。