前言

今天正常上班 因为线上有个机器出现了白屏bug 所以我就远程查看了下问题
发现是一个空指针造成的 但是这个bug我记得我几个月前就改过了
但是还是有这个问题 说明线上机器 运维人员没有更新新的apk包

好了废话说了这么多2

有bug就解决 重新打个新包 再发给运维人员 就解决了

但是

2
打包的时候编译器报错了
报错内容是:Android Received status code 502 from server: Bad Gateway
------------------从服务器接收到状态代码502:失败网关
2

爆了一堆异常 仔细看一下 其实是远程依赖的仓库 没有读取到资源 其中有 友盟 app更新 还有鲁班
我就很奇怪 昨天还在打包新的项目apk 今天打包老的项目 就报了一堆的错误

找人问了一下说是Jcenter的仓库不维护造成的
但是我依赖的时候 是按照 maven仓库 依赖的

那就很奇怪了 为什么会报异常 还有人说是公司网络的问题 导致远程仓库依赖 失败

说了这么多都是前因 如何解决呢?


解决思路

因为我昨天在打包新的项目时 还没有报错 并且可以正常打包 所以我确定 新项目是没有问题的
所以我就按照新项目的 配置 迁移到老项目适配

例如

新项目的build.gradle文件

buildscript {
    ext.kotlin_version = '1.4.10'
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }
        
    }
}

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

老项目的build.gradle文件

其他多余的 镜像仓库 我们不管 比如阿里云 或者 google jcenter umeng
只是把

  		google()
        jcenter()
        maven { url 'https://jitpack.io' }

以上内容加入老项目

buildscript {
    apply from: "config.gradle"
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }
        maven { url 'https://dl.bintray.com/umsdk/release' }
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
        maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }
        maven { url 'http://maven.aliyun.com/nexus/content/repositories/gradle-plugin' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.2'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }
        maven { url 'https://dl.bintray.com/umsdk/release' }
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
        maven { url 'http://repo1.maven.org/maven2' }
        maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }
        maven { url 'http://maven.aliyun.com/nexus/content/repositories/gradle-plugin' }
    }
}

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

结果

这里可以看到编译成功了
在这里插入图片描述

来自群友的肯定!!
2

能不能正常打包apk呢?
实践证明也是可以的
2

总结

我不知道是不是这个问题导致的 但是这种方法确实可以解决 远程仓库依赖下载不了资源的问题
找了很多资料都没有找到解决答案
希望可以帮到和我一样问题的开发者
这种配置上的问题 其实不好找

有一点需要重视 就是jcenter不在维护 并只延长一年的使用权限
尽早迁移 还是多多益善

这里推荐一个 组件Nexus Repository 特殊项目,里面的库找不到或者很慢,就自己加仓

共勉!2

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