androidstudio 上传jcenter库

环境

AndroidStudio 1.2.1.1正式版

本教程以我的一个测试仓库作为DEMO,名为JCenterDemo。本教程只涉及如何打包aar至JCenter仓库,如何使用git不在本教程涉及之内,所以本文只是单单在Github建立了一个同名仓库而已,不过可以推荐一个入门git教程GitBook

本教程解决javadoc乱码问题,包含第三方依赖的javadoc打包失败问题以及install任务生成pom文件失败问题。

一.在GitHub中新建一个仓库,并记录下URL,如https://github.com/ls1110924/JCenterDemo

二.注册bintray账号

在https://bintray.com/上注册一个账号。并记录下你的UserId和API Key,UserId即为你的登陆ID,API Key相当与一种授权,方便你可以不用填入密码就可以上传文件至仓库。

三.创建你的工程,如我创建的工程为下图

一般来说上传至公共仓库的均为Library,所以本例也以一个Lib作为示例。并新建一个Module名为JCenterLib的Lib。



此时工程目录结构为

四.完成你个人的库

如本文新建了两个Handler的工具类,分别适用于Activity和Fragment。

如这是该示例库中的适用于Fragment的Handler工具类

[java] view plain copy
package com.cqu.jcenterlib;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;

import java.lang.ref.SoftReference;

/**
* Created by A Shuai on 2015/5/2.
* 适用于Fragment的Handler的抽象模板类
*/
public abstract class AbsFragmentHandler extends Handler {

private final SoftReference<T> mFragmentRef;  

public AbsFragmentHandler(T mFragment) {  
    mFragmentRef = new SoftReference<T>(mFragment);  
}  

/** 
 * 不许覆写,若对需对消息处理可对{@link #handleMessage(Fragment, Message, Bundle)}进行覆写 
 * 
 * @param msg Message消息对象 
 */  
@Override  
public final void handleMessage(Message msg) {  
    T mFragment = mFragmentRef.get();  
    if (mFragment == null) {  
        return;  
    }  
    handleMessage(mFragment, msg, msg.getData());  
}  

/** 
 * 主要的消息处理逻辑 
 * 
 * @param mFragment 类型参数T所指定的Fragment对象 
 * @param msg       Message消息对象 
 * @param mBundle   可以为null 
 */  
protected abstract void handleMessage(T mFragment, Message msg, Bundle mBundle);  

}

五.在当前工程中的app的这个Module中引用该lib,
在app这个Module的build.gradle文件中加入一项依赖,即可在app这个Module中使用JCenterLib中定义的工具类了。

[javascript] view plain copy
complile project(‘:JCenterLib’)

六.打开项目根目录中的build.gradle 添加 buildscript 的 reposiories

[javascript] view plain copy
classpath ‘com.github.dcendents:android-maven-plugin:1.2’
classpath ‘com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0’

编辑前:
[javascript] view plain copy
buildscript {
repositories {
jcenter()
}
dependencies {
classpath ‘com.android.tools.build:gradle:1.2.3’

    // NOTE: Do not place your application dependencies here; they belong  
    // in the individual module build.gradle files  
}  

}

allprojects {
repositories {
jcenter()
}
}

编辑后:
[javascript] view plain copy
buildscript {
repositories {
jcenter()
}
dependencies {
classpath ‘com.android.tools.build:gradle:1.2.3’

    classpath 'com.github.dcendents:android-maven-plugin:1.2'  
    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  
}  

}

allprojects {
repositories {
jcenter()
}
}

七.在JCenterLib这个Module中新建一个文件,名为bintray.gradle

内容为:

[javascript] view plain copy
apply plugin: ‘com.github.dcendents.android-maven’
apply plugin: ‘com.jfrog.bintray’

group = PROJ_GROUP
version = PROJ_VERSION
project.archivesBaseName = PROJ_ARTIFACTID

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

}

javadoc {
options{
encoding “UTF-8”
charSet ‘UTF-8’
author true
version true
links “http://docs.oracle.com/javase/7/docs/api
}
}

install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom.artifactId = PROJ_ARTIFACTID
pom {
project {
description PROJ_DESCRIPTION
packaging ‘aar’
name PROJ_NAME
url PROJ_WEBSITEURL
licenses {
license {
name LICENSE_NAME
url LICENSE_URL
}
}
developers {
developer {
id DEVELOPER_ID
name DEVELOPER_NAME
email DEVELOPER_EMAIL
}
}
scm {
connection PROJ_VCSURL
developerConnection PROJ_VCSURL
url PROJ_WEBSITEURL
}
}
}
}
}

