編輯:關於Android編程
這段時間研究了下以前做app開發的時候並沒有太過關注的JCenter倉庫,在實際開發當中通常都是使用第三方開發者上傳到jcenter的library,而我們使用的這些library或者plugin是怎麼發布到JCenter並讓我使用的? 如果我們想開發一個Library或者plugin,我們該怎麼做?帶著這些問題,我圍繞它做了以下實踐:
Android Library上傳到JCenter倉庫實踐 Gradle插件開發實踐-上傳apk文件到Bugly我會分別以兩篇博客來分享一下我的實踐過程,本篇是入門篇,主要是要告訴大家如何創建一個Android Library並上傳到JCenter,很簡單,相信你看了這篇文章之後以後想發布一個開源庫給廣大開發者用不再是問題。
JCenter是什麼?
jcenter是一個由 bintray.com維護的Maven倉庫。一般我們會這樣定義使用的倉庫:
repositories {
jcenter()
}
Maven倉庫又是什麼?
你可以理解為存放我們Library的文件服務器。
我們在使用一些開源庫的時候,可能會看到在項目根目錄下的build.gradle有如下配置:
allprojects {
repositories {
mavenCentral()
}
}
mavenCentral又是什麼?
我好亂啊,我不想說話。但你還是帶著疑問去Google了,能搜索到的問題我們不問好嗎?
好吧,直接說答案。mavenCentral跟jcenter一樣,都是maven倉庫,只是存放的地方不一樣,不用猜了,它們半毛錢關系都沒有,有一段時間Android的默認倉庫是mavenCentral,但後來由於它對開發者不太友好,就把默認倉庫換成了jcenter。
你要想在bintray上發布自己的Library就必須有一個創建一個賬號,這裡建議直接使用github賬號授權登錄,這樣以後你開源的倉庫可以在github找到相應的源碼,如果你不想公開的話就另外創建一個賬號了。
登錄成功之後,你就可以在bintray看到一些著名的倉庫,比如我們開發者經常使用的homebrew。
這裡示例創建一個myutils的包,如下圖所示:
ok,這個時候你創建好了package,後面就可以准備我們開發好的Library,然後上傳到maven倉庫,繼續耐心看下面的步驟。
新建一個android project,然後new 一個module,選擇android library,項目結構如下:
這裡我只是為了演示,創建了一個簡單的類:
如果想通過bintrayUpload命令上傳library就必須引用相應的插件,配置如下:
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:latest.release'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
}
然後在我們的Library工程的build.gradle引用插件,如下所示:
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
其中com.android.library是android的插件,表示它是一個android library。
應用成功後,你會看到插件生成的task,如下圖所示:
通過這個task,我們可以將我們的library上傳到maven倉庫當中,現在還不行,我們還得繼續完成我們的配置。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMSBpZD0="buildgradle配置">build.gradle配置
我們需要在library工程的build.gradle配置我們的相應的信息,下面是示例代碼:
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
// 這個version是區分library版本的,因此當我們需要更新library時記得修改這個version
version = "1.0.0"
android {
compileSdkVersion 19
buildToolsVersion "23.0.3"
resourcePrefix "devilwwj_"
defaultConfig {
minSdkVersion 9
targetSdkVersion 21
versionCode 1
versionName version
}
lintOptions {
abortOnError false
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
}
def siteUrl = 'https://github.com/devilWwj/Android-Tech' // 項目的主頁
def gitUrl = 'https://github.com/devilWwj/Android-Tech.git' // Git倉庫的url
group = "com.devilwwj.library" // Maven Group ID for the artifact,一般填你唯一的包名
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
// Add your description here
description 'my utils for test'
name 'Android Commonly used utils' //項目描述
url siteUrl
// Set your license
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer { // 開發者信息
id 'YOUR_ID'
name 'YOUR NAME'
email 'YOUR EMAIL'
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
options.encoding = 'UTF-8'
source = 'src/main/java'
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
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 = "maven" //發布到Bintray的那個倉庫裡,默認賬戶有四個庫,我們這裡上傳到maven庫
name = "myutils" //發布到Bintray上的項目名字
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
你還需要在local.properties中定義兩行代碼:
bintray.user=YOUR_BINTRAY_USERNAME
bintray.apikey=YOUR_BINTRAY_API_KEY
分別是你在bintray的用戶名和apikey,具體可以在你的profile找到。
配置完成後,我們就可以執行bintrayUpload命令上傳我們的庫到bintray,可以直接執行task或者在命令行敲入以下命令:
gradlew bintrayUpload
如果上傳成功,就會在bintray的網頁看到你的library,例如我通過命令上傳的myutils庫:
這個時候你已經實現通過gradle腳本上傳library到maven倉庫,你可以在本地驗證以下,需要進行在根目錄的build.gradle配置:
allprojects {
repositories {
jcenter()
maven {
url 'https://dl.bintray.com/devilwwj/maven/'
}
}
}
這樣我們就可以訪問上傳到maven的library,在項目配置:
編譯成功之後,可以在External Libraries看到我們從maven倉庫下載下來的library:
但如果你想讓其他開發者直接使用,需要上傳到Jcenter,而不需要配置maven的地址。
完成這些操作之後,你只需等待bintray團隊審核通過,之後其他開發者只需配置一行代碼就可以使用了。
關於使用gradle上傳library到jcenter的實踐基本就這樣,在實踐之前也參考了很多文章,但過程都基本類似,大家可以對比一下,自己按照這些步驟實踐一下,看是否會遇到一些坑,踩坑並填坑的過程就是你經驗的積累,我為什麼要去了解這些內容,筆者以前在開發app並沒有太關注這些,但從應用開發者轉變成SDK開發者之後,從使用輪子到創造輪子的轉變,需要我關注這些,從知道是什麼到為什麼再到怎麼做,這對我們深入學習知識非常重要。
1. 圖片縮放後對齊的問題 在Android的開發中,如何使用圖片對很多開發人員是一個很頭痛的事。最常見的問題是在一台手機上調試好的UI,在不同dpi的手機上會變形。
1:自己最近在做了支付,遇到了一下問題先總結如下 第一條: Android快捷支付SDK Demo resultStatus={4001};memo={參數錯誤};
android的開發模式,也就是項目最基本的構建模式,也不是說需要固定不變的模式,在項目中可以靈活運用。而MVP開發模式屬於MVC的變種升級,其相對於mvc模式來說,更高
1.修改PagerTabStrip中的背景顏色我們在布局中直接設置background屬性即可: 2.修改指示條的顏色我們可以在java代碼中