日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

android studio islibrary,通过AndroidStudio发布Android Library到Jcenter[超详细]

發布時間:2023/11/27 生活经验 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android studio islibrary,通过AndroidStudio发布Android Library到Jcenter[超详细] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章很長

如果已經對jcenter,maven有了一些概念,可以直接看我的另外一篇精簡文章:

快速發布Abdroid Library到JCenter[精簡]

開始之前先明白幾個概念

maven

Maven是基于項目對象模型(POM project object model),可以通過一小段描述信息(配置)來管理項目的構建,報告和文檔的軟件項目管理工具

換句話說,Maven是通過pom.xml文件的配置獲取jar包的,從而省去了手動拷貝jar包到project的麻煩。

gradle

Gradle是一個基于Apache Ant和Apache Maven概念的項目自動化建構工具。它使用一種基于Groovy的特定領域語言來聲明項目設置,而不是傳統的XML

翻譯一下,gradle是通過Groovy語法,獲取library,對Android來說不用自己拷貝jar或者aar了。

從哪里獲取?

上面說的maven和gradle都是通過配置,然后自動獲取,那么問題來了:從哪里獲取?答案:代碼倉庫

就Android開發來說,目前兩個比較著名的倉庫是 mavenCentral和jcenter

mavenCentral和jcenter

mavenCentral被稱為maven的權威中央倉庫,但是上傳library極其復雜繁瑣,這也是被google換掉的原因之一;

其實從名字上看,mavenCentral有點讓人困惑,會讓人感覺這個倉庫只支持maven的配置方式。

其實,無論是mavenCentral還是jcenter都支持maven和gradle的配置方式。

jcenter托管在 https://bintray.com ,也可以說是這個網站在維護管理jcenter倉庫;

mavenCentral()被google默認替換成jcenter()

在Android Studio早期版本中,如果我們創建一個Project,給我們的默認repository是mavenCentral():

buildscript {

repositories {

mavenCentral() //現在已經被替換成了jcenter()

}

}

.

.

.

allprojects {

repositories {

mavenCentral() //現在已經被替換成了jcenter()

}

}

之后我們就可以用簡單的配置,來使用library了:

implementation 'com.google.code.gson:gson:2.8.5'

正式開始

如果你讀完上面的文字,我想你已經明白了,我們為什么選擇上傳到jcener了:Android Studio現在默認的配置的是jcenter,原因是mavenCentral上傳過程太復雜。

注冊bintray.com帳號

由于jcenter是托管在bintray.com上的,因此我們只要有bintray的帳號,就可以管理我們自己上傳的library了。

注冊這一步就不說了,沒什么特別的,按照要求填寫就行了。

1:添加一個新的Repository,當然如果你不想添加,bintray默認會有一個名字是maven的Repository(不想添加可跳過次步驟)

image.png

填寫相關信息:

image.png

2:在Repository中添加一個Package

image.png

image.png

image.png

3:獲取bintray.user和bintray.apikey,下面使用插件上傳要用到

bintray.user 就是你注冊時候填寫的用戶名,這沒什么好說的。

下面主要說一下如何獲取bintray.apikey:

image.png

image.png

image.png

image.png

到此,我們bintray上的配置就完全結束了:

4:編寫要上傳的Library的代碼

使用Android Studio創建一個工程,這個工程其實的作用是為了上傳和測試你自己要上傳的Library。

image.png

圖中的asyncokhttp其實就是一個module(Android Library),這個庫其實就是封裝了一下okhttp3,讓其能在主線程直接調用網絡請求。

看一下asyncokhttp的依賴:

dependencies {

implementation fileTree(dir: 'libs', include: ['*.jar'])

// 省略了一些不重要的信息

//這里依賴okhttp3

implementation 'com.squareup.okhttp3:okhttp:3.12.0'

}

5:使用插件開始上傳

在編寫測試完畢你的代碼之后,我們就可以使用插件開始上傳你的庫了

這里用到的插件一共有兩個:

1:maven插件,主要用來幫助生成和打包maven所需要上傳的文件

apply plugin: 'com.github.dcendents.android-maven'

2:bintray插件,主要用來打包和上傳庫到bintray網站

apply plugin: 'com.jfrog.bintray'

在Project的build.gradle(根目錄)中添加:

buildscript {

repositories {

google()

jcenter()

}

dependencies {

classpath 'com.android.tools.build:gradle:3.3.1'

// NOTE: Do not place your application dependencies here; they belong

// in the individual module build.gradle files

// 下面兩行是新添加的

classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'

classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'

}

}

在Project的的local.properties中添加上面獲取到的bintray.user 和bintray.apikey

image.png

在Moudle的目錄下創建3個文件:

image.png

1:android-maven-install.grdle主要是使用apply plugin: 'com.github.dcendents.android-maven'插件,完成maven相關文件的生成與打包。

內容:

apply plugin: 'com.github.dcendents.android-maven'

install {

repositories.mavenInstaller {

// This generates POM.xml with proper parameters

pom {

project {

packaging libraryPackaging

groupId publishedGroupId

artifactId artifact

// Add your description here

name libraryName

description libraryDesc

url websiteUrl

// Set your license

licenses {

license {

name licenseName

url licenseUrl

}

}

developers {

developer {

id developerId

name developerName

email developerEmail

}

}

scm {

connection websiteUrl

developerConnection websiteUrl

url websiteUrl

}

}

}

}

}

