android studio导入比较老的项目报错ERROR: Cause: unable to find valid certification path to requested target解决

现在已经是2019年9月底了,as已经经历了好几个大的版本了,现在as是3.4.1但是更新的稳定版本3.5似乎也已经出来了。说这么多废话是因为as在版本迭代中采用的编译方式有所变化,导入老项目时候会报一些莫名的错误,这里就记录一个比较奇葩的报错,

问题 ERROR: Cause: unable to find valid certification path to requested target

最近在做一个调研,从GitHub找了很多项目运行,遇到了很多次这个问题:ERROR: Cause: unable to find valid certification path to requested target
看起来是证书的问题,网上一些方案是从浏览器去下载证书然后倒入as中去,但是我感觉这种方案不太好,为啥呢,因为开发工具怎么会在倒入老项目的时候出现证书不合法的问题呢,一般情况都是新版本向后兼容,软件开发都是这种思路,Google会不遵循么,不太合理。再者,倒入这证书,是对整个编译器的配置进行了改变,这因为一个老项目改变编译器的配置也是不合理的。

解决办法1:

很简单,直接将build.gradle文件中的jcenter()替换为
jcenter{ url 'http://jcenter.bintray.com' }

这就解决了问题了。在这里记录一下。

报错的build.gradle文件:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        

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

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

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

更改之后的build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    
    repositories {
        google()
        jcenter{
            url 'http://jcenter.bintray.com'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.1'
        

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

allprojects {
    repositories {
        google()
        jcenter{
            url 'http://jcenter.bintray.com'
        }
    }
}

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

解决办法2----

如果以上方式解决无效,也有朋友留言说以上方式依然无效,但是我经过多次测试发现,使用以上方式修改,重新进行编译之后,往往需要修改gradle的版本为最新版本,之后再重新编译,会报新的错误,需要将appcompat-v7版本改为28.0.0,同时编译版本和target版本也改为28,然后再clean之后,进行编译,
但是,问题是,编译之后依然可能存在问题,或者解决问题,经过不断尝试,找到了一个新的绝对管用的方式:
打开studio新建一个demo项目,然后将现在持续报错的项目的java代码,res文件全部拷贝进去,然后将manifest.xml和gradle全部配置相同,编译一下,是的,不报错了,小小的绿色三角按钮亮起来了,没有任何的红色报错提示了。

解决办法3 2019-10-25

最近一直从GitHub上找demo运行,一直报错ERROR: Cause: unable to find valid certification path to requested target,弄的真是没脾气,查了很多资料,基本上都是几个解决办法,但是留贴证明,几乎没什么作用,我仔细想了一下这个问题,这个错误是表示非法证书路径,不少成功解决这个问题的帖子说的是,开启VPN,还有的说,导入https的证书,为啥呢,因为as里没有这个证书,从哪下载呢,从浏览器中导出,
参考:https://www.cnblogs.com/ttxhkx/p/11708123.html
但是,我觉得还是不对头啊,怎么会呢,导入浏览器的证书,还需要从jre中通过命令行开启一下证书权限,想想就不对头,越想越不对头,咋回事?小老弟?我仔细想想这问题似乎就是出在了jdk上了,难道这个项目的作者和我用的是不同的jdk么?
看了下as默认的jdk用的是openJdk,切换到从oracle下载的jdk,同步,编译,OK,不报错了。
android studio导入比较老的项目报错ERROR: Cause: unable to find valid certification path to requested target解决_第1张图片
如果还是报错,把gradle换到最新版本,现在最新的版本貌似就是3.4.1的。重新同步、编译,小小的绿色按钮亮起来了。
还有,尽量只开一个as窗口,当报错了的时候,把其他的as窗口先关闭,我总结了下,一直报这个错误的时候,我都是至少同时打开了2个as的项目窗口,也就是说至少同时用as开了2个项目。
仔细想来,其实主要问题就是出在这个gradle上面的,gradle的版本的问题,因为项目不报错以后,我把jdk重新切换到as自带的openjdk上面去,也不报错了。

成功解决了问题。

好了,希望对你有用,欢迎留言,希望可以交流学习。

你可能感兴趣的:(android技术)