简述

目前非常流行将开源库上传至Jcenter仓库中,使用起来非常方便且易于维护,特别是在Android Studio环境中,只需几步配置就可以轻松实现上传和发布。

Library的转换和引用

博主的一个开源项目CustomSwipeListview之前是在Ecplise环境下进行开发且把控件代码和Demo写在了一个Project中,所以在发布开源库前首先是将原项目中的Demo代码提取出来单独新建一个项目,并将原项目转换为一个Library。

  1. 在Android Studio中转换成Library一般有两种方法。
    第一种方法是在Android Studio新建一个Project后,在该Project中再新建一个Library Module,方法很简单,就是在新建Module时选中Android Library即可,详见下图蓝色区域。



    另一种方法是,在Android Studio中新建一个Project后会默认创建一个app module,我们打开这个app module 的bulid.gradle文件会发现它的默认属性是application,所以我们需要将文件中的: apply plugin: 'com.android.application' 替换为apply plugin: 'com.android.library',并把defaultConfig中的applicationId 删除即可。

  2. 在Project转换Library时需要特别注意的是Library的R.java中的资源ID不是常量。 如果代码中你在switch-case语句中使用到了相关的资源ID属性,例如:

    @Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.undo_dialog_btn:if (mUndoActionListener != null)mUndoActionListener.executeUndoAction();break;default:break;}dismiss();}

    这是Android Studio就会报错,因为case分支后面跟的参数必须是常数,所以我们暂且只能使用if-else语句来完成相应的逻辑判断操作,例如:

    @Overridepublic void onClick(View v) {if(v.getId()==R.id.undo_dialog_btn){if (mUndoActionListener != null){mUndoActionListener.executeUndoAction();}}dismiss();}

添加全局插件

为了能使得项目能自动的打包发布至jcenter仓库中,我们首先需要在Project的bulid.gradle文件中添加两个插件依赖,具体如下:

dependencies {    classpath 'com.android.tools.build:gradle:1.0.1'    //自动化maven打包插件    classpath 'com.github.dcendents:android-maven-plugin:1.2'    //自动上传至Bintray平台插件    classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0"    // NOTE: Do not place your application dependencies here; they belong    // in the individual module build.gradle files}

Library配置

这里的Library即是你需要发布的项目Module。

apply plugin: 'com.android.library'apply plugin: 'com.github.dcendents.android-maven'apply plugin: 'com.jfrog.bintray'version = "1.0.0"android {    compileSdkVersion 21    buildToolsVersion "21.1.2"    resourcePrefix "customswipelistview_"  //这个没搞清什么作用,暂时随意填。defaultConfig {    minSdkVersion 16    targetSdkVersion 21    versionCode 1    versionName version  }  buildTypes {    release {        minifyEnabled false        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'    }  }}def siteUrl = "https://github.com/xyczero/custom-swipelistview"def gitUrl = "https://github.com/xyczero/custom-swipelistview.git"//填写唯一包名group = "com.xyczero"install {repositories.mavenInstaller {    // This generates POM.xml with proper paramters    pom {        project {            packaging 'aar'            //添加项目描述            name 'CustomSwipeListview for Android'            url siteUrl            //设置开源证书信息            licenses {                license {                    name 'The Apache Software License, Version 2.0'                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'                }            }//添加开发者信息            developers {                developer {                    id 'xyczero'                    name 'xiayuncheng'                    email '[email protected]'                }            }            scm {                connection gitUrl                developerConnection gitUrl                url siteUrl            }        }    }  }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    compile 'com.android.support:appcompat-v7:21.0.3'}task sourcesJar(type: Jar) {    from android.sourceSets.main.java.srcDirs    classifier = 'sources'}task javadoc(type: Javadoc) {    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}artifacts {    archives javadocJar    archives sourcesJar}Properties properties = new Properties()properties.load(project.rootProject.file('local.properties').newDataInputStream())//配置上传Bintray相关信息bintray {//读取Bintray帐号和密码。//一般的为了保密和安全性,在项目的local.properties文件中添加两行句话即可://bintray.user=username//bintray.apikey=apikey    user = properties.getProperty("bintray.user")    key = properties.getProperty("bintray.apikey")configurations = ['archives']pkg {        repo = "maven"//上传的中央仓库名称        name = "CustomSwipeListview"//上传的项目的名字        websiteUrl = siteUrl        vcsUrl = gitUrl        licenses = ["Apache-2.0"]        publish = true  //是否发布    }}

执行打包并发布

  1. 上述文件配置完成后,先Rebuild一下项目,然后在AS的Terminal运行 gradlew install 命令。
    此时你会发现在项目的.idea文件夹下有一个gradle.xml文件,此文件就是该项目相应的gradle格式配置,同时在所要发布的xxx-module/build/outputs/aar文件夹下有已生成aar文件以及在xxx-module/build/poms文件夹下的pom-default.xml(对应maven格式)。

  2. 在完成上述步骤1后,所有必须的文件已在本地生成完毕,然后接着执行 gradlew bintrayUpload 命令上将项目上传到Bintray平台上。

  3. 等待上传结束后,你可以在Bintray上找到你发布的项目,此时你只需要发送一个Request给管理员并耐心等待审批通过即可(博主当时是凌晨发送请求,早上8点多收到的审批通过邮件)。



    至于找到发送请求的途径有很多,可以进入该传送门点击include package输入你的项目名字并点击匹配到的项目,也可以直接在首页搜索你的项目名字并在右下角的Link To点击加入jcenter的申请。

结束语

如果看完上述教程有什么不明白之处欢迎留言讨论。

相关文章:使用Gradle发布项目到JCenter仓库

作者:XycZero
查看原文:http://www.xyczero.com/blog/article/19/.

更多相关文章

  1. Android日记之2011\12\31
  2. 【cocos2dx-3.0beta-制作flappybird】就要结束了吗—Android交叉
  3. Android读取excel文件小结(读取大数据量的excel文件)
  4. android不生成R文件
  5. Android(安卓)Add外部library工程,总是链接失败的解决办法
  6. App基于html/css/js的开发
  7. XML解析和生成之--pull(android内置)
  8. Android(安卓)程序以及在4.4.4以上报错但是在4.4.4以上不报错
  9. Android多渠道打包之Python打包

随机推荐

  1. android中无限循环滑动的gallery实例
  2. Android判断当前设备是否联网
  3. 蓝牙搜索显示结果到ListView(十分精简)
  4. 【Android】设备标识
  5. android插件化研究
  6. CyanogenMod开源代码
  7. Android AIDL整理
  8. [置顶] android-async-http框架库使用基
  9. Android Fragment的简单应用
  10. Android Color