AndroidStudio上传jcenter及各种实现方式的比较
2016-05-26 15:51
302 查看
使用过AndroidStudio的朋友对
这样一种引用第三方开源库的方式肯定是不陌生的,我在刚开始接触AS的时候,也是觉得这种方式比以前eclipse中拷贝jar包的方式方便多了。
刚巧前两天看见鸿洋大神写的Android 快速发布开源项目到jcenter,所以本着追逐大神脚步的心态,我也按照博文中的方式去实践了下,但是在实践过程中还是遇到了一些问题的。
先介绍些简单的东西,第一点,我从一个小白的角度先说明两个概念,一个是仓库,一个是项目或者说库工程,仓库中能够有多个项目,而对于jcenter,我把它理解为一个大型的公共仓库,整个发布的流程可以看做,你去申请一个仓库,然后向仓库中投放你自己的轮子,接着你把你仓库中的轮子注册到这个大型的公共仓库中,这样别人就可以去那个大仓库中找到你的轮子了,当然你的仓库本身其实也是可以被别人访问的
所以如果你要类似于compile ‘xxxx ’这样的方式引用一个第三方的开源库,我们需要先申明一个中心仓库地址,AS中默认已经添加jcenter的中心仓库,如果要添加别的仓库地址,只需要在项目的最外层build.gradle文件,allProject下的 repositories中添加相关的地址就行,如下
接下来说下发布开源项目我所知道的两种方式,第一种自然就是刚介绍到的鸿洋大神博文中提到的,利用这种方式的确能够上传,但是如果项目中涉及到中文的话就不行了,会直接报中文编码的异常,对于这一点,我并不清楚解决方案,或许可以上github看下这个插件的高级用法和自定义用法,我主要是研究了下第二种方式gradle-bintray-plugin。
这种方式的话网上百度下,有许多介绍的文档,具体实现在这里介绍的也是非常详细了,建议先看下这里的详细介绍,那么说下我用这种方式遇到的一些问题:
1.涉及到中文时,这种方式可以可以在javaDoc任务中设置编码格式,如下:task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
options.encoding = 'utf-8'
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}也可以这样:
2.如何声明artifactId这个字段以及重命名,如果看了刚刚贴出的网址的话,应该就比较了解了,对于compile一个开源库,必须知道三个要素,groupId,artifactId,以及versionId,类似于:compile ‘groupId:artifactId:versionId’这样的格式,这里说下artifactId要与你的module名一致,否则就会有问题,这个插件内部,貌似会将module的名字和artifactId做比较,如果不同会取module的名去你的远程仓库上创建存放路径,所以需要格外小心,一般可以用这样的方式声明//这里面所有的变量名都不能修改,否则会引用不到
ext {
bintrayRepo = 'maven'
bintrayName = '名称'
publishedGroupId = '' //jcenter上的路径,不同版本间可以修改,不建议修改,改后不同版本间引用麻烦
libraryName = bintrayName //maven库的库名称,不能修改,修改后就会重新创建一个新的maven代码仓库
artifact = project.name //项目名称,不同版本间可以修改,不建议修改
libraryDescription = '' //版本描述
libraryVersion ='' //版本号
siteUrl = '' //网站,不重要,可直接填写github地址
gitUrl = '' //git地址,不重要,可直接填写guthub地址
developerId = '' //开发者id
developerName = '' //开发者名称
developerEmail = '' //开发者邮箱
licenseName = 'The Apache Software License, Version 2.0'
licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
allLicenses = ["Apache-2.0"]
}这一段代码是根据我刚刚贴出的介绍声明的,可以看到里面的artifact是通过project.name获取的,所以就避免了刚刚的问题,那么接下来的重命名也就比较简单了,直接对module重命名就可以了,在rename的时候会让你选是rename
directory还是rename module,两个一起rename吧,保险点!
3.再说下如何多module引用,创建仓库,其实这个简单,因为直接在dependencies中申明你的引用就可以,gradle会自动帮你处理,我自己尝试了创建一个sonlibrary依赖另外两个fatherlibrary,这时候如果这两个fatherlibrary也是自己写的,那么可以先上传到远程仓库,接在最后在sonlibrary中申明引用,最后再把sonlibrary上传到同一个仓库就可以了
4.最坑的放到最后说,先复原下情景,我在创建了一个测试项目后,这个测试项目是一个单独的module,然后想测试下多个module引用的情况,所以在本地改了这个测试项目,添加了依赖,并且把远程仓库的版本删了,重新将这个多依赖的测试项目发布到仓库中,提示我发布成功,由于我是在原来版本的基础上修改的,所以groupId,artifactId以及versionId这三个值都没有改变,我在另一个之前已经引用过这个测试项目的工程中rebuild,但是并没有任何反应,相信说到这已经有许多朋友都知道了,缓存。。。所以如果要测试,请及时清理AS的缓存,缓存在哪里?这个百度一下androidstudio dependecies包存放路径就可以知道了,找到路径以后,简单粗暴的把对应groupId下的缓存都删了,重新rebuild下就可以了。
那么我对AndroidStudio上传jcenter的各种坑以及解决方案就记录完毕。
这样一种引用第三方开源库的方式肯定是不陌生的,我在刚开始接触AS的时候,也是觉得这种方式比以前eclipse中拷贝jar包的方式方便多了。
刚巧前两天看见鸿洋大神写的Android 快速发布开源项目到jcenter,所以本着追逐大神脚步的心态,我也按照博文中的方式去实践了下,但是在实践过程中还是遇到了一些问题的。
先介绍些简单的东西,第一点,我从一个小白的角度先说明两个概念,一个是仓库,一个是项目或者说库工程,仓库中能够有多个项目,而对于jcenter,我把它理解为一个大型的公共仓库,整个发布的流程可以看做,你去申请一个仓库,然后向仓库中投放你自己的轮子,接着你把你仓库中的轮子注册到这个大型的公共仓库中,这样别人就可以去那个大仓库中找到你的轮子了,当然你的仓库本身其实也是可以被别人访问的
所以如果你要类似于compile ‘xxxx ’这样的方式引用一个第三方的开源库,我们需要先申明一个中心仓库地址,AS中默认已经添加jcenter的中心仓库,如果要添加别的仓库地址,只需要在项目的最外层build.gradle文件,allProject下的 repositories中添加相关的地址就行,如下
allprojects { repositories { jcenter() maven { url '仓库地址' } } }
接下来说下发布开源项目我所知道的两种方式,第一种自然就是刚介绍到的鸿洋大神博文中提到的,利用这种方式的确能够上传,但是如果项目中涉及到中文的话就不行了,会直接报中文编码的异常,对于这一点,我并不清楚解决方案,或许可以上github看下这个插件的高级用法和自定义用法,我主要是研究了下第二种方式gradle-bintray-plugin。
这种方式的话网上百度下,有许多介绍的文档,具体实现在这里介绍的也是非常详细了,建议先看下这里的详细介绍,那么说下我用这种方式遇到的一些问题:
1.涉及到中文时,这种方式可以可以在javaDoc任务中设置编码格式,如下:task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
options.encoding = 'utf-8'
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}也可以这样:
task javadoc(type: Javadoc) { source = android.sourceSets.main.java.srcDirs classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) } task javadocJar(type: Jar, dependsOn: javadoc) { classifier = 'javadoc' from javadoc.destinationDir } artifacts { archives javadocJar archives sourcesJar } //添加UTF-8编码否则注释可能JAVADOC文档可能生成不了 javadoc { options { encoding "UTF-8" charSet 'UTF-8' author true version true links "你的网址,随意" title "标题" } }这里主要看javaDoc{options{}}这里的代码即可,贴出这些代码是为了能更清晰的了解上下文环境,方便阅读。这两种方案对于中文编码的问题应该是能够完美解决的,本人亲测
2.如何声明artifactId这个字段以及重命名,如果看了刚刚贴出的网址的话,应该就比较了解了,对于compile一个开源库,必须知道三个要素,groupId,artifactId,以及versionId,类似于:compile ‘groupId:artifactId:versionId’这样的格式,这里说下artifactId要与你的module名一致,否则就会有问题,这个插件内部,貌似会将module的名字和artifactId做比较,如果不同会取module的名去你的远程仓库上创建存放路径,所以需要格外小心,一般可以用这样的方式声明//这里面所有的变量名都不能修改,否则会引用不到
ext {
bintrayRepo = 'maven'
bintrayName = '名称'
publishedGroupId = '' //jcenter上的路径,不同版本间可以修改,不建议修改,改后不同版本间引用麻烦
libraryName = bintrayName //maven库的库名称,不能修改,修改后就会重新创建一个新的maven代码仓库
artifact = project.name //项目名称,不同版本间可以修改,不建议修改
libraryDescription = '' //版本描述
libraryVersion ='' //版本号
siteUrl = '' //网站,不重要,可直接填写github地址
gitUrl = '' //git地址,不重要,可直接填写guthub地址
developerId = '' //开发者id
developerName = '' //开发者名称
developerEmail = '' //开发者邮箱
licenseName = 'The Apache Software License, Version 2.0'
licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
allLicenses = ["Apache-2.0"]
}这一段代码是根据我刚刚贴出的介绍声明的,可以看到里面的artifact是通过project.name获取的,所以就避免了刚刚的问题,那么接下来的重命名也就比较简单了,直接对module重命名就可以了,在rename的时候会让你选是rename
directory还是rename module,两个一起rename吧,保险点!
3.再说下如何多module引用,创建仓库,其实这个简单,因为直接在dependencies中申明你的引用就可以,gradle会自动帮你处理,我自己尝试了创建一个sonlibrary依赖另外两个fatherlibrary,这时候如果这两个fatherlibrary也是自己写的,那么可以先上传到远程仓库,接在最后在sonlibrary中申明引用,最后再把sonlibrary上传到同一个仓库就可以了
4.最坑的放到最后说,先复原下情景,我在创建了一个测试项目后,这个测试项目是一个单独的module,然后想测试下多个module引用的情况,所以在本地改了这个测试项目,添加了依赖,并且把远程仓库的版本删了,重新将这个多依赖的测试项目发布到仓库中,提示我发布成功,由于我是在原来版本的基础上修改的,所以groupId,artifactId以及versionId这三个值都没有改变,我在另一个之前已经引用过这个测试项目的工程中rebuild,但是并没有任何反应,相信说到这已经有许多朋友都知道了,缓存。。。所以如果要测试,请及时清理AS的缓存,缓存在哪里?这个百度一下androidstudio dependecies包存放路径就可以知道了,找到路径以后,简单粗暴的把对应groupId下的缓存都删了,重新rebuild下就可以了。
那么我对AndroidStudio上传jcenter的各种坑以及解决方案就记录完毕。
相关文章推荐
- 为Android Studio编写自定义Gradle插件的教程
- 解决Android Studio更新错误
- Adnroid Studio Gradle 多渠道打包
- AsyncTask使用
- 第二博、Android开发工具
- AndroidStudio创建TV-APP,出现Error:(28, 13) Failed to resolve: com.squareup.picasso:picasso:2.5.0 的解决
- 教你如何不翻墙就可以快速更新AndroidSDK Manager中的内容
- 如何处理空指针警告
- Android Studio汉化版安装说明
- 解决AndroidStudio导入工程报错:“Your project path contains non-ASCII characters.”
- 关于AndroidStudio的下载安装问题
- AndroidStudio 无法找到有效的JVM
- AndroidStudio中导入github的一个开源项目时出错
- Android Studio library发布JCenter编码错误_编码GBK的不可映射字符
- 将Library分享到JCenter教程
- 如何用AndroidStudio导入github项目
- Android Annotations环境搭建(Android Studio)
- AndroidStudio导入Github下载的项目问题
- AndroidStudio新建Java项目