平时自己遇到了问题,或者一些经典的代码无头绪,写不出来的时候,我们很多人都会进入到 github 上去搜索与自己的问题相似的项目。然后搜索到之后,窃喜3秒钟!!简单阅读之后,看一看使用方式,如:
通过简单的一行代码就能引用我们需要的功能,好神奇!当然这是我刚开始接触到STUdio时候的感觉。然后,当我们使用久了,必然会有这样的想法,我也需要写自己的功能代码依赖库,然后像这一样“简单粗暴”引用,不用在重复写代码了,多好!而且还能让更多的小伙伴共享~,不失为一件“普天同庆”的大事儿。
接下来我就一步一个脚印的分析:
- 在Studio上建Project
需要先创建一个Project,然后在这个Project中创建一个Module。上图中,mymodule,就是新建的Module,而app则是建立Project时候自动创建的Module。
- 在码云上新建一个代码仓库
在个人主页的左下角,创建公开的项目,如上图。
- 托管到码云
在自己刚刚创建的项目中,如上图,复制HTTPS或者SSH的链接。到git上进行提交到码云托管本地IDE上的代码;
从上面,我们可以看到git命令:从本地ANDROID-STUdio上的项目,托管到码云平台;从下图的提交注释可以看出,已经提交(push)成功了!
- 在JFrog Bintray上操作:创建仓库、获取API-KEY
当然,在JFrog Bintray上操作需要我们进行注册一个账户;然后Add New Repository,并获取API KEY备用;
添加一个远程仓库 Repository,新建成功之后,可进入下一步操作。
获取API KEY,在头像下选择 Edit Profile 进入新页面可以考到API KEY然后复制保存备用;
到此,所有的准备功能已经准备完毕!接下来就要进入到ANDROID STUdio 中进行代码的一些配置;
https://github.com/dcendents/android-maven-gradle-plugin 链接
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
然后在library下的 build.gradle 文件中添加代码:
apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray'
然后,具体详细代码的配置,关于library的build.gradle;
apply plugin: 'com.android.library' //第一步:上传到jCenter的配置 apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray' android { compileSdkVersion 26 buildToolsVersion "26.0.0" defaultConfig { minSdkVersion 19 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs',include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2',{ exclude group: 'com.android.support',module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:26.+' testCompile 'junit:junit:4.12' //上传编译的文件到bintray,使用如下的命令: //gradlew bintrayUpload /*library版本*/ version = "v1.0.0" /*github上的项目主页以及git仓库地址*/ def siteUrl = 'https://gitee.com/yuan1530702811/BaSEOnLibrary' def gitUrl = 'https://gitee.com/yuan1530702811/BaSEOnLibrary.git' /*maven group ID 这个gruop很重要,参考 compile 'groupId:artifactId:version' groupId就是这个,artifactId就是包名,version就是顶部那个*/ group = "com.ztman.cn" install { repositories.mavenInstaller { // This generates POM.xml with proper parameters pom { project { packaging 'aar' /*项目描述*/ name 'just a test' url siteUrl /*设置证书s*/ licenses { license { name 'The Apache Software License,Version 2.0' url 'http://www.apache.org/licenses/LICENSE-2.0.txt' } } developers { developer { id 'yjh' name 'yjh' email 'yuannunhua@gmail.com' } } scm { connection gitUrl developerConnection gitUrl url siteUrl } } } } } 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)) options.encoding = "UTF-8" //添加UTF-8编码方式 } 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 { user = properties.getProperty("bintray.user") key = properties.getProperty("bintray.apikey") configurations = ['archives'] pkg { repo = "baSEOnMvpLibrary" //对应bintray账号上的仓库名称;发布到Bintray的那个仓库,即你在bintray网站建立的仓库名,若该仓库不存在,会报错。 name = "baSEOnMvpLibrary" //发布到JCenter仓库下的项目名字 websiteUrl = siteUrl vcsUrl = gitUrl licenses = ["Apache-2.0"] publish = true } } }
## This file is automatically generated by Android Studio. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file must *NOT* be checked into Version Control Systems,# as it contains information specific to your local configuration. # # Location of the SDK. This is only used by Gradle. # For customization when using a Version Control System,please read the # header note. #Fri Dec 01 16:08:45 CST 2017 ndk.dir=C\:\\Users\\YJH\\AppData\\Local\\Android\\Sdk\\ndk-bundle sdk.dir=C\:\\Users\\YJH\\AppData\\Local\\Android\\Sdk #bintray上的用户名 bintray.user=yjh #上面在bintray中,已经copy下来的apikey bintray.apikey=bb1e83b4e1da047429738dfacc27420fb9e40bbc相比之前多了两行代码:
#bintray上的用户名 bintray.user=yjh #上面在bintray中,已经copy下来的apikey bintray.apikey=bb1e83b4e1da047429738dfacc27420fb9e40bbc
有一些内容我需要在这里进行指明道破:分别在文件 build.gradle和local.properties 中进行截图说明。如图
在自己的ANDROID STUdio 的终端 Terminal 中执行命令:
检测>>
编译上传>>
当我们在上面的终端中敲入命令,最终的运行结果都是 "BUILD SUCCESSFUL" 时候,说明我们到此的所有操作都是正确的了。这个时候,我们可以看到此时我们之前创建的Repository的名字后面多了一个 单词-package
截止到此时,我们已经成功的把library 上传到了 bintray 的 Respository中。但是目前还不能进行 compile 的依赖,因为我们还需要把package 提交到 jCenter。
点击进入,仍需要这样的操作:
等待审核通过,然后就能 compile 了!!
注意:如果在IDE终端执行命令 gradlew bintrayUpload 出现
FAILURE: Build Failed with an exception. * What went wrong: Execution Failed for task ':mymodule:bintrayUpload'. > Could not upload to 'https://api.bintray.com/content/yjh/baSEOnMvpLibrary/baSEOnMvpLibrary/v1.0.0/com/ztman/cn/mymodule/v1.0.0/mymodule-v1.0.0-javadoc.jar' : HTTP/1.1 409 Conflict [message:Unable to upload files: An art ifact with the path 'com/ztman/cn/mymodule/v1.0.0/mymodule-v1.0.0-javadoc.jar' already exists]
说明
mymodule-v1.0.0-javadoc.jar