Android组件化之JFrog公共上传

AndroidStudio打包Jar/上传library到JFrog Bintray

打包jar

  • 对项目执行Make project,执行操作后我们可以在build目录下看到相关Class文件,在generated下看到AIDL文件生成的Class文件

    image

    image

  • 配置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文件中加入声明

    epositories {
    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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值