目前非常流行将开源库上传至Jcenter仓库中,使用起来非常方便且易于维护,特别是在Android Studio环境中,只需几步配置就可以轻松实现上传和发布。
Library的转换和引用博主的一个开源项目CustomSwipeListview之前是在Ecplise环境下进行开发且把控件代码和Demo写在了一个Project中,所以在发布开源库前首先是将原项目中的Demo代码提取出来单独新建一个项目,并将原项目转换为一个Library。
在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 删除即可。
在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帐号和密码。 //一般的为了保密和安全性,在项目的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 //是否发布 } } 执行打包并发布