Android组件化之JFrogBintray上传
打包jar
- 对项目执行Make project,执行操作后我们可以在build目录下看到相关Class文件,在generated下看到AIDL文件生成的Class文件
![](https://img.haomeiwen.com/i2229915/efd0c6fc7c84cfe2.png)
![](https://img.haomeiwen.com/i2229915/79557f11ffe5b129.png)
-
配置Android library的build.gradle文件
task makeJar(type: org.gradle.api.tasks.bundling.Jar) { /** * 指定生成的jar名 */ baseName 'shopcart' /** * 从哪里打包class文件 */ from('build/intermediates/classes/debug/com/wz/cartlib') /** * 打包AIDL生成文件 */ from('build/generated/source/aidl/debug/com.wz.cartlib/') /** * 打包到jar后的目录结构 */ into('com/wz/cartlib/') /** * 去掉不需要打包的目录和文件 */ exclude('BuildConfig.class', 'R.class') /** * 去掉R$开头的文件 */ exclude { it.name.startsWith('R$'); } } /** 在终端执行生成JAR包 gradlew makeJar * */ makeJar.dependsOn(clearJar,build)
-
通过AndroidStudio的命令终端执行gradlew makeJar,等待出现BUILD SUCCESSFUL之后代表打包成功
-
打包成功后会在libary的build/libs目录下生成jar包
-
带有资源文件.aar文件
1.将aar包复制到lib目录下
2.配置工程app的build.gradle文件中加入声明
repositories { flatDir { dirs 'libs' } compile(name:'httputils-debug', ext:'aar')
-
在其他app中使用该aar文件时需要在该app的build.gradle文件的dependencies节点进行aar库build.gradle文件中依赖声明
-
参考文章
http://blog.csdn.net/hard_working1/article/details/52639776
上传Android libray 至JFrogBintray
-
注册JForgBintray账号
1.Jcentre官网企业用户 https://bintray.com 个人版:https://bintray.com/signup/oss
image
2.登录Jcentre个人中心,在Originsation下创建Repository
image
image
Repository类似一个大的项目,在这个项目下可以容纳多个子项目,子项目可以进行版本控制 注册成功后可以看到Repositroy主界面
-
配置Gradle相关文件
1.配置Android项目下Gradle文件
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.3' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' //用于打包Maven所需文件 classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6' //用于上传Maven生成的文件到Bintray classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1" //用于上传JFrog Artifactory本地 // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } }
2.在Module下创建bintray.properties文件配置Bintray相关信息
配置bintray账号相关信息 bintray用户名,不是登陆邮箱,是个人中心右上角显示的名字 bintray.user=xiaozhu bintray的ApiKey bintray.apiKey=a1015537bc3d32d94dcdf455e60a0421edee43e2 bintray的Organization Id(组织Id) bintray.organizationId=xiaozhu 配置开发者信息 昵称 developer.id=xiaozhu 姓名 developer.name=xiaozhu 邮箱 developer.email=zy1301529626@gmail.com
3.在Module下创建project.properties文件配置project相关信息
仓库名称,就是在bintray官网建立的仓库的名称 project.repositoryName=maven 项目名称 project.name=cartlib //注意:project名字 与 library名字一致 否则会出现上传文件目录结构问题 项目组id project.groupId=com.wz.cartlib 项目id,一般同project.name project.artifactId=cartlib 打包类型 project.packaging=aar 项目官方网站地址 project.siteUrl=https://github.com/zy1301529626/MakerJcentre 项目git地址 project.gitUrl=https://github.com/zy1301529626/MakerJcentre.git 生成的javadoc名称 javadoc.name=cartlib
4.在Moudle下Gradle文件下配置打包上传相关内容
apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray' /** * 加载bintray属性文件 */ Properties properties = new Properties() File localPropertiesFile = project.file("bintray.properties"); if (localPropertiesFile.exists()) { properties.load(localPropertiesFile.newDataInputStream()) } /** * 加载项目属性文件 */ File projectPropertiesFile = project.file("project.properties"); if (projectPropertiesFile.exists()) { properties.load(projectPropertiesFile.newDataInputStream()) } /** * 读取项目属性 */ def projectRepositoryName = properties.getProperty("project.repositoryName") //仓库名称 def projectName = properties.getProperty("project.name")//项目名称 def projectGroupId = properties.getProperty("project.groupId")//项目Id def projectArtifactId = properties.getProperty("project.artifactId")//一般与项目名称相同 def projectVersionName = android.defaultConfig.versionName //项目版本号 def projectPackaging = properties.getProperty("project.packaging") //项目打包类型 def projectSiteUrl = properties.getProperty("project.siteUrl") //项目地址 def projectGitUrl = properties.getProperty("project.gitUrl") //项目git地址 /** * 读取bintray属性 */ def bintrayUser = properties.getProperty("bintray.user") //bintray用户名 def bintrayApikey = properties.getProperty("bintray.apiKey") //bintray Api Key def bintrayOrganizationId = properties.getProperty("bintray.organizationId") //组织Id def developerId = properties.getProperty("developer.id") //开发者Id def developerName = properties.getProperty("developer.name") //开发者名称 def developerEmail = properties.getProperty("developer.email") //开发者email地址 def javadocName = properties.getProperty("javadoc.name") //javadoc名字 /** * 这句代码一定要加否则会出现如下错误 * Could not upload to 'https://api.bintray.com/content/coolcode/maven/LibUiBase/1.0.0/CommonLibrary/LibUiBase/1.0.0/LibUiBase-1.0.0.pom': HTTP/1.1 400 Bad Request [ message:Unable to upload files: Maven group, artifact or version defined in the pom file do not match the file path 'CommonLibrary/LibUiBase/1.0.0/LibUiBase-1.0.0.p om'] */ group = projectGroupId /** * 配置生成POM.xml文件的参数 */ install { repositories.mavenInstaller { pom { project { name projectName //项目名 groupId projectGroupId //项目Id(一般为唯一包名) artifactId projectArtifactId //一般与项目名相同 version projectVersionName //项目版本号 packaging projectPackaging //打包类型 url projectSiteUrl //项目地址 licenses { license { name 'The Apache Software License, Version 2.0' url 'http://www.apache.org/licenses/LICENSE-2.0.txt' } } developers { developer { id developerId //开发者id name developerName //开发者名字 email developerEmail //开发者email地址 } } scm { connection projectGitUrl developerConnection projectGitUrl url projectSiteUrl } } } } } /** * 生成sources.jar */ 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)) } /** * 生成javadoc.jar */ task javadocJar(type: Jar, dependsOn: javadoc) { classifier = 'javadoc' from javadoc.destinationDir } artifacts { archives javadocJar archives sourcesJar } /** * javadoc的配置 */ javadoc { options { encoding "UTF-8" charSet 'UTF-8' author true version projectVersionName links "http://docs.oracle.com/javase/7/docs/api" title javadocName } } /** * userOrg为bintray账号信息里面的Organization Id * repo为你创建的仓库名称 * 如果上述两个字段写错了,则会出现下面类似的错误 * Could not create package 'huangxuanheng/maven/fragmentstack': HTTP/1.1 404 Not Found [message:Repo 'maven' was not found] * */ bintray { user = bintrayUser key = bintrayApikey configurations = ['archives'] pkg { userOrg = bintrayUser //组织Id repo = projectRepositoryName //代码仓库Id name = projectName //项目名称 websiteUrl = projectSiteUrl vcsUrl = projectGitUrl licenses = ['Apache-2.0'] publish = true } }
5.在Terminal窗口下收入如下指令上传到Bintray
gradlew install gradlew bintrayUpload
-
参考文章
1.http://blog.csdn.net/huang_cai_yuan/article/details/53215131
2.http://blog.csdn.net/lmj623565791/article/details/51148825