最近在负责公司内部的Android IM SDK开发,由于需要提供SDK给其他部门的项目使用,故打算将写好的IM SDK上传到Jfrog artifactory仓库,下面记录Jfrog的安装以及上传Android Library到该仓库的步骤。
安装Jfrog关于Jfrog是个啥,这里不做过多的记录,可以理解为它是一个类似maven或jcenter的仓库,可以在其中存放各种类型的文件,是一个强大的通用包管理平台,国内可以直接通过这个地址访问:https://www.jfrogchina.com/查看更多信息。
我是在Ubuntu上使用docker安装的该系统,如果还没有安装docker,可以先搜索安装,下面是在docker下安装Jfrog的步骤:
拉取Jfrog镜像docker pull docker.bintray.io/jfrog/artifactory-oss
使用上面的命令可以拉取Jfrog的docker镜像
启动Jfrog服务docker run --name jfrog-oss -d \
-p 8081:8081 -p 8082:8082 \
-v /data01/jfrog_dir/var/:/var \
docker.bintray.io/jfrog/artifactory-oss
使用上面的命令可以启动Jfrog服务,如果提示端口被占用,请自行更换端口
访问Jfrog控制台上面一步完成后,如果没有任何错误,即可通过http://localhost:8082/artifactory
在浏览器中访问Jfrog控制台。
注意上一步之行完毕后,可能需要等待一会儿才能在浏览器中通过前面的地址访问到Jfrog,如果你访问这个地址提示404或者一时无法打开,请稍等一会儿再试
这个系统的默认账号密码是admin / password,登录后最好修改默认密码。
配置Jfrog安装完毕后,我们需要配置Jfrog,由于我们主要用Jfrog来存放Android库,故直接在后台创建一个maven仓库即可,如下图所示:
这里我直接创建了一个名为android-local
的仓库。
要将Android Library以aar包的形式上传到Jfrog上,需要给Android项目做一些配置,主要是如下几点:
- 在Android项目根目录下的
build.gradle
中添加如下插件配置:
buildscript {
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath("com.android.tools.build:gradle:4.2.2")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
// 添加下面一行
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.15.2"
}
}
- 在需要上传的Android Module目录下的
build.gradle
文件中添加如下配置
apply plugin: 'com.jfrog.artifactory'
apply plugin: 'maven-publish'
// jfrog地址,配置为上一步中在浏览器中访问的地址即可
def MAVEN_ARTIFACTORY_URL = "http://192.168.1.2:8082/artifactory"
// group_id,自行配置即可
def GROUP_ID = "com.test.mylib"
// artifact_id,自行配置即可
def ARTIFACT_ID = "sdk"
// 上传到Jfrog仓库的lib的版本号,自行配置即可
def VERSION_NAME = "1.0.3"
publishing {
publications {
aar(MavenPublication) {
groupId = GROUP_ID
artifactId = ARTIFACT_ID
version = VERSION_NAME
artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
pom.withXml {
def dependencies = asNode().appendNode("dependencies")
configurations.implementation.allDependencies.each {
def dependency = dependencies.appendNode("dependency")
println("groupId == ${it.group}, artifactId == ${it.name}, version == ${it.version}")
dependency.appendNode("groupId", it.group)
dependency.appendNode("artifactId", it.name)
dependency.appendNode("version", it.version)
}
}
}
}
}
// 自定义task,在上传前执行clean和assembleRelease命令生成aar包
task beforePublish {
dependsOn("clean")
finalizedBy("assembleRelease")
}
artifactoryPublish {
// 依赖上面的自定义task
dependsOn("beforePublish")
contextUrl = MAVEN_ARTIFACTORY_URL
publications(publishing.publications.aar)
// 下面的配置根据你自己的Jfrog配置来
clientConfig.publisher.repoKey = "android-local"
clientConfig.publisher.username = "admin"
clientConfig.publisher.password = "password"
}
- 执行命令上传aar包到Jfrog
这一步有两种方式执行,一种是直接在Android Studio中,通过双击Gradle视图中的菜单完成,如下所示:
另一种是直接在命令行下执行./gradlew im:artifactoryPublish
我这里Android Library的名字是im
,你们上传时需要自行更改为你们的lib名称。
如果上面的上传没有任何问题,可以在Jfrog后台看到上传的文件,如下图所示:
这里我上传了三个不同的版本,每个文件夹下都是一个aar文件和一个pom文件,其中pom文件记录了这个aar文件中依赖的一些其他库的名称和版本信息。
我们将代码打包成aar文件并上传到Jfrog的目的,就是为了让别的项目更方便的依赖,要在别的Android项目中依赖Jfrog上的库,方法也很简单,主要步骤如下:
- 在Android项目的根目录下的
build.gradle
文件中加入如下配置
allprojects {
repositories {
...
// 添加下面的配置
maven {
// 注意这里的地址为Jfrog访问地址+仓库名称(我这里的android-local为上面创建的maven仓库名称)
url 'http://192.168.1.2:8082/artifactory/android-local/'
}
}
}
- 在需要引用上面上传的lib的module目录下的
build.gradle
中,添加依赖项
implementation 'com.test.mylib:sdk:11.0.0'
注意这里的依赖项为你上传时配置的几项拼起来的:GROUP_ID:ARTIFACT_ID:VERSION_NAME
然后Sync项目,就可以正确依赖Jfrog仓库里的lib了~
参考https://jfrog.com/knowledge-base/how-to-publish-build-info-and-artifacts-from-a-gradle-android-project-into-artifactory/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)