compile'com.android.support.constraint:constraint-layout:1.0.2'
类似这样的网络依赖,相信所有的Android对此熟的不能在熟了。而这样的一段代码能让你自动下载所对应的Library并依赖,相信不少人并不清楚它的原理。下面我们来简单说说:
Android Studio是从build.gradle里面定义的Maven 仓库服务器上下载library的。Apache Maven是Apache开发的一个工具,提供了用于贡献library的文件服务器。总的来说,只有两个标准的Android library文件服务器:jcenter 和 Maven Central。
jcenter
jcenter是一个由 bintray.com维护的Maven仓库 。你可以在这里看到整个仓库的内容。
我们在项目的build.gradle 文件中如下定义仓库,就能使用jcenter了:
allprojects {
repositories {
jcenter()
}
}
Maven Central
Maven Central 则是由sonatype.org维护的Maven仓库。你可以在这里看到整个仓库。
注:不管是jcenter还是Maven Central ,两者都是Maven仓库
我们在项目的build.gradle 文件中如下定义仓库,就能使用Maven Central了:
allprojects {
repositories {
mavenCentral()
}
}
虽然jcenter和Maven Central 都是标准的 android library仓库,但是它们维护在完全不同的服务器上,由不同的人提供内容,两者之间毫无关系。当前最新版的Android Studio默认使用的事jcenter,理由是:
1 jcenter通过CDN发送library,开发者可以享受到更快的下载体验。
2 jcenter是全世界最大的Java仓库,因此在Maven Central 上有的,在jcenter上也极有可能有。
3 友好的用户界面和简单易操作的上传步骤
这是我们常用的仓库,另外还有其他类型的仓库,这里我们暂时不做详解了。
下面我们再了解下自己动手上传Library到bintray的步骤。关于这个,有很多大神已经分享过,这里我仅结合自己上传的经验和各位大神的经验,尽力清晰的理出它们的步骤。
第一部分:在bintray上创建package
首先,你需要在bintray上创建一个package。为此,你需要一个bintray账号,并在网站上创建一个package。
第一步:在bintray.com上注册一个账号。(注册过程很简单,自己完成)
第二步:完成注册之后,登录网站,然后点击maven。
第三步:点击Add New Package,为我们的library创建一个新的package。
第四步:输入所有需要的信息
虽然如何命名包名没有什么限定,但是也有一定规范。所有字母应该为小写,单词之间用-分割,比如,fb-like。
当每项都填完之后,点击Create Package。
第五步:网页将引导你到 Package编辑页面。点击 Edit Package文字下的Package名字,进入Package详情界面。
完工!现在你有了自己在Bintray上的Maven仓库,可以准备上传library到上面了。
Bintray账户的注册就完成了。下一步是Sonatype,Maven Central 的提供者。
第二部分:准备一个Library,并填写一些配置信息
library的的创建过程,我便跳过了。
下一步是把bintray插件应用在项目中。我们需要修改项目的build.gradle(就是根目录的build.gradle,app下的build.gradle是module的build.gradle,一定分清楚)文件中的依赖部分,如下:
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2' //自动化maven打包插件
classpath 'com.github.dcendents:android-maven-plugin:1.2' //自动上传至Bintray平台插件
}
接下来在module的build.gradle的中添加以下代码
applyplugin:'com.github.dcendents.android-maven'
applyplugin:'com.jfrog.bintray'
// This generates POM.xml with proper parameters
install {
repositories.mavenInstaller {
pom {
project {
licenses {
license {
name 'The Apache Software License, Version 2.0'
url'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id developerId //通常是你在开源社区的昵称
name developerName //你的姓名
email developerEmail //你的邮箱
}
}
scm {
connection projectGitUrl //项目的Git地址,例如:https://github.com/xiaopansky/Sketch.git
developerConnection projectGitUrl //项目的Git地址,例如:https://github.com/xiaopansky/Sketch.git
url projectSiteUrl //项目官方网站的地址,没有的话就用Github上的地址,例如:https://github.com/xiaopansky/Sketch
}
}
}
}
}
// This generates sources.jar
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier ='sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath +=project.files(android.getBootClasspath().join(File.pathSeparator))
}
// This generates javadoc.jar
task javadocJar(type: Jar,dependsOn: javadoc) {
classifier ='javadoc'
from javadoc.destinationDir
}
artifacts {
archivesjavadocJar
archivessourcesJar
}
// javadoc configuration
javadoc {
options{
encoding"UTF-8"
charSet'UTF-8'
authortrue
version projectVersionName //项目版本号
links"http://docs.oracle.com/javase/7/docs/api"
title javadocName //生成的javadoc打开后主页显示的名称,通常跟项目名称一样即可
}
}
// bintray configuration
bintray {
user = bintrayUser //你的Bintray的用户名
key = bintrayApikey //你的的Bintray的API Key
configurations = ['archives']
pkg {
repo ="maven" //在bintray上的repository的名称,一般默认为"maven"
name = projectName //项目名称
websiteUrl = projectSiteUrl //项目名称项目官方网站的地址,没有的话就用Github上的地址,例如:https://github.com/xiaopansky/Sketch
vcsUrl = projectGitUrl //项目的Git地址,例如:https://github.com/xiaopansky/Sketch.git
licenses = ["Apache-2.0"]
publish =true
}
}
以上是配置信息,也可以通过创建类似bintrayKey.properties和bintrayProject.properties的文件设置配置信息,效果一样。不过更方便修改信息和数据安全。所以推荐使用。很简单,这里暂不做详细概述,以后有时间再补充。不会的同学可以参考大神的博客https://www.jianshu.com/p/0e7b8e14f0cd。
第三部分: 把library上传到你的bintray
gradlew install(也可在工具右侧寻找)一定要先install 否则会报错
gradlew bintrayUpload
install的过程可能会出现一些报错信息,比如
,如果不影响install BUILD SUCCESSFUL就不用管它。
有些时候可能会影响到build过程导致erro,可以把support仓库卸载了,再重新安装一次。
bintrayUpload的过程可能会出现一些报错信息
Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting): ‘路径’
错误: 编码GBK的不可映射字符 ——注释不要用中文,或者修改项目的字符编码
错误: 找不到符号——删除javadoc里所有的html标签
Could not create package ‘路径’: HTTP/1.1 401 Unauthorized [message:This resource requires authentication]
你一定是用户名或者APIKey填错了。
修改完错误上传成功之后,就可以方便的使用compile了。以上。
-bash: ./gradlew: Permission denied
执行命令的权限不够,先执行如下命令赋予权限:
chmod +x gradlew 回车执行后,再执行上传jcenter命令就可以了。
Execution failed for task ':core:lint'.
> Lint found errors in the project; aborting build.
在上传过程中执行了lint检查,所以可能会报上面的错误。解决方法就是避免lint的检查,在每个module的gradle下面就要添加如下配置:
android {
lintOptions {
abortOnError false
}
}
:Execution failed for task ':core:mavenAndroidJavadocs'.
> Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting): '/Users/zhou/git/app/core/build/tmp/mavenAndroidJavadocs/javadoc.options'
在上传过程中执行了javadoc检查,所以可能会报上面的错误。解决方法就是避免javadoc的检查,在项目根目录下的gradle下面就要添加如下配置:
allprojects {
repositories {
jcenter()
}
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
}
}
第六部分:同步bintray用户仓库到jcenter
把library同步到jcenter非常容易。只需访问网页并点击Add to JCenter
什么也不做直接点击Send。
等待bintray团队审核我们的请求,大概2-3个小时。一旦同步的请求审核通过,你会收到一封确认此更改的邮件。现在我们去网页上确认,你会在 Linked To 部分看到一些变化。