最近工作上開始涉獵 SDK 開發(fā)的領(lǐng)域。
這段時(shí)間工作下來的感受就是,SDK 開發(fā)實(shí)際上就是開發(fā)開源軟件。
以前做 App 是為用戶寫代碼,現(xiàn)在做 SDK 是為程序員寫代碼,其實(shí)都是大同小異。
但是畢竟隔行如隔山,很多東西都是以前沒有接觸過的,踩坑的過程里也積累了些經(jīng)驗(yàn)。
簡單記錄一些,希望能夠幫到不論誰吧。
這次先簡單說說 bintray 托管。
注意點(diǎn)
關(guān)于 bintray 具體使用網(wǎng)上很多文章,具體的注冊(cè)流程我就不贅述了。就算是不看文章,自己上官網(wǎng)也能鼓搗個(gè)七七八八。
挑著撿著說說集成時(shí)候關(guān)于配置的注意點(diǎn)。
首先說,不管使用傳統(tǒng)的集成方式還是使用第三方工具,都需要配置大量的 gradle 信息。
我不太習(xí)慣在 app.gradle 文件里添加大量代碼,所以都會(huì)先抽離到 bintrayConfig.gradle 文件中,然后在 app.gradle 中添加依賴,這里先給大家說明一下。
傳統(tǒng)方式配置
1、在 project 的 gradle 文件中添加:
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
2、之后在你想要發(fā)布的 module 的 gradle 文件中添加:
apply from: 'bintrayConfig.gradle'
3、然后創(chuàng)建這個(gè) bintrayConfig.gradle 文件:
// 需要添加的依賴
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
version = "1.0.0" //這個(gè)是版本號(hào),必須填寫
def siteUrl = 'https://github.com/YourGitHubId/Repo' // 項(xiàng)目的主頁
def gitUrl = 'https://github.com/YourGitHubId/Repo.git' // Git倉庫的url
group = "你的包名" // 這里是groupId ,必須填寫 一般填你唯一的包名
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
// 項(xiàng)目描述,復(fù)制我的話,這里需要修改。
name '測(cè)試 bintary 搭配 maven 上傳' //項(xiàng)目描述
url siteUrl
// 軟件開源協(xié)議,現(xiàn)在一般都是Apache License2.0吧,復(fù)制我的,這里不需要修改。
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
//填寫開發(fā)者基本信息,應(yīng)該不是必填
developers {
developer {
id ''
name ''
email ''
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
// 生成jar包的task,不需要修改。
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
// 生成javaDoc的jar,不需要修改
task javadoc(type: Javadoc) {
options.encoding = "UTF-8"
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
}
//下面設(shè)置編碼格式,重點(diǎn)注意,如果不設(shè)置可能會(huì)在gradlew install的時(shí)候出現(xiàn)GBK編碼映射錯(cuò)誤
javadoc {
options {
encoding "UTF-8"
charSet 'UTF-8'
author true
version true
links "http://docs.oracle.com/javase/7/docs/api"
title '這里是 javadoc 的標(biāo)題,按需修改'
}
}
artifacts {
archives sourcesJar
}
// 生成jar包
task releaseJar(type: Copy) {
from( 'build/intermediates/bundles/release')
into( '../jar')
include('classes.jar')
rename('classes.jar', 'test-sdk-' + version + '.jar')
}
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
//從 local.properties 讀取用戶名和秘鑰
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apiKey")
configurations = ['archives']
pkg {
userOrg = "你的 bintray 組織信息"
repo = "你在 bintray 創(chuàng)建的倉庫名稱"
name = "發(fā)布到 bintray 后的文件名稱"
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true // 是否是公開項(xiàng)目
}
}
用戶名不說了,秘鑰的獲取方式是:用戶名 -> 編輯資料 -> API KEY
4、完成以后在終端執(zhí)行:
./gradlew install
install 是上邊 bintray.gradle 里邊配置的方法,如果報(bào)找不到,就看看有沒有配置好
5、成功之后就會(huì)在 build/output 下看到 arr 文件,再執(zhí)行:
./gradlew bintrayUpload
搞定。
使用 bintray-release
這個(gè)是 GitHub 上一個(gè)開源庫,本來挺火的,配置簡單。
但是升級(jí)到 gradle tools 3.1.X, gradle version 4.6+ 后, novoda/bintray-release有個(gè)嚴(yán)重 bug,導(dǎo)致上傳失敗。
com.novoda.gradle.release.AndroidLibrary$LibraryUsage.getGlobalExcludes()Ljava/util/Set #216。
網(wǎng)上很多人說用降低 gradle 版本到 version 4.4,或者其他各種方式,但我怎么都搞不好。
好在找到了另一個(gè)方案,親測(cè)可行,測(cè)試版本 gradle tools 3.6.1,gradle version 5.6.4。
下邊簡單記錄一下。
1、project 的 gradle 下添加:
buildscript {
repositories {
jcenter()
google()
}
dependencies {
// The current version can be found here https://git.io/fNUnx
classpath "guru.stefma.bintrayrelease:bintrayrelease:$bintrayReleaseVersion"
}
}
2、之后在你想要發(fā)布的 module 的 gradle 文件中添加:
apply from: 'bintrayConfig.gradle'
3、同樣的,創(chuàng)建這個(gè) bintrayConfig.gradle 文件:
// 這里有前置依賴,可以是下面幾個(gè)的其中一個(gè),我們是在 library 庫里引用的,所以沒有問題
// com.android.library, java-library, org.jetbrains.kotlin.jvm, kotlin
apply plugin: "guru.stefma.bintrayrelease"
version = "1.0.5"
group = "一般是包名"
androidArtifact {
artifactId = "別人添加你這個(gè)項(xiàng)目依賴的時(shí)候看到的名字"
}
publish {
userOrg = '你的 bintray 用戶名'
repoName = '上傳的 bintray 以后的名字'
desc = 'this is a simple description'
website = 'https://github.com/YourGithubID/Repo'
}
那個(gè) group 和 artifactId 我看了好多資料也沒搞明白,最后自己試了幾次才明白的:
implementation 'group:artifactId:version' // 是這個(gè)結(jié)構(gòu)的
// 比如下邊這個(gè)
// 發(fā)布的時(shí)候 group 就是 androidx.core,artifactId 是 core-ktx,version 是 1.2.0
implementation 'androidx.core:core-ktx:1.2.0'
4、配置完成以后,在終端執(zhí)行:
./gradlew clean build bintrayUpload -PbintrayUser=BINTRAY_USERNAME -PbintrayKey=BINTRAY_KEY -PdryRun=false
引入到項(xiàng)目中
如果想直接在 gradle 引用,不做其他配置的話,你的賬號(hào)應(yīng)該需要是企業(yè)賬號(hào)。
在你第一次上傳完成后,需要 add to JCenter 提交審核,像這樣:
[站外圖片上傳中...(image-4fc8bf-1584791702981)]
過幾個(gè)小時(shí),通過 jcenter 那邊的審核就會(huì)在 bintray 上收到 jcenter 那邊的同意消息提醒。
然后就可以直接引用了。
如果沒有提交到 jcenter 的話,那就需要在 project 的 gradle 下添加 maven 依賴:
maven { url 'https://你的用戶名.bintray.com/你的 repo 目錄' }
之后再去 module 的 gradle 里邊添加依賴,應(yīng)該就沒有問題啦。
大概就這些內(nèi)容,最后祝大家少出 bug 吧,哈哈。
最后給自己打個(gè)廣告。
不寫代碼的時(shí)候我偶爾寫寫公眾號(hào),「談?wù)務(wù)勫X」,那兒是個(gè)完全不一樣的世界。
歡迎你來看看我,比心~~