我一直对android开发社区中有多少第三方库可用感到惊讶。很长一段时间以来,我都想贡献点东西,但我不知道该怎么做。在浏览了很多其他关于如何发布android开发库的文章后,我仍然发现缺少一些细节,而且所有信息都在不同的地方。所以,我将介绍整个过程并向您展示我是如何做到的。对于初学者,我推荐使用AndroidStudio来创建所有的Android项目,而AndroidStudio官方使用的是Gradle构建系统。确保下载最新版本的AndroidStudio。相关术语介绍在我们开始之前,有一些术语需要先熟悉一下。Project——在AndroidStudio中,一个项目就是一个完整的Android应用。一个AndroidStudio项目由一个或多个模块组成。在AndroidStudio中,项目类似于Eclipse中的工作区。模块——模块是应用程序的一个组件,可以独立构建、测试和调试。模块包含应用程序的源代码和资源文件。在AndroidStudio中,模块类似于Eclipse中的项目。AAR–“aar”包是Android开发库项目的二进制分发版。(AAR格式)开发库工程主要输出的是.aar包(意思是Android压缩包)。它由编译后的代码(如jar文件或.so文件)和资源文件(如manifest文件、res文件、asset文件)组成。MavenCentralRepository-Maven社区提供的存储库。它包含了很多我们常用的开发库。搜索Maven网站可用于浏览Maven中央存储库的内容。Gradle,Please网站是另一个可用于搜索中央存储库的工具。如果您在项目配置文件的存储库配置部分添加jCenter(),那么Gradle将使用jCenter存储库(jCenter的描述)。MavenCentralRepository也常被称为MavenCentral或CentralRepository。Sonatype—Sonatype的开源软件存储库托管(OSSRH)服务是项目作者和贡献者将其组件发布到中央存储库的主要方式。它是一个SonatypeNexusProfessional组织,使用NexusStagingSuite工具为开源项目提供部署托管服务。该服务主要用于处理部署和验证操作,同时也提供同步操作,通过网络将内容投递到中央仓库。GPG–GNUPrivacyProtectionGroup(也称为GPG或GnuPG),GNU项目是一个遵循OpenPGP(RFC4880)标准的加密软件,是PGP的免费替代品。使用GPG,您可以加密(解密)包含敏感数据的文件,例如受健康保险流通与责任法案(HIPAA)保护隐私和安全的电子健康信息。有关GPG的更多信息,请访问GNUPrivacyGuard网站。准备你的Android开发库我将以我的Trestle开发库为例进行说明。在你的项目中,你需要修改一些地方,以准备在Maven中央仓库发布为开发库。将开发库的核心代码与示例代码分开。在我的项目中,我将它们分成库和示例模块。请仔细阅读有关创建开发库模块的提示。您可能还需要重命名您的模块。在示例模块的build.gradle文件中,确保包含以下内容:applyplugin:'com.android.application'dependencies{compileproject(':library')}包括以下:applyplugin:'com.android.library'applyfrom:'maven-push.gradle'在库模块中,添加gradle.properties文件,请确保文件中包含以下内容:POM_NAME=ProjectNamePOM_ARTIFACT_ID=projectnamePOM_PACKAGING=aar在库模块中,添加maven-push.gradle文件,请务必在文件中包含以下内容:/**Copyright2013ChrisBanes**LicensedundertheApacheLicense,Version2.0(the"License");*youmaynotusethisfileexceptincompliancewiththeLicense.*YoumayobtainacopyoftheLicenseat**http://www.apache.org/licenses/LICENSE-2.0**除非适用法律要求或书面同意,软件*在许可证下分发是在“ASIS”基础上分发的,*没有任何形式的保证或条件,无论是expressorimplied.*有关特定语言的许可和*许可下的限制,请参阅许可。*/applyplugin:'maven'applyplugin:'signing'defisReleaseBuild(){returnVERSION_NAME.contains("SNAPSHOT")==false}defgetReleaseRepositoryUrl(){returnhasProperty('RELEASE_REPOSITORY_URL')?RELEASE_REPOSITORY_URL:"https://oss.sonatype.org/service/local/staging/deploy/maven2/"}defgetSnapshotRepositoryUrl(){returnhasProperty('SNAPSHOT_REPOSITORY_URL')?SNAPSHOT_REPOSITORY_URL:"https://oss.sonatype.org/content/repositories/snapshots/"}defgetRepositoryUsername(){returnhasProperty('NEXUS_USERNAME')?NEXUS_USERNAME:""}defgetRepositoryPassword(){returnhasProperty('NEXUS_PASSWORD')?NEXUS_PASSWORD:""}afterEvaluate{project->uploadArchives{repositories{mavenDeployer{beforeDeployment{MavenDeploymentdeployment->signing.signPom(deployment)}pom.groupId=GROUPpom.ACTIFmARTId.version=VERSION_NAMErepository(url:getReleaseRepositoryUrl()){authentication(userName:getRepositoryUsername(),password:getRepositoryPassword())}snapshotRepository(url:getSnapshotRepositoryUrl()){authentication(userName:getRepositoryUsername(),password:getRepositoryPassword())}pom.project{namePOM_NAMEpackagingPOM_PACKAGINGdescriptionPOM_DESCRIPTIONurlPOM_URLscm{urlPOM_SCM_URLconnectionPOM_SCM_CONNECTIONdeveloperConnectionPOM_SCM_DEV_CONNECTION}licenses{license{namePOM_LICENCE_NAMEurlPOM_LICENCE_URLdistributionPOM_LICENCE_DIST}}developers{developer{idPOM_DEVELOPER_IDnamePOM_DEVELOPER_NAME}}}}}}signing{required{isReleaseBuild()&&gradle.taskGraph.hasTask("uploadArchives")}signconfigurations.archives}//taskandroidJavadocs(type:Javadoc){//source=android.sourceSets.main.allJava////taskandroidJavadocsJar(类型:Jar,dependsOn:androidJavadocs){//classifier='javadoc'//fromandroidJavadocs.destinationDir//}taskandroidSourcesJar(type:Jar){classifier='sources'fromandroid.sourceSets.main.java.sourceFiles}artifacts{archivesandroidSourcesJar}}修改项目根目录的.gitignore文件#[Android]========================#Builtapplicationfiles*.apk*.ap_#FilesfortheDalvikVM*.dex#Javaclassfiles*.class#Generatedfilesbin/gen/#Gradlefiles.gradle/build/#Localconfigurationfile(sdkpath,etc)local.properties#ProguardfoldergeneratedbyEclipseproguard/#LogFiles*.log##Directory-basedprojectformat:.idea/##File-basedprojectformat:*.ipr*.iws##Plugin-specificfiles:#IntelliJout/#mpeltonen/sbt-ideaplugin.idea_modules/#JIRApluginatlassian-ide-plugin.xml#Crashlyticsplugin(forAndroidStudioandIntelliJ)com_crashlytics_export_strings.xml#[Maven]======================target/pom.xml.tagpom.xml.releaseBackuppom.xml.versionsBackuppom.xml.nextrelease.properties#[Gradle-Android]========================#IgnoreGradleGUIconfiggradle-app.setting#GradleSigningsigning.propertiestrestle.keystore#MobileToolsforJava(J2ME).mtj.tmp/#PackageFiles#*.jar*.war*.ear#virtualmachinecrashlogs,参见http://www.java.com/en/download/help/error_hotspot.xmlhs_err_pid*#Misc/.idea/workspace.xml.DS_Store/captures**/*.iml*.class修改项目根目录的settings.gradle文件include':sample',':library'修改项目根目录的gradle.properties文件#Project-wideGradlesettings.#IDE(e.g.AndroidStudio)users:#GradlesettingsconfiguredthroughtheIDE*willoverride*#anysettingsspecifiedinthisfile.#Formoredetailsonhowtoconfigureyourbuildenvironmentvisit#http://www.gradle.org/docs/current/userguide/build_environment.html#SpecifiestheJVMargumentsusedforthedaemonprocess.#Thesettingisparticularlyusefulfortweakingmemorysettings.#Defaultvalue:-Xmx102=48Pm6XX:-Xmx102=48Pm6XX:.当前/用户指南/multi_project_builds.html#sec:decoupled_projects#org.gradle.parallel=trueVERSION_NAME=0.0.1VERSION_CODE=1GROUP=com.github.github_usernamePOM_DESCRIPTION=AlibrarythatdoesX,和ZPOM_URL=https://github.com/github_username/ProjectNamePOM_SCM_URL=https://github.com/github_username/ProjectNamePOM_SCM_CONNECTION=scm:git@github.com:github_username/ProjectName.gitPOM_SCM_DEV_CONNECTION=scm:git@github.com:github_username/ProjectName.gitPOM_LICENCE_NAME=TheApacheSoftwareLicense,Version2.0POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txtPOM_LICENCE_DIST=repoPOM_DEVELOPER_ID=github_usernamePOM_DEVELOPER_NAME=GitHubADFullName为其他开发者添加文件到你的仓库以及如何使用它如果您想在README.md文件中添加一些屏幕截图,我强烈推荐一个名为Screenr的应用程序。安装GPG如果您的机器上没有安装GPG,您需要下载并安装它。如果你是MacOSX系统,安装手册在这里。如果您从未使用过GPG-首先,创建一个GPG密钥:$gpg--gen-key如果您在创建GPG密钥时不确定如何回答问题,本指南(创建加密密钥)可以提供帮助。接下来,找到您的密钥ID:$gpg--list-keys第一行看起来像pubXXXXX/YYYYYYYY