Properties properties = new Properties()
properties.load(project.rootProject.file(‘local.properties’).newDataInputStream())

bintray {
user = properties.getProperty(“bintray.user”)
key = properties.getProperty(“bintray.apikey”)

configurations = ['published','archives']  
publish = true  

pkg {  
    repo = "maven"  
    name = PROJ_NAME  
    desc = PROJ_DESCRIPTION  
    websiteUrl = PROJ_WEBSITEURL  
    issueTrackerUrl = PROJ_ISSUETRACKERURL  
    vcsUrl = PROJ_VCSURL  
    licenses = ["Apache-2.0"]  
    publicDownloadNumbers = true  
}  

}
*注:此文件中规定了生成javadoc的编码格式为utf-8,所以大家在使用各种IDE时为了避免各种乱码问题,应在设置中将工作空间的编码设置为统一采用utf-8编码.

八.同样在JCenterLib这个Module下新建一个名为gradle.properties的文件

内容为:

[javascript] view plain copy
PROJ_GROUP=com.github.ls1110924.library
PROJ_VERSION=1.0.0
PROJ_NAME=JCenterLib
PROJ_WEBSITEURL=https://github.com/ls1110924/JCenterDemo
PROJ_ISSUETRACKERURL=https://github.com/ls1110924/JCenterDemo/issues
PROJ_VCSURL=https://github.com/ls1110924/JCenterDemo.git
PROJ_DESCRIPTION=A Test Lib
PROJ_ARTIFACTID=JCenterLib

LICENSE_NAME=’The Apache Software License, Version 2.0’
LICENSE_URL=’http://www.apache.org/licenses/LICENSE-2.0.txt

DEVELOPER_ID=ls1110924
DEVELOPER_NAME=A Shuai
DEVELOPER_EMAIL=ls1110924@gmail.com

我先依次解释一下每个条目的意义
PROJ_GROUP 为你上传的构件的Group,如compile 'com.android.support:appcompat-v7:22.2.0'中的com.android.support

PROJ_VERSION 为你此次上传构件的版本号,如compile 'com.android.support:appcompat-v7:22.2.0'中的22.2.0,以后更新构件重新上传的时候只需要修改这里就好。

PROJ_NAME 为上传到你bintray的maven仓库的仓库名,即他会在你的maven仓库中新建一个子仓库,并使用这个值作为仓库名。

PROJ_WEBSITEURL 为你的工程网站的url,一般为你的Github项目地址,如https://github.com/ls1110924/LightUtils

PROJ_ISSUETRACKERURL 为你的工程issue的url,一般为https://github.com/ls1110924/LightUtils/issues

PROJ_VCSURL 为你的项目版本控制系统的url,一般为https://github.com/ls1110924/LightUtils.git,切不可忘记最后面的.git

PROJ_DESCRIPTION 为你的项目描述,大家随意填写

PROJ_ARTIFACTID 为你的构件ID,如如compile 'com.android.support:appcompat-v7:22.2.0'中的appcompat-v7

LICENSE_NAME和LICENSE_URL保持不变即可

DEVELOPER_ID为开发者ID,大家随意填写

DEVELOPER_NAME为开发者姓名,随意填写

DEVELOPER_EMAIL为开发者邮箱,最后填写正确的邮箱,什么邮箱都可以



*注意:这里最好把构件ID的命名和你要打包上传的Module同名,如若不喜欢Module名作为构件ID,下面教大家动态修改Module名,这里必须同名是因为一会的上传任务是默认使用Module名作为构件ID的,这里声明的构件名就没有了效果。



这时咱们上传的构件依赖就为  complile 'com.github.ls1110924.library:JCenterLib:1.0.0'

*这里因为gradle.properties文件是咱们个人的一些私人信息配置,一般不会同步到Github的远程仓库上,这里需要在JCenterLib这个Moduel的.gitignore文件配置忽略上传gradle.properties这个文件

[javascript] view plain copy
/gradle.properties

九.有心的旁友可能已经注意到第七步中的user和key还没有配置

其实这两个值就是我们第二步中申请bintray的UserID和分配的APIKey

打开项目根目录下的local.properties文件,这个文件项目默认提供了忽略,所以可以把一些非常私人的数据放在这里

[javascript] view plain copy
bintray.user=ls1110924
bintray.apikey=xxxxxxxxxxxxxxxxxxxxx

十.Module改名

如果一些人不喜欢使用Module名作为PROJ_ARTIFACTID构件ID的用户可以看这一步,无所谓的朋友可以跳过这一步

打开项目根目录的settings.gradle文件,加一句

