简述

目前非常流行将开源库上传至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属性,例如:

    @Override
    public 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语句来完成相应的逻辑判断操作,例如:

    @Override
    public 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 'xyczero@sina.com'
}
} 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帐号和apiKey。
//一般的为了保密和安全性,在项目的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/.

如何在Android Studio中使用Gradle发布项目至Jcenter仓库的更多相关文章

  1. 使用Gradle发布项目到JCenter仓库 (转载)

    原文:使用Gradle发布项目到JCenter仓库 这篇文章介绍通过Gradle把开源项目发布到公共仓库JCenter中,方便你我他的事情,我们都是很懒的嘛.JCenter现在是Android Stu ...

  2. 如何在Android Studio中指定NDK位置?

    如何在Android Studio中指定NDK位置? 问题描述 NDK已经手工下载解包在本地: D:\Portable\android-ndk-r13b 每次创建支持C++项目时,都提示NDK没配置, ...

  3. 如何在Android Studio中添加注释模板信息?

    如何在Android Studio中添加注释模板信息? 在开发程序的时候,我们一般都会给文件自动添加上一些关于文件的注释信息,比如开发者的名字,开发的时间,开发者的联系方式等等.那么在android ...

  4. Android Studio中使用Gradle打包

    首先要注意一点,Android Studio中把proguard.txt已经命名为proguard-rules.pro,由此可见,採用Gradle打包,混淆规则文件的名称是不重要的.能够自己随便命名. ...

  5. [Android Tips] 30.如何在 Android Studio 中一次性格式化所有代码

    在目录上面右击,有 Reformat Code Ctrl + Alt + L 参考 如何在IntelliJ IDEA或Android Studio中一次性格式化所有代码?

  6. Android Studio中由于gradle插件版本和gradle版本对应关系导致的编译失败的问题

    今天在Android Studio中导入新项目,import之后编译报错,报错信息基本都是和版本相关,查询gradle版本相关知识,了解到gradle插件版本和gradle版本有相应的匹配关系,对应如 ...

  7. 如何在android studio中cordova的混合开发

    基于Android Studio 中Cordova的开发 cordova简介 Cordova的前身是PhoneGap 官网: (http://cordova.io) Cordova应是运行在客户端本地 ...

  8. Android Studio中利用JavaDoc生成项目API文档

    1. 在Android Studio中的菜单项中点击Generate JavaDoc

  9. 在 Android studio 中 配置Gradle 做到 “根据命令行提示符生成指定versionCode, versionName,指定apk的打包输出路径”

    需求: 1. 使用 Android studio ,使用 gradle 进行构建 2. 在实际开发中,我们需要使用jenkins进行打包.就需要配置我们的 gradle 脚本以支持参数化的方式. 3. ...

随机推荐

  1. mysql 引擎区分

    MySQL常用的存储引擎为MyISAM.InnoDB.MEMORY.MERGE,其中InnoDB提供事务安全表,其他存储引擎都是非事务安全表. MyISAM是MySQL的默认存储引擎.MyISAM不支 ...

  2. poj 3259 Wormholes【spfa判断负环】

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 36729   Accepted: 13444 Descr ...

  3. c#基础语言编程-编码

    字符编码是计算机技术的基础理论,其字符编码有ASCII码.UTF-8.还有就是GB2312,当然这是在中国常用的. 1.ASCII码 在计算机内部所有的信息都是以二进制字符进行存储.用每个二进制位中的 ...

  4. 关于谷歌、火狐 右键没有发送到onenote选项

                              关于chrome .FF 右键没有发送到onenote选项 问题: 使用Microsoft  office中的onenote作为自己平时学习和工作的 ...

  5. JSNI GWT中的东东

    二.JavaScript Native InterfaceJavaScript本地接口JSNI.1)声明一个本地方法在JSNI中声明一个本地方法时,使用Java的标准native关键字,就像在JNI( ...

  6. 触发器记录表某一个字段数据变化的日志 包括插入insert 修改update 删除delete 操作

    本文参考:http://www.cnblogs.com/lyhabc/articles/3236985.html ,),  ),               ),           ),       ...

  7. nrf51822蓝牙芯片ble_app_proximity程序总结

    近期由于钥匙的事情,研究了下官方自带的ble_app_proximity程序,事实上就是跟防丢有关系的程序. 同一时候也发现了看nordic程序的一些门道,主要还是看协议栈里面的一些service,首 ...

  8. 写在新建博客的第一天 分类: fool_tree的笔记本 2014-11-08 17:57 144人阅读 评论(0) 收藏

    来CSDN开博客的目的有两个: 其一是因为CSDN的代码输出,看过一些博文,觉得这里的代码输出真的很漂亮: 其二则是因为,感觉自己印象笔记用久了之后,渐渐地几乎不再自己写些东西了,习惯了方便的剪藏插件 ...

  9. clock_gettime测代码运行时间

    //函数原型: // long clock_gettime (clockid_t which_clock, struct timespec *tp); //参数列表: // CLOCK_REALTIM ...

  10. [PWA] 19. Cache the avatars

    Cache the avatars is little different from cache photos. We need to serve the page with our cache da ...