背景介绍
为熟悉Kotlin以提高生产力,特用Kotlin重写了一个内部Java库中的WiFi管理部分,并独立成WifiConnectivityManager库发布出来。本文主要记录使用Novoda发布该库的过程,以及中间遇到的一些坑。若对读者有一定的参考和借鉴价值,也将倍感欣慰。
为使整个过程详实可鉴,会辅以较多的截图,且每张图的内容也经过仔细筛选,读者可视个人情况选择精读或泛读。另外,注意到Bintray网站正处于beta测试期间,所以相应截图可能与最新网页界面有所不同,望知悉。
环境配置
- Android Studio (AS) v4.1
- Gradle Wrapper (
v6.1.1-> v5.6.4) - Android Gradle Plugin (AGP)(
v4.1.1-> v3.6.2) - Nodova Bintray Release v0.9.2
注:截至本文写作时(11/12/2020)Nodova官方尚不支持Gradle v6+和AGP v4.0+以上版本。例如,使用Gradle v6.1.1和AGP v4.1.1,在执行发布命令
gradlew clean build bintrayUpload
时遇到了LazyConfigurationUsageContext错误,作为临时解决方案,将Gradle和Android Gradle Plugin版本分别降低到了v5.6.4和v3.6.2。
申请账号
JFrog Bintray作为领先的软件发布服务平台,提供了通用、安全和开放的软件自动发布服务,而Novoda的Bintray-release则是专为Android项目构建(artifacts)发布而服务。所以,如果没有JFrog Bintray账号的话首先需要申请并激活账号,当然也可以使用如Github,Google等第三方账号授权登陆。
填写账号信息并创建试用账号(30天)。
Company Name:aila
Organization ID: aila (默认同company name)
First Name: Neil
Last Name: Ling
User Name: niling
Password: *********
Email Address: ggnodes2018@gmail
Select Country: China
检查并激活账号,重新登陆后可以看到组织(org:aila)管理界面,如下所示:
注:生成的账号地址格式为:https://bintray.com/{orgName},如刚新建的组织对应的地址为https://bintray.com/aila。若创建账号时无有效的组织id,则默认为用户名,即https://bintray.com/nilling。因build.gradle文件中Nodova相关的publish配置中需要指明
userOrg
,特此说明,否则容易引起误解。
创建库名和包名
库
(Repository)和包
(Package)是Bintray中用于管理构建
(Artifact)的两个逻辑组织单元,类似于Java中的Package name和Class name, 使得通过maven URL即可查找到对应的构建
。例如,我们的构建
(WifiConnectivityManager)最终对应的maven URL为maven { url 'https://dl.bintray.com/aila/tools' }
,其中aila
为组织名(userOrg), tools
为库名(repoName)。如果配合依赖声明
implementation 'com.nling.tools:wificonnectivitymanager:0.0.1'
Gradle则可以从maven库中查找到我们发布的构建
,查找顺序依次为:
-
域
名:dl.bintray.com -
组织
名(userOrg):aila -
库
名(repoName):tools -
组
名(groupId):com.nling.tools -
构建
名(artifactId):wificonnectivitymanager -
版本
号(publishVersion):0.0.1
本小结主要介绍如何创建库和包。
在管理界面点击【Add New Repository】,进入新建库
界面,库名为tools, 类别为Maven。
进入新建的名为tools的Repository的详情页面,点击【Add New Package】创建新的包。
Name: wificonnectivitymanager
License: Apache-2.0
创建成功的package界面显示如下(beta版)
至此,发布所需的所有准备工作就完成了。
GroupId和Artifact version在哪里指定?在build.gradle配置文件中!
集成Novoda并发布
依照Novoda的README,修改库所在build.gradle文件,完成nodova集成。
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.novoda.bintray-release' // 2
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.novoda:bintray-release:0.9.2' // 1
}
}
publish { // 3
userOrg = 'aila' // 4
repoName = 'tools' //5
groupId = 'com.nling.tools' // 6
artifactId = 'wificonnectivitymanager' // 7
publishVersion = '0.0.1' // 8
desc = 'This repository aims to provide an uniform interface for apps to connect to a specific Wi-Fi network, without having to care about what the OS version the app is running on or is targeting to. Internally, it handles the details when it comes to connecting to or disconnecting from a Wi-Fi network, and of course, it behaves differently on different OS platform.'
website = 'https://github.com/lingxuxiong/WifiConnectivityManager'
// bintrayUser = 'nling' // 9
// bintrayKey = 'xxxxx' // 10
}
- 添加nodova依赖。
- 应用novoda插件,该声明需要在
apply plugin: 'com.android.library'
之后。 - 添加publish相关的配置信息。
- userOrg为新建账户时的组织名,如果没指定的话默认为用户名。
- repoName为新建的库名
- groupId为构建所属组,可自由指定,无冲突即可。
- artifactId为新建的包名。
- publishVersion为构建版本号,升级新版本时需相应增加次字段的值。
- bintrayUser为新建账户时的userName。
-
bintrayKey为apiKey,可在organization的详情界面查看。
Screen Shot 2020-11-12 at 1.50.13 PM.png
编译和发布
./gradlew clean build bintrayUpload -PbintrayUser=niling -PbintrayKey=**************************************************** -PdryRun=false
若编译或上传失败,则会给出相应错误信息。
引用发布库
刚才构建只是发布到了Maven,可点击【Link to JCenter】进一步链接到JCenter。该过程需要等待审批,若审批通过则可以直接引用:
implementation 'com.nling.tools:wificonnectivitymanager:0.0.1'
否则需要指定其所在的maven库地址:
allprojects {
repositories {
google()
jcenter()
maven { url 'https://dl.bintray.com/aila/tools' }
}
}
其中aila和tools分别对应组织名和库名。
⚠️ 已链接到JCenter的库,以后每次新版本发布均无需申请,新版本可直接更新到JCenter。
总结
总的来说,使用Nodova发布library的过程非常简单,只需简单的几步配置即可。对初学者来说,难点是如何在JFrog Bintray中配置相关的库名和包名,并将相关信息与nodova配置关联起来。笔者就因为一个简单的配置错误而抓疯(pull my hairs out)了快一天。
参考文档
- Anitaa Murthy. 6-easy-steps-to-upload-your-android-library-to-bintray-jcente, 05/26/2018, 11/11/2020.
- 编码前线. 使用bintray-release快速发布库到JCenter.08/25/2018, 11/11/2020