[javascript] view plain copy
def submoduleProject = project(‘:JCenterLib’)
submoduleProject.name = ‘jcenter’
JCenterLib为我们原始的Module名,现在动态改为jcenter,修改后的setting.gradle文件内容为

[javascript] view plain copy
include ‘:app’, ‘:JCenterLib’

def submoduleProject = project(‘:JCenterLib’)
submoduleProject.name = ‘jcenter’
这是这个Module虽然目录还为JCenterLib,但是它实际的名字已经变成了jcenter,所以这时候app这个Module继续引用JCenterLib就会报错,所以应修改为app这个Module
下的build.gradle文件中的依赖,

[javascript] view plain copy
complile project(‘:JCenterLib’)

修改为
[javascript] view plain copy
compile project(‘:jcenter’)

同时修改JCenterLib这个Module中gradle.properties中的

[javascript] view plain copy
PROJ_ARTIFACTID=jcenter
此时gradle.properties文件内容为:

[javascript] view plain copy
PROJ_GROUP=com.github.ls1110924.library
PROJ_VERSION=1.0.0
PROJ_NAME=JCenterLib
PROJ_WEBSITEURL=https://github.com/ls1110924/JCenterDemo
PROJ_ISSUETRACKERURL=https://github.com/ls1110924/JCenterDemo/issues
PROJ_VCSURL=https://github.com/ls1110924/JCenterDemo.git
PROJ_DESCRIPTION=A Test Lib
PROJ_ARTIFACTID=jcenter

LICENSE_NAME=’The Apache Software License, Version 2.0’
LICENSE_URL=’http://www.apache.org/licenses/LICENSE-2.0.txt

DEVELOPER_ID=ls1110924
DEVELOPER_NAME=A Shuai
DEVELOPER_EMAIL=ls1110924@gmail.com
那么此时使用此构建的依赖就变为 complile ‘com.github.ls1110924.library:jcenter:1.0.0’

十一.在JCenterLib这个Module中的build.gradle文件末尾加一句

[javascript] view plain copy
apply from: ‘bintray.gradle’

此时该文件内容为
[javascript] view plain copy
apply plugin: ‘com.android.library’

android {
compileSdkVersion 21
buildToolsVersion “22.0.1”

defaultConfig {  
    minSdkVersion 8  
    targetSdkVersion 21  
    versionCode 1  
    versionName "1.0"  
}  
buildTypes {  
    release {  
        minifyEnabled false  
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
    }  
}  

}

dependencies {
compile fileTree(dir: ‘libs’, include: [‘*.jar’])
compile ‘com.android.support:appcompat-v7:22.2.0’
}

apply from: ‘bintray.gradle’

这时基本完成了所有的编写工作,接下来开始打包各种jar文件并上传即可
*此时应进行一次Sync同步操作,因为修改了build.gradle文件,还可以为预防没有生成响应的打包任务。

十二.执行生成sources.jar任务

展开JCenterDemo - :jcenter - Tasks - other



执行其中的sourcesJar任务,一般这个任务不会出错,都会在JCenterLib/build/libs下生成源代码的jar包,名字为 ModuleName-版本号-sources.jar,如jcenter-1.0.0-sources.jar。

十三,生成javadoc文件

同样运行other中的javadoc任务,如果你的项目中使用了第三方依赖或libs文件中第三方jar包,这个任务有可能会出错,出错异常为程序包不存在或者找不到符号等。



但是不用担心,其实这个任务已经算是执行完毕了,他在JCenterLib/build下生成了一个docs的文件夹,并把生成好的html文件放在其中

十四.执行打包生成javadoc.jar文件

执行同样位于other下的javadocJar任务,如果没有出错,会在JCenterLib/build/libs下生成对应的javadoc.jar文件,但是如果出错,则需要我们手动打包javadoc.jar文件



(1)复制我上传的附件中的META-INF文件夹到JCenterLib/build/docs/javadoc/文件内,如图



(2)就在当前目录下,选中所有文件并右键,选择 添加到"javadoc.zip' 这个选项或类似选项生成一个zip压缩包。
    打开此压缩包看到的效果应如图:



    (3)复制此zip包到JCenterLib/build/libs目录下,并改名为 ModuleName-版本号-javadoc,并将文件后缀名从zip修改为jar

十五.生成pom文件

 执行同为other下的install任务,如果任务成功会在JCenterLib/build/下生成poms文件夹以及其中的pom-default.xml文件

    (1)如果任务失败,则需我们手动配置此文件,同样复制我上传的附件中的poms文件夹至JCenterLib/build/下



    (2)使用任意一款编辑器修改poms文件夹下的pom-default.xml文件

[javascript] view plain copy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值