[英]How to create my own android library and host it
我正在創建一個登錄屏幕,用於多個不同的Android應用程序。 打包它的最佳方法是什么,以便其他人可以在他們的應用程序上使用我的登錄功能。 在我們進行更改的情況下,它最好是自動同步它們。 ***編輯****似乎將它打包成庫模塊是最好的選擇。 如何上傳這個模塊,以便如果我們對這個模塊進行更新,它將無縫更新,而無需從github中取出。
謝謝!
如果您已將代碼推送到GitHub,那么使用JitPack可以輕松共享庫(aar)。
您的用戶只需要將存儲庫添加到他們的build.gradle:
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
然后你的GitHub存儲庫作為依賴:
dependencies {
// ...
compile 'com.github.YourUsername:Repo:Release'
}
好消息是你不必上傳你的圖書館。 在幕后,JitPack將檢查GitHub中的代碼並進行編譯。 當您在GitHub上發布新版本時,其他人可以使用它。
還有一個關於如何准備Android項目的指南。
將相關的類放入庫模塊 - 您似乎已經知道如何做 - 然后使用Gradle Bintray插件將其上載到JCenter 。
比方說,你設置group
中的build.gradle到com.ryan -紐瑟姆 , version
為1.0,項目名稱為Android系統的登錄屏幕 。
(部分) android-log-in-screen / build.gradle :
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:0.6"
}
}
apply plugin: 'com.jfrog.bintray'
group = 'com.ryan-newsom'
version = '1.0'
bintray {
// Omitted for brevity, refer to the examples on GitHub.
}
您(或其他任何人)可以通過添加以下內容在您的項目中使用它:
(part) other-project / build.gradle :
repositories {
jcenter()
}
dependencies {
compile "com.ryan-newsom:android-log-in-screen:1.0"
}
然后,庫將從JCenter中提取並添加到類路徑中。
您可以將庫打包為AAR格式。 它還將包含您在登錄模塊中使用的資源。 之后,您可以將AAR庫格式推送到bintray(這是免費的,並允許您設置自己的存儲庫)。
然后,您的協作者可以使用類似於以下內容的依賴項訪問該庫:
編譯'com.newsom:awesome-login-screen:0.5'
如果您使用的是AndroidStudio / Gradle,請查看此入門教程,並希望將其推送到bintray。 https://github.com/jimcoven/android-bintray-kit
創建lib並使其可供其他開發人員使用的最佳方法是創建AAR,以便開發人員可以使用依賴項在項目中導入它。
這個過程很漫長。 這些是您發布lib時應遵循的主要步驟:
我寫了一篇關於它的帖子,並有更多細節,你可以在這里看看。 這是一個名為maven_push.gradle的gradle文件:
apply plugin: 'maven'
apply plugin: 'signing'
def sonatypeRepositoryUrl
if (isReleaseBuild()) {
println 'RELEASE BUILD
sonatypeRepositoryUrl = hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL
: "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
} else {
println 'SNAPSHOT BUILD'
sonatypeRepositoryUrl = hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL
: "https://oss.sonatype.org/content/repositories/snapshots/"
}
def getRepositoryUsername() {
return hasProperty('nexusUsername') ? nexusUsername : ""
}
def getRepositoryPassword() {
return hasProperty('nexusPassword') ? nexusPassword : ""
}
afterEvaluate { project ->
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
pom.artifactId = POM_ARTIFACT_ID
repository(url: sonatypeRepositoryUrl) {
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
}
pom.project {
name POM_NAME
packaging POM_PACKAGING
description POM_DESCRIPTION
url POM_URL
scm {
url POM_SCM_URL
connection POM_SCM_CONNECTION
developerConnection POM_SCM_DEV_CONNECTION
}
licenses {
license {
name POM_LICENCE_NAME
url POM_LICENCE_URL
distribution POM_LICENCE_DIST
}
}
developers {
developer {
id POM_DEVELOPER_ID
name POM_DEVELOPER_NAME
}
}
}
}
}
}
signing {
required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
sign configurations.archives
}
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.allJava
classpath += project.files(android.plugin.getRuntimeJarList().join(File.pathSeparator))
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
classifier = 'javadoc'
//basename = artifact_id
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
classifier = 'sources'
//basename = artifact_id
from android.sourceSets.main.allSource
}
artifacts {
//archives packageReleaseJar
archives androidSourcesJar
archives androidJavadocsJar
}
}
而gradle.properties是:
VERSION_NAME=
VERSION_CODE=1
GROUP=
POM_DESCRIPTION=
POM_URL=
POM_SCM_URL= POM_SCM_CONNECTION=
POM_SCM_DEV_CONNECTION=scm:git@github.com:
POM_LICENCE_NAME=The Apache Software License, Version 2.0 POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt POM_LICENCE_DIST=repo
POM_DEVELOPER_ID=
POM_DEVELOPER_NAME=
還有另一種方法,但我沒有嘗試它,它似乎更容易。 看看jitpack 。
希望它能幫到你。
根據您的來源制作包或jar,並將其發布到git hub上,您可以參考您的ide中的git導入或檢查更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.