2:android-tasks.gradle主要是生成javadoc.jar和sorce.jar:

task javadoc(type: Javadoc) {

options.encoding = "utf-8"

source = android.sourceSets.main.java.srcDirs

classpath += files(android.bootClasspath)

options {

//links "http://docs.oracle.com/javase/7/docs/api/"

linksOffline "https://developer.android.com/reference","${android.sdkDirectory}/docs/reference"

encoding = "UTF-8"

}

exclude '**/BuildConfig.java'

exclude '**/R.java'

android.libraryVariants.all { variant ->

variant.javaCompileProvider.configure{

javadoc.classpath += files(it.classpath.files)

}

}

}

task sourcesJar(type: Jar) {

from android.sourceSets.main.java.srcDirs

classifier = 'sources'

}

task javadocJar(type: Jar, dependsOn: javadoc) {

classifier = 'javadoc'

from javadoc.destinationDir

}

artifacts {

archives javadocJar

archives sourcesJar

}

3:bintray.gradle主要是用apply plugin: 'com.jfrog.bintray'完成文件的打包上傳到bintray.com

內容:

apply plugin: 'com.jfrog.bintray'

configurations {

optional

compile.extendsFrom optional

}

def siteUrl = project.websiteUrl

def gitUrl = project.vcsUrl

def libName = project.name

group = project.publishedGroupId

version = project.versionName

Properties properties = new Properties()

properties.load(project.rootProject.file('local.properties').newDataInputStream())

bintray {

user = properties.getProperty("bintray.user")

key = properties.getProperty("bintray.apikey")

configurations = ['archives']

pkg {

repo = project.bintrayRepo //發布到Bintray的maven庫

name = libName //發布到Bintray上的項目名字

desc = project.libraryDesc

override = true

publish = true

publicDownloadNumbers = true

websiteUrl = siteUrl

issueTrackerUrl = project.issueTrackerUrl

vcsUrl = gitUrl

licenses = [project.licenseName]

publish = true

//attributes = ['gradle-plugin': 'com.use.less:com.use.less.gradle:gradle-useless-plugin']

version {

desc = project.libraryVersionDesc

released = new Date()

gpg {

sign = true //Determines whether to GPG sign the files. The default is false

passphrase = properties.getProperty("bintray.gpg.password")

//Optional. The passphrase for GPG signing'

}

}

}

}

6:配置Library的相關信息

在module的build.gradle的最后添加:

ext {

libraryPackaging = 'aar' //上傳aar形式的打包文件

// jcenter

bintrayRepo = "network" // 你上傳的位于bintray中的Repository名稱,如果沒有創建會有一個叫maven的

name = 'asyncokhttp' // 必須和library module的名字相同

libraryDesc = 'A OkHttp Library'

publishedGroupId = 'org.zarroboogs.http.asyncokhttp' // 填寫groupId, 一般是包名,比如:com.android.support

versionName = '1.0.1' // 版本號,比如:22.2.1

websiteUrl = 'https://github.com/andforce/AsyncOkHttp' // 可以填寫github上的庫地址.

issueTrackerUrl = 'https://github.com/andforce/AsyncOkHttp/issues' // 可以填寫github庫的issue地址.

vcsUrl = 'https://github.com/andforce/AsyncOkHttp.git' // 可以填寫github上庫的地址.

licenseName = "Apache-2.0"

libraryVersionDesc = 'version descriotion'

// maven

artifact = 'asyncokhttp' // 必須和library module的名字相同

libraryName = 'asyncokhttp'

developerId = 'anforce'

developerName = 'andforce'

developerEmail = '86118@163.com'

licenseName = 'The Apache Software License, Version 2.0'

licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'

}

apply from: 'android-maven-install.gradle'

apply from: 'android-tasks.gradle'

apply from: 'bintray.gradle'

7:運行命令上傳發布的你的Library

在Project的根目錄:

#編譯

./gradlew install

#上傳

./gradlw bintrayUpload

8:手動提交到jcenter

在運行上面的命令之后,我們就可以在bintray的Repo中看到剛剛上傳的Library 了。

image.png

但是這個時候,還沒有正式發布到jcenter,我需要用手主動提交一下:

image.png

點擊Add to JCenter之后,會有一個審核時間,大約24小時后,就可以在JCenter上看到了。

簡化

從上面教程我們可以看到,每次都需要創建和引用3個文件,還是挺麻煩的。

apply from: 'android-maven-install.gradle'

apply from: 'android-tasks.gradle'

apply from: 'bintray.gradle'

為了引用方便,可以把上面三個gradle內容放到一個文件中,這樣引用一行,效果和上面引用3個文件是一樣的

//apply from: 'android-maven-install.gradle

//apply from: 'android-tasks.gradle'

///apply from: 'bintray.gradle'

apply from: 'jcenter.gradle'

這樣每次創建一個文件就好了。

apply from: 'https://raw.githubusercontent.com/andforce/release-android-lib-to-jcenter/master/jcenter.gradle'

最后,之前編譯和上傳的命令,也可以合并成一個了:

#編譯

#./gradlew install

#上傳

#./gradlw bintrayUpload

# 上面的合并成一條

./gradlew jcenter

應用實例

總結

以上是生活随笔為你收集整理的android studio islibrary,通过AndroidStudio发布Android Library到Jcenter[超详细]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。