精华内容
下载资源
问答
  • gradle-jcenter问题

    2018-08-21 17:38:50
    下载覆盖你的gradle,可解决无法下jcenter缓慢超时问题!
  • JCenter:将Android库上传到Jcenter gradle脚本
  • android-library-publish-to-jcenter是一个帮助Android开发者将AAR库发布到jcenter的项目,android-library-publish-to-jcenter已经将需要写的脚本封装好了,我们只需要配置相关属性即可在5分钟之内发布我们的项目...
  • 前言:Android Studio中把项目的lib库提交到Jcenter仓库中,需要使用到Bintray,Bintray是jCenter的提供商,他支持上传lib到多个平台,jCenter只是众多平台中的一个,形象的说jCenter是位于某地的仓库,Bintray是...
  • Maven使用JCenter存储库演示 添加到您的Maven项目的POM.xml中: <id>jcenter <url>https://jcenter.bintray.com/</url> 将其添加到全局~/.m2/settings.xml 。 如果没有这样的文件,我们可以创建它并为其...
  • 本文介绍了解决android studio引用远程仓库下载慢的两种方法,... jcenter() } 为: repositories { maven{url 'http://maven.aliyun.com/nexus/content/groups/public/'} } 第二种方法 修改https为 http协议下
  • 从bintray / jcenter下载所有可用的工件或指定的工件。 ./download_artifacts.sh jcenter < group> < artifact> [version] 例如./download_artifacts.sh jcenter io.github.jmatsu maven/io |-- github | |-- ...
  • jcenter 远程仓库

    2018-08-01 17:20:23
    jcenter 远程仓库 发布自己的android 工程,更方便的管理和应用。
  • Jcenter

    千次阅读 2016-05-18 23:49:05
    如何让别人一行代码就能使用自己的...如何使用Android Studio把自己的Android library分享到jCenter和Maven Central Android Studio发布项目到Jcenter http://www.jianshu.com/p/0e7b8e14f0cd/comments/1050253

    如何让别人一行代码就能使用自己的library

    序:一直很好奇为什么我使用github上的许多开源项目时,只要在gradle上写上一行compile 'com.android.volley:volley:1.0.0'就OK了。正好这段时间想把自己写的几个自定义view放上去于是花了一天时间终于成功实现了。步骤其实很简单

    1. 准备工具Android Studio
    2. 首先要去bintray注册一个账号。
    3. 打开在module下的local.properties文件,添加一下代码

      bintray.user=USER_NAME//这里自己替换为刚注册的用户名
      bintray.apikey=YOUR_API_KEY//apikey在Your Profile页面的最下面可以看到
      
      #developer
      developer.id=YOUR_ID//你的昵称,可以随意填
      developer.name=YOUR_NAME//真实名字,随意填
      developer.email=YOUR_EMAIL//你的邮箱  
      
    4. 新建一个project.properties文件,如果有就不用新建了。加上一下内容

      #project
      project.name=           //你的项目名称
      project.groupId=        //groupId,如果你的包名为com.android.test。一般填com.anroid就可以了
      project.artifactId=     //项目名,如果你的包名为com.android.test。一般填test就可以了
      project.packaging=aar   //你是Android项目不用改
      project.siteUrl=        //填你项目的所在地址,一般填github的路径
      project.gitUrl=         //git路径,这里我就是在siteUrl上加了个.git
      
      #javadoc
      javadoc.name=       //生成的文档的名字,填project.name就可以了
      
    5. 在module下的build.gradle后面追加以下代码

      ext {
          bintrayRepo = 'maven'   
          bintrayName = 'per.yrj' 
      
          publishedGroupId = 'per.yrj'
          libraryName = 'IndexedListView'
          artifact = 'indexed-list-view'
      
          libraryDescription = 'this is a lib'//描述信息
      
          siteUrl = 'https://github.com/mycolorful/IndexedListView'
          gitUrl = 'https://github.com/mycolorful/IndexedListView.git'
      
          libraryVersion = '1.0.1'
      
          developerId = 'mycolorful'
          developerName = '****'  //替换为自己的
          developerEmail = 'mycolorful@live.com'
      
          licenseName = 'The Apache Software License, Version 2.0'
          licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
          allLicenses = ["Apache-2.0"]
      }
      apply from: "bintrayUpload.gradle"//这一句别忘了,用来引用下面的文件
      
    6. 接下来在module下新建一个bintrayUpload.gradle文件(如果你不想做这一步的话那就直接把apply from: "bintrayUpload.gradle"给删了,然后加上apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'
      apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'效果是一样的,可以直接跳到第7步了)

    apply plugin: 'com.github.dcendents.android-maven'
        apply plugin: 'com.jfrog.bintray'
    
        version = libraryVersion
    
        if (project.hasProperty("android")) { // Android libraries
            task sourcesJar(type: Jar) {
                classifier = 'sources'
                from android.sourceSets.main.java.srcDirs
            }
    
            task javadoc(type: Javadoc) {
                source = android.sourceSets.main.java.srcDirs
                classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
            }
        } else { // Java libraries
            task sourcesJar(type: Jar, dependsOn: classes) {
                classifier = 'sources'
                from sourceSets.main.allSource
            }
        }
    
        task javadocJar(type: Jar, dependsOn: javadoc) {
            classifier = 'javadoc'
            from javadoc.destinationDir
        }
    
        artifacts {
            archives javadocJar
            archives sourcesJar
        }
    
        // Bintray
        Properties properties = new Properties()
        properties.load(project.rootProject.file('local.properties').newDataInputStream())
    
        bintray {
            user = properties.getProperty("bintray.user")
            key = properties.getProperty("bintray.apikey")
    
            configurations = ['archives']
            pkg {
                repo = bintrayRepo
                name = bintrayName
                desc = libraryDescription
                websiteUrl = siteUrl
                vcsUrl = gitUrl
                licenses = allLicenses
                publish = true
                publicDownloadNumbers = true
                version {
                    desc = libraryDescription
                    gpg {
                        sign = true //Determines whether to GPG sign the files. The default is false
                        passphrase = properties.getProperty("bintray.gpg.password")
                        //Optional. The passphrase for GPG signing'
                    }
                }
            }
        }
        group = publishedGroupId                               // Maven Group ID for the artifact
    
        install {
            repositories.mavenInstaller {
                // This generates POM.xml with proper parameters
                pom {
                    project {
                        packaging 'aar'
                        groupId publishedGroupId
                        artifactId artifact
    
                        // Add your description here
                        name libraryName
                        description libraryDescription
                        url siteUrl
    
                        // Set your license
                        licenses {
                            license {
                                name licenseName
                                url licenseUrl
                            }
                        }
                        developers {
                            developer {
                                id developerId
                                name developerName
                                email developerEmail
                            }
                        }
                        scm {
                            connection gitUrl
                            developerConnection gitUrl
                            url siteUrl
    
                        }
                    }
                }
            }
        }

    至此就差不多完成了。
    7. 开始上传:

    打开Terminal,输入gradlew install,如果输出

    BUILD SUCCESSFUL
    

    那么恭喜你,我们可以离成功只有一步之遥了。接着输入gradlew bintrayUpload,如果接着输出了(这个过程可能比较久)

    SUCCESSFUL
    

    这就说明你已经将项目成功上传到bintray上了。你可以到bintray在maven下面,就能有一个项目了。
    8. 进入你的项目,点击Add to Jcenter
    直接点send
    等待审核通过(两三个小时)。
    9. 在这里你可以看到自己的gradle地址,别人使用你的项目时只需要在Gradle中复制这一行上去就可了

    参考链接:如何使用Android Studio把自己的Android library分享到jCenter和Maven Central
    Android Studio发布项目到Jcenter
    http://www.jianshu.com/p/0e7b8e14f0cd/comments/1050253

    展开全文
  • 解决更新AndroidStudio之后,项目运行不起来,提示"unable to find valid certification"的问题
  • JCenter 迁移指南

    2021-07-20 00:21:49
    code小生一个专注大前端领域的技术平台公众号回复Android加入安卓技术群原文链接:https://www.jianshu.com/u/f7bb67d86765‍前言 JCenter...

    code小生 一个专注大前端领域的技术平台

    公众号回复Android加入安卓技术群

    原文链接:https://www.jianshu.com/u/f7bb67d86765

    ‍前言

    JCenter 远程仓库已经宣布停止维护了,经过一段时间的实践和踩坑,现在由我来给大家讲讲 JCenter 停更带来的影响及分享解决的方案。

    进入 Bintray 官网,就会发现有一个很明显的红色横幅,大致的意思是:注意所有 Bintray 服务将被弃用,您的帐户将在 2021 年 5 月 1 日被禁用,学习更多的知识。

    点击学习更多,我们可以发现了 Bintray 官方对本次操作做出的解释,由于全是英文,为了方便大家,我直接翻译成中文给大家看:

    官方主要讲了三点内容,分别是:

    • 解释为什么停止维护

    • 停止维护的时间节点

    • 常见一些问题的解答

    为了节省大家时间,我对内容做了提炼精简,为大家简单解说一下:

    • Bintray 和 JCenter 因为挣不到钱,所以业务被砍掉了,需要开发者提前做一下迁移。

    • 截止 2021 年 3 月 30 日之后不能上传任何库,2022 年 2 月 1 日之后不能下载任何库。

    • 停止维护之后,Bintray 账户将被限制登录,Bintray 官网将不能被访问,所有数据在最后一天从服务器中被删除。

    影响范围

    先来谈谈这次事件带来的影响:影响范围很广,主要表现为 2022 年 2 月 1 日之后 Android Studio 将无法从 JCenter 仓库拉取任何代码库,统统都会拉取失败,间接导致项目无法编译通过。

    这是创建新项目的远程仓库配置,默认只配置了 Google 和 JCenter,这时大家心里可能在想:JCenter 仓库挂掉了没事,反正还有 google 仓库呢。

    但事实却是:Google 仓库是谷歌官方的远程仓库,只存放谷歌官方的一些框架,例如 AndroidX 相关的包都是放在这里的,暂时不对外开放,也就是说现在大家用的第三方框架基本都是放在 JCenter 仓库上,就问你一句方不方?慌不慌?

    /   解决方案   /

    面对问题,我觉得只会慌是解决不了问题的,还是得多想想办法,而不是坐以待毙,我最近花了很多时间研究了这个问题,最后发现解决这个问题其实并不难,JCenter 仓库用不了,可以换成 JCenter 的镜像仓库。

    在这里我推荐使用 阿里云云效仓库 和 华为开源镜像站 来解决这一问题,在项目根目录下的 build.gradle 文件中这样配置:

    buildscript {
        repositories {
            // 阿里云云效仓库:https://maven.aliyun.com/mvn/guide
            maven { url 'https://maven.aliyun.com/repository/jcenter' }
            maven { url 'https://maven.aliyun.com/repository/google' }
            // 华为开源镜像:https://mirrors.huaweicloud.com
            maven { url 'https://repo.huaweicloud.com/repository/maven' }
            // JitPack 远程仓库:https://jitpack.io
            maven { url 'https://jitpack.io' }
            // MavenCentral 远程仓库:https://mvnrepository.com
            mavenCentral()
            google()
            jcenter()
        }
    }
    
    allprojects {
        repositories {
            maven { url 'https://maven.aliyun.com/repository/jcenter' }
            maven { url 'https://maven.aliyun.com/repository/google' }
            maven { url 'https://repo.huaweicloud.com/repository/maven' }
            maven { url 'https://jitpack.io' }
            mavenCentral()
            google()
            jcenter()
        }
    }
    
    

    这时大家心中可能有另外一个疑问,为什么 JCenter 仓库挂了,而它的镜像仓库却还能用呢?这个问题要从这个东西诞生的原因说起,由于 JCenter 是外国人开发的,用的是自然是国外的服务器,所以访问起来很慢,从这些地方拉代码自然也快不了,严重影响开发效率,所以国内就诞生了关于 JCenter 的镜像仓库,用于解决这一问题。

    具体的实现原理是将 JCenter 仓库上的代码库拷贝一份放到国内的服务器的硬盘上面,这样我们再拉取代码库就会快很多,而对于 JCenter 停止维护的事件,其实就是停止外界对服务器的访问,而如果我们重新指向服务器地址,这样是不是就完美避开了访问 JCenter 服务器?从我的认知看来是没有问题的,大家对此也可以提出不同的意见。

    迁移方案

    上面主要是针对使用者的解决方案,假设我是开源库作者,那么该如何应对这个问题呢?

    如果是开源库的作者,只能通过换远程仓库服务商来解决问题,不换的话现在代码库已经上传不了 JCenter,从而导致框架无法发布新的远程依赖。

    现在除了 JCenter 方案,其实还有两个备选方案,mavenCentral 和 JitPack,这两个远程仓库也是比较常用,经过对比,我最终选择了 JitPack 作为新的代码库存放仓库,主要的原因也很简单,相比 mavenCentral,JitPack 的流程更简单,主要表现为不需要注册账号,不需要在项目 Gradle 中配置信息,只需要将代码库发布到 Github 即可,最后在 JitPack 构建一下就可以了。

    现在由我来给大家演示一下具体的操作方式。

    第一步:提交代码到 Github 上面(常规操作)

    第二步:找到 Github 页面中的 Release 选项

    第三步:创建一个新的 release 版本

    第四步:填写好相关的信息

    第五步:填写完之后点击Publish release按钮

    第六步:打开 JitPack 官网 https://jitpack.io/

    第七步:输入 Github 地址,并点击Look up按钮

    第八步:选择刚刚创建的 10.5 的版本,点击右边的Get it按钮

    第九步:等待构建完成,等转圈的图标变成文件的图标就说明已经完成

    第十步:点击 Get it 按钮,这时会显示代码库远程依赖信息

    至此上传代码库到 JitPack 仓库的流程已经讲完,有一点需要的是,我们需要在 Github 项目主页中提醒开发者加入:

    否则会出现有些开发者拉取不到代码库的问题,这是因为 Studio 创建的工程默认只配置了 Google 仓库和 JCenter 仓库,默认并没有配置 JitPack 仓库。

    另外告诉大家一个好消息,我个人的所有框架已如数迁移到 JitPack 仓库了,有使用到我写的框架的同学可以考虑找一个时间点,然后做一下统一升级和迁移。

    友盟迁移

    随着 Bintray 的逐渐关闭,有友盟远程依赖的项目也运行不起来了,编译时提示报错:

    Unable to resolve dependency for ':umeng@previewUnitTest/compileClasspath': Could not download common-2.2.5.jar (com.umeng.umsdk:common:2.2.5)
    Unable to resolve dependency for ':umeng@preview/compileClasspath': Could not download analytics-8.1.6.jar (com.umeng.umsdk:analytics:8.1.6)
    
    

    然后我去官网看了一下,果然不出所料,这个不止是我一个人的问题,而是大家都会。

    大家可以先看看友盟的公告:【公告】安卓SDK在线依赖库迁移,看情况是有救了,然后我按照友盟的提示去做了。

    公告链接:

    https://info.umeng.com/detail?id=443&cateId=1

    结果发现还是不行,不过我发现最下面有一段话:获取时必须为最新版的SDK,顿时我明白了什么,原来友盟只放了最新版本在 Maven 库上面,why?那我们这些用旧版本的用户怎么办?公告上面也没有写,友盟这工作做得不到位啊,请允许我打个差评。不过在我看来解决这个问题的方法有两种,大家可以根据自己的实际情况而定。

    方法一:升级新版本,可以根据友盟发布的公告进行修改,只不过这种只能升级到最新版本,当然你要是对友盟的 Maven 库没有信心,可以考虑直接下载最新的 Jar 包进行离线依赖。

    方法二:沿用旧版本,这块的话友盟没有给出解决方案,但是贸然升级版本必定存在一定的风险,假设测试同学没有空做测试,那么很容易就会出现问题,这个时候为了项目能正常运行,又能以最低的成本来做这件事,依赖原有的旧版本就很有必要了,那么旧版本的 Jar 包该从哪里找呢?我相信很多人第一反应是去 Bintray 官网的友盟仓库中找找看。

    正当我高兴的时候,现实狠狠给我泼了一波冷水,我点击下载  common-2.2.5.jar,却发现结果是这个样子的。

    顿时感觉被命运扼住了喉咙,难道就没有其他办法了吗?

    答案其实有的,我小脑瓜忽然灵机一动:去 Github 找找看?

    事实证明,只要思想不滑坡,办法总比困难多,你学废了吗?

    至于两种方案要选择哪种,我觉得吧,在开发和测试同时都能空出人力来做时,可以优先考虑升级友盟 SDK 来解决问题,这样做还有另外一个好处,新版本的 SDK 肯定是修复了旧版本的某些 Bug,不如趁此机会提升一下应用的稳定性,但是如果没有时间做,也可以先考虑直接找旧版本的 Jar 包来解决问题,毕竟项目要能运行才是目前最最最重要的事情。

    Kotlin 启用新 Logo,似乎更有寓意?

    Google Fuchsia OS 全新 Logo 来了

    Android 混淆从入门到精通

    我是code小生,喜欢可以随手点个在看、转发给你的朋友,谢谢~

    觉得不错,请点个在看呀

    展开全文
  • JCenter迁移指南

    2021-05-14 00:06:31
    前言 JCenter 远程仓库已经宣布停止维护了,经过一段时间的实践和踩坑,现在由我来给大家讲讲 JCenter 停更带来的影响及分享解决的方案。进入 Bintray 官网,就会发现有一个...

    前言

    JCenter 远程仓库已经宣布停止维护了,经过一段时间的实践和踩坑,现在由我来给大家讲讲 JCenter 停更带来的影响及分享解决的方案。

    进入 Bintray 官网,就会发现有一个很明显的红色横幅,大致的意思是:注意所有 Bintray 服务将被弃用,您的帐户将在 2021 年 5 月 1 日被禁用,学习更多的知识。

    点击学习更多,我们可以发现了 Bintray 官方对本次操作做出的解释,由于全是英文,为了方便大家,我直接翻译成中文给大家看:

    官方主要讲了三点内容,分别是:

    • 解释为什么停止维护

    • 停止维护的时间节点

    • 常见一些问题的解答

    为了节省大家时间,我对内容做了提炼精简,为大家简单解说一下:

    • Bintray 和 JCenter 因为挣不到钱,所以业务被砍掉了,需要开发者提前做一下迁移。

    • 截止 2021 年 3 月 30 日之后不能上传任何库,2022 年 2 月 1 日之后不能下载任何库。

    • 停止维护之后,Bintray 账户将被限制登录,Bintray 官网将不能被访问,所有数据在最后一天从服务器中被删除。

    影响范围

    先来谈谈这次事件带来的影响:影响范围很广,主要表现为 2022 年 2 月 1 日之后 Android Studio 将无法从 JCenter 仓库拉取任何代码库,统统都会拉取失败,间接导致项目无法编译通过。

    这是创建新项目的远程仓库配置,默认只配置了 Google 和 JCenter,这时大家心里可能在想:JCenter 仓库挂掉了没事,反正还有 google 仓库呢。

    但事实却是:Google 仓库是谷歌官方的远程仓库,只存放谷歌官方的一些框架,例如 AndroidX 相关的包都是放在这里的,暂时不对外开放,也就是说现在大家用的第三方框架基本都是放在 JCenter 仓库上,就问你一句方不方?慌不慌?

    /   解决方案   /

    面对问题,我觉得只会慌是解决不了问题的,还是得多想想办法,而不是坐以待毙,我最近花了很多时间研究了这个问题,最后发现解决这个问题其实并不难,JCenter 仓库用不了,可以换成 JCenter 的镜像仓库。

    在这里我推荐使用 阿里云云效仓库 和 华为开源镜像站 来解决这一问题,在项目根目录下的 build.gradle 文件中这样配置:

    buildscript {
        repositories {
            // 阿里云云效仓库:https://maven.aliyun.com/mvn/guide
            maven { url 'https://maven.aliyun.com/repository/jcenter' }
            maven { url 'https://maven.aliyun.com/repository/google' }
            // 华为开源镜像:https://mirrors.huaweicloud.com
            maven { url 'https://repo.huaweicloud.com/repository/maven' }
            // JitPack 远程仓库:https://jitpack.io
            maven { url 'https://jitpack.io' }
            // MavenCentral 远程仓库:https://mvnrepository.com
            mavenCentral()
            google()
            jcenter()
        }
    }
    
    allprojects {
        repositories {
            maven { url 'https://maven.aliyun.com/repository/jcenter' }
            maven { url 'https://maven.aliyun.com/repository/google' }
            maven { url 'https://repo.huaweicloud.com/repository/maven' }
            maven { url 'https://jitpack.io' }
            mavenCentral()
            google()
            jcenter()
        }
    }
    
    

    这时大家心中可能有另外一个疑问,为什么 JCenter 仓库挂了,而它的镜像仓库却还能用呢?这个问题要从这个东西诞生的原因说起,由于 JCenter 是外国人开发的,用的是自然是国外的服务器,所以访问起来很慢,从这些地方拉代码自然也快不了,严重影响开发效率,所以国内就诞生了关于 JCenter 的镜像仓库,用于解决这一问题。

    具体的实现原理是将 JCenter 仓库上的代码库拷贝一份放到国内的服务器的硬盘上面,这样我们再拉取代码库就会快很多,而对于 JCenter 停止维护的事件,其实就是停止外界对服务器的访问,而如果我们重新指向服务器地址,这样是不是就完美避开了访问 JCenter 服务器?从我的认知看来是没有问题的,大家对此也可以提出不同的意见。

    迁移方案

    上面主要是针对使用者的解决方案,假设我是开源库作者,那么该如何应对这个问题呢?

    如果是开源库的作者,只能通过换远程仓库服务商来解决问题,不换的话现在代码库已经上传不了 JCenter,从而导致框架无法发布新的远程依赖。

    现在除了 JCenter 方案,其实还有两个备选方案,mavenCentral 和 JitPack,这两个远程仓库也是比较常用,经过对比,我最终选择了 JitPack 作为新的代码库存放仓库,主要的原因也很简单,相比 mavenCentral,JitPack 的流程更简单,主要表现为不需要注册账号,不需要在项目 Gradle 中配置信息,只需要将代码库发布到 Github 即可,最后在 JitPack 构建一下就可以了。

    现在由我来给大家演示一下具体的操作方式。

    第一步:提交代码到 Github 上面(常规操作)

    第二步:找到 Github 页面中的 Release 选项

    第三步:创建一个新的 release 版本

    第四步:填写好相关的信息

    第五步:填写完之后点击Publish release按钮

    第六步:打开 JitPack 官网 https://jitpack.io/

    第七步:输入 Github 地址,并点击Look up按钮

    第八步:选择刚刚创建的 10.5 的版本,点击右边的Get it按钮

    第九步:等待构建完成,等转圈的图标变成文件的图标就说明已经完成

    第十步:点击 Get it 按钮,这时会显示代码库远程依赖信息

    至此上传代码库到 JitPack 仓库的流程已经讲完,有一点需要的是,我们需要在 Github 项目主页中提醒开发者加入:

    否则会出现有些开发者拉取不到代码库的问题,这是因为 Studio 创建的工程默认只配置了 Google 仓库和 JCenter 仓库,默认并没有配置 JitPack 仓库。

    另外告诉大家一个好消息,我个人的所有框架已如数迁移到 JitPack 仓库了,有使用到我写的框架的同学可以考虑找一个时间点,然后做一下统一升级和迁移。

    友盟迁移

    随着 Bintray 的逐渐关闭,有友盟远程依赖的项目也运行不起来了,编译时提示报错:

    Unable to resolve dependency for ':umeng@previewUnitTest/compileClasspath': Could not download common-2.2.5.jar (com.umeng.umsdk:common:2.2.5)
    Unable to resolve dependency for ':umeng@preview/compileClasspath': Could not download analytics-8.1.6.jar (com.umeng.umsdk:analytics:8.1.6)
    
    

    然后我去官网看了一下,果然不出所料,这个不止是我一个人的问题,而是大家都会。

    大家可以先看看友盟的公告:【公告】安卓SDK在线依赖库迁移,看情况是有救了,然后我按照友盟的提示去做了。

    公告链接:

    https://info.umeng.com/detail?id=443&cateId=1

    结果发现还是不行,不过我发现最下面有一段话:获取时必须为最新版的SDK,顿时我明白了什么,原来友盟只放了最新版本在 Maven 库上面,why?那我们这些用旧版本的用户怎么办?公告上面也没有写,友盟这工作做得不到位啊,请允许我打个差评。不过在我看来解决这个问题的方法有两种,大家可以根据自己的实际情况而定。

    方法一:升级新版本,可以根据友盟发布的公告进行修改,只不过这种只能升级到最新版本,当然你要是对友盟的 Maven 库没有信心,可以考虑直接下载最新的 Jar 包进行离线依赖。

    方法二:沿用旧版本,这块的话友盟没有给出解决方案,但是贸然升级版本必定存在一定的风险,假设测试同学没有空做测试,那么很容易就会出现问题,这个时候为了项目能正常运行,又能以最低的成本来做这件事,依赖原有的旧版本就很有必要了,那么旧版本的 Jar 包该从哪里找呢?我相信很多人第一反应是去 Bintray 官网的友盟仓库中找找看。

    正当我高兴的时候,现实狠狠给我泼了一波冷水,我点击下载  common-2.2.5.jar,却发现结果是这个样子的。

    顿时感觉被命运扼住了喉咙,难道就没有其他办法了吗?

    答案其实有的,我小脑瓜忽然灵机一动:去 Github 找找看?

    事实证明,只要思想不滑坡,办法总比困难多,你学废了吗?

    至于两种方案要选择哪种,我觉得吧,在开发和测试同时都能空出人力来做时,可以优先考虑升级友盟 SDK 来解决问题,这样做还有另外一个好处,新版本的 SDK 肯定是修复了旧版本的某些 Bug,不如趁此机会提升一下应用的稳定性,但是如果没有时间做,也可以先考虑直接找旧版本的 Jar 包来解决问题,毕竟项目要能运行才是目前最最最重要的事情。

    原文链接:https://www.jianshu.com/u/f7bb67d86765

    关注我获取更多知识或者投稿

    展开全文
  • 关于JCenter废弃这件事情,相信许多朋友早就已经知道了。我在几个月前也专门写过一篇文章分析JCenter废弃事件的前前后后。Google已经给出了其官方态度,建议开发者以后发布库都发布到MavenCentral上。 官方的态度...

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每个工作日都有文章更新。

    关于JCenter废弃这件事情,相信许多朋友早就已经知道了。我在几个月前也专门写过一篇文章分析JCenter废弃事件的前前后后,感兴趣的朋友可以去阅读下这篇文章 浅谈JCenter即将被停止服务的事件

    在上面这篇文章当中提到了几个比较关键的点:

    1. 自2021年3月31日之后,JCenter就不再接受任何新库的提交。
    1. 自2022年2月1日之后,JCenter将停止提供库的下载服务。
    1. Google会在其Android开发者官网发布如何将开源库从JCenter迁出的方案。

    当时整体的计划是这个样子的,然后几个月时间过去了,真是不得不说计划永远赶不上变化。

    首先,Google修改了Android开发者官网的声明,没有再提到会给出迁出方案。只是告知开源库的发布者,以后发布库建议都发布到MavenCentral上。并告知开源库的使用者,你得自己去找这些库具体在哪里。

    Google的这波操作可真是把锅甩的干干净净,JCenter废弃的事情与“我”再无关系,那是第三方开发者与JCenter之间的事情。

    当时我看到Google修改声明之后心想,那这老库的迁移怎么办啊,Google是完全不管了。

    不过再仔细一看,我才发现,原来JCenter也改了声明。在JCenter的最新声明中,2022年2月1日之后停止下载服务的那一条被删除了。也就是说,虽然JCenter不再允许开发者向其提交新的库,但是已经上传的老库会继续提供下载服务,这样也就不需要对它们做迁移了。

    不知道为什么JCenter会改变态度做出这种善事,我猜测难不成是Google跟他们私下里进行了什么协商?不过不管怎么说,这对于开源库的开发者来说都是一件好事情,意味着老库的问题我们不需要再考虑了。

    现在的问题就是,以后的新库怎么办?

    为什么要使用MavenCentral

    Google已经给出了其官方态度,建议开发者以后发布库都发布到MavenCentral上。

    官方的态度其实是很重要的,因为以前JCenter也是这样被Google扶正的(结果Google被坑惨了),不然JCenter也无法在Android领域产生这么大的影响力。

    如果你现在用最新版的Android Studio来创建一个新的项目,你会发现build.gradle文件中仓库的声明变成了这样:

    allprojects {
        repositories {
            google()
            mavenCentral()
            jcenter() // Warning: this repository is going to shut down soon
        }
    }
    

    可以看到,mavenCentral()仓库成了创建项目时的默认仓库,而jcenter()仓库被标为了废弃。

    许多国内的开发者可能会觉得MavenCentral太麻烦了,远不如JitPack用起来简单。

    然而JitPack的问题就是并没有被Google官方推荐,你如果将库发布到JitPack上,开发者想要使用你的库,还得要额外引入一下JitPack的仓库才行,这无疑就增加了使用成本。

    因此,即使是麻烦,我仍然建议广大开发者们要将自己的开源库发布到MavenCentral上。

    那么接下来,我们就看看如何实现。

    准备域名

    相比于JCenter,MavenCentral的发布标准要远远高得多。不光是操作更麻烦的问题,而且MavenCentral还会对你是否拥有这个包路径所对应的域名进行检查。

    比如你提交了一个库,它的包路径格式如下:

    com.example.test:library:1.0.0
    

    那么你就必须要拥有example.com这个域名才行。

    相比之下,JCenter就完全不检查你是否真的拥有这个域名,谁先提交了使用这个包路径的库,这个包路径就是谁的了。

    另外,注册自己的域名是要花钱的,如果你不想花钱的话也可以借助GitHub来完成,但是这样你的包路径就必须以io.github为前缀,而不能使用自定义的包路径了。

    本篇文章介绍的是使用自己的域名来提交到MavenCentral的方式,如果你想要了解使用io.github域名的方式,可以参考这篇文章 发布Android Lib到Maven Central

    那么不用多说,域名肯定是要自己先准备好的。我在阿里云上注册了一个叫guolindev.com的域名,因此我就可以使用以com.guolindev为前缀的包路径了。

    创建工单

    接下来访问以下地址去注册一个Sonatype账号:

    https://issues.sonatype.org/secure/Dashboard.jspa

    注册完之后重新访问该地址即可进入Sonatype Dashboard界面。

    现在点击顶部工具栏上的Create按钮创建一个工单:

    这个工单虽然看上去要填很多项内容,但其实还是非常简单的,我这里贴一下我当初填写的一个工单截图:

    我们只需要填写带星号的必填项即可。

    • Project和Issue Type保持默认选项,不用做修改。
    • Summary可以随便填,这里我填写的是项目名称。
    • Group Id非常重要,决定着库的包路径是什么。前缀使用你刚才申请好的域名的倒排方式,后面可以自定义一些与库名相关的路径。
    • Project URL填写该项目的Github地址。
    • SCM url只需要在上面的Github地址后面加上.git后缀即可。

    点击Create完成工单创建。

    创建完工单之后需要等待工作人员审核,我测试下来非工作时间是没人审核你的工单的。所以如果你是在周末创建的工单,那么可能需要等待两到三天的时间才会有人处理。

    有工作人员处理你的工单之后,他会在你的工单里留下一条评论,如下图所示:

    这条评论的意思就是,你要证明刚才你在Group Id里填写的包路径所对应的域名是你的。

    证明的方式就是,在你的域名中添加一条类型为TXT的解析,并将它指向你这条工单的URL地址。

    如果你的域名是在阿里云注册的话,可以到域名管理界面,对着域名点击解析,然后按下图的示例添加解析记录即可:

    添加完解析记录后,你需要在工单里回复一下,可以直接简单评论一句Done即可。这样工作人员会去验证你添加的解析记录是否已生效,验证没有问题之后,将会在评论里告诉你申请已通过:

    从评论里得知,我们现在已经有权限向s01.oss.sonatype.org这个地址发布库了。

    创建密钥

    MavenCentral还要求,所有发布的库都必须使用GPG来进行签名才行,所以接下来我们就进行这个操作。

    GPG在一些Linux系统上是内置的,如果你使用的Linux系统没有内置的话可以通过以下命令进行安装:

    sudo apt install gnupg
    

    Mac系统可以借助HomeBrew进行安装,命令如下:

    brew install gpg
    

    Windows系统需要访问下面的地址手动下载安装:

    http://www.gnupg.org/download/

    安装完成之后,输入以下命令创建密钥:

    gpg --full-generate-key
    

    接下来会弹出一系列的选项让你选择,比如密钥的类型,密钥的长度,密钥过期时间等。如果没有什么特殊需求的话,一路点击回车,使用默认选项就好了。

    除此之外,还会要求你填写姓名、邮箱等内容,以及为这个密钥设置密码。

    以上内容都填写完成之后,你就可以看到你创建的密钥了:

    紧接着,我们需要把刚刚创建好的密钥上传到GPG服务器。这样MavenCentral到时候可以从GPG服务器上拿到我们的密钥,从对上传的包进行验证。

    上传命令如下:

    gpg --keyserver hkp://pgp.mit.edu --send-keys C37AF927
    

    注意,最后send-keys后面使用的密钥ID是你刚刚创建的密钥ID的最后8位。这里一定要使用最后8位,我之前因为使用了完整的密钥ID,结果一直出现奇奇怪怪的错误。

    最后一步,执行以下命令生成私钥文件:

    gpg --export-secret-keys  -o 文件路径/secring.gpg
    

    这个私钥文件一定要在你本地保存好,后面提交库的时候还需要用到它。

    开始发布

    以上所有步骤全部完成之后,下面就可以开始发布我们编写的开源库了。

    为了让发布过程变得更加简单,我使用了gradle-maven-publish-plugin这样一个第三方开源插件。当然如果你直接使用官方的maven-publish插件也是可以实现同样的功能的,只是得额外写不少代码才行。

    gradle-maven-publish-plugin插件的开源库地址是:

    https://github.com/vanniktech/gradle-maven-publish-plugin

    这个库的使用方法非常简单,将以下代码复制粘贴到你要发布的开源库所在模块的build.gradle文件的最底部即可:

    ...
    
    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.vanniktech:gradle-maven-publish-plugin:0.17.0'
        }
    }
    
    allprojects {
        plugins.withId("com.vanniktech.maven.publish") {
            mavenPublish {
                sonatypeHost = "S01"
            }
        }
    }
    
    apply plugin: "com.vanniktech.maven.publish"
    

    接来下打开项目根目录下的gradle.properties文件,并且按照下面的模板填入如下内容:

    GROUP=com.guolindev.glance
    POM_ARTIFACT_ID=glance
    VERSION_NAME=1.0.0
    
    POM_NAME=Glance
    POM_DESCRIPTION=A simple and handy Android database debugging library.
    POM_INCEPTION_YEAR=2020
    POM_URL=https://github.com/guolindev/Glance/
    
    POM_LICENSE_NAME=The Apache Software License, Version 2.0
    POM_LICENSE_URL=https://www.apache.org/licenses/LICENSE-2.0.txt
    POM_LICENSE_DIST=repo
    
    POM_SCM_URL=https://github.com/guolindev/Glance/
    POM_SCM_CONNECTION=scm:git:git://github.com/guolindev/Glance.git
    POM_SCM_DEV_CONNECTION=scm:git:ssh://github.com/guolindev/Glance.git
    
    POM_DEVELOPER_ID=guolindev
    POM_DEVELOPER_NAME=Lin Guo
    POM_DEVELOPER_URL=https://github.com/guolindev/
    
    signing.keyId=密钥ID的后8位
    signing.password=密钥密码
    signing.secretKeyRingFile=私钥文件路径
    
    mavenCentralUsername=Sonatype账号
    mavenCentralPassword=Sonatype密码
    

    这个模板的前三项决定着你的开源库的包路径是什么,比如按照我上面的写法,那么这个开源库的包路径就是:

    com.guolindev.glance:glance:1.0.0
    

    其他几项大多是一些说明型的内容,根据自己的实际情况填写就可以了。

    最后密钥部分要填写你刚才创建的公钥ID和密码,以及私钥的文件路径,另外还要填写Sonatype的账号密码。

    由于我们在这个文件当中填写了很多隐私内容,一定要记得将它排除在版本控制之外。

    现在,我们可以通过在Android Studio右侧工具栏的Gradle页签当中找到publish这个任务,双击执行即可将这个库发布出去。

    如果一切顺利的话,就应该能在控制台中看到库已经发布成功了。


    同步到MavenCentral

    但是到这里还没完。

    需要知道的是,我们刚才并没有将库发布到MavenCentral,MavenCentral也不允许我们直接将库发布上去。

    回顾一下一开始创建的工单,工作人员回复我们的是什么?

    可以看到,我们只是可以向s01.oss.sonatype.org这个地址发布库,而这并不是MavenCentral。

    另外我们刚才在build.gradle文件中编写的发布脚本也证实了这一点:

    allprojects {
        plugins.withId("com.vanniktech.maven.publish") {
            mavenPublish {
                sonatypeHost = "S01"
            }
        }
    }
    

    这里将sonatypeHost指定成了S01,而S01指的就是将库发布到s01.oss.sonatype.org。

    那么要如何才能将库发布到MavenCentral呢?接下来我们还需要做一下同步操作。

    访问以下网址,并使用你的Sonatype账号密码登录(登录按钮在页面右上角):

    https://s01.oss.sonatype.org/

    登录成功之后,页面的左侧边栏当中将会多出一个Staging Repositories选项:

    点击该选项,你就能看到刚刚发布成功的开源库了:

    现在我们需要将这个库同步到MavenCentral仓库。操作方法是,先勾选中这个仓库,然后点击Close按钮关闭仓库,并在弹出的确认窗口中点击Confirm。

    Close完毕之后,刷新界面,你会发现Release按钮就变成可点击的状态了:

    点击Release按钮,并在弹出窗口中点击Confirm,这样就可以将这个开源库同步到MavenCentral上了。

    不久之后,你会在之前创建的工单界面看到一条新的留言:

    这是在告诉我们,同步工作已经开始了,通常大概需要30分钟左右的时间。但是如果想要在search.maven.org中可以搜到我们提交的仓库,最多可能需要4小时之久。

    我并没有具体去验证一下同步到底需要多长时间,反正我是点击了Release按钮之后,第二天再到search.maven.org中去搜索,已经可以找到昨天提交的库了:

    提交完成之后,想要在项目中引用这个库的话,只需要这样写即可:

    dependencies {
        implementation 'com.guolindev.glance:glance:1.0.0'
    }
    

    和之前使用JCenter仓库的写法并无差别。

    到这里,我们就把将开源库发布到MavenCentral的所有流程都走了一遍。只要跟着这些流程去操作,相信大家都可以成功将库发布到MavenCentral上。

    同时本篇文章又成为了《第一行代码 第3版》的又一篇DLC。伴随着Google的高速技术迭代,我已经不知道为这本书发了多少篇补丁文章了。

    另外,细心的朋友可能注意到了,本文我一直在用Glance这个库进行演示,这意味着Glance的新版本很快就要发布了。那么下篇原创文章,我会跟大家聊一聊新版的Glance又多了哪些新功能,我们下期见。


    如果想要学习Kotlin和最新的Android知识,可以参考我的新书 《第一行代码 第3版》点击此处查看详情


    关注我的技术公众号,每天都有优质技术文章推送。

    微信扫一扫下方二维码即可关注:

    展开全文
  • 浅谈JCenter即将被停止服务的事件

    万次阅读 多人点赞 2021-04-19 20:23:23
    可能有许多朋友都已经知道了这个事情,JCenter即将在Android上被废弃了。 这么重大的事件也是相当出乎我意料,本来我以为是Google又要整什么幺蛾子,因为Google很喜欢废弃东西。结果了解下来,Google这次也是受害者...
  • 因为是新项目,所以就把jCenter的地址从项目中移除了,全部采用mavenCentral这个库,但是SmartRefreshLayout这个还是在jCenter,并没有迁移到mavenCentral,所以导致无法下载,因为jCenter要永久性关闭,这个库还...
  • 使用Gradle将aar文件发布到jCenter: 首先,我感谢 ,他耐心地推动了我的发布过程(请参阅)。 现在,我将列出如何将Android libray发布到jCenter,然后与Maven Central进行同步: 我使用“ Android Studio”,...
  • Android 快速发布开源项目到jcenter

    万次阅读 多人点赞 2016-04-14 10:05:48
    转载请标明出处(请勿转载删除底部微博...大家在很多时候都希望让自己的开源项目可以更方便的让用户去使用,那么对于Android平台,一个很好的方式就是上传到jcenter,然后使用时通过添加compile引用即可。对于上传到jce
  • Bintray 和 JCenter 截止 2021 年 3 月 30 日之后不能上传任何库,2022 年 2 月 1 日之后不能下载任何库。 解决方案: 在库开发者迁移项目之前,我们可以先使用镜像仓库 buildscript { repositories { // 阿里...
  • 首先,告别下 bintray jcenter. 相比于 Maven Central,bintray jcenter 的性能和方便性确实好得多。可惜,jcenter 将要关闭了。jcenter 还是给我提供了很多的便利,对于其关闭深表可惜: 2、发布到 Maven Ce
  • 目录一、创建Bintray账户及Maven仓库二、上传项目到jcenter1、配置Android项目Gradle命令上传3、在项目中引用3、Add to JCenter 一、创建Bintray账户及Maven仓库 1、打开Bintray首页,点击 For an Open Source ...
  • 最近把一个老项目打开,突然库拉不下,看到报错信息,突然想起来jcenter的迁库,自己也记下 打开app的build.gradle,这提示够明显了 然后根据自己用到的内容整了整 repositories { maven { url '...
  • 仓库名称 阿里云仓库地址 阿里云仓库地址(老版) 源地址 central https://maven.aliyun.com/repository/central ...jcenter https://maven.aliyun.com/repository/public https://maven.aliyun.c...
  • 之前写了一份Android 发布在线库到jitpack详解的文章,有人会问为啥又要写一份关于上传开源库到jcenter的文章呢?我想说多做一手准备永远不会过时,不要把鸡蛋放到一个篮子里。 正文 闲话不多说直接进入今天的主题...
  • Android-发布项目到到 JCenter 仓库

    千次阅读 2018-02-07 17:38:44
    写在前面 阅读这个博客,你会知道 ...JCenter 和 Maven Central 是什么? 如何将项目发布到 JCenter 仓库? Maven 是什么? Maven 官网 上的介绍: Apache Maven is a software project manag...
  • 情况 项目编译使用gradle进行打包,之前都能正常运行,在没有改动的情况下, 突然报错gradle命令无法成功构建。 在ci文件中使用方式如下: deploy-test: ... stage: deploy-test script: - gradle shadowJar ...
  • JCenter要跑路了!!! 没错,这将影响到所有的Android开发者!!! 昨天我将Android Studio 升级到了4.2,Gradle也升级到了7.0,按照惯例,加个镜像,然后报了个安全错误,就是早就通知的http转https,然后到了...
  • maven { url 'https://maven.aliyun.com/repository/jcenter' } //jcenter() maven { url 'https://maven.aliyun.com/repository/google' } //google()
  • 1. 在项目中找到build.gradle文件,内容全替换下,解决 jcenter…下载,与gradle-5.4.1-all.zip的下载, 转换为 用国内的maven仓库代替(阿里,某某大学的,都可) buildscript { repositories { //*************...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,352
精华内容 10,540
关键字:

jcenter