美文网首页
Android组件化之JFrogBintray上传

Android组件化之JFrogBintray上传

作者: heyzhuyue | 来源:发表于2017-05-11 15:41 被阅读40次

    打包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文件中加入声明

      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

    相关文章

      网友评论

          本文标题:Android组件化之JFrogBintray上传

          本文链接:https://www.haomeiwen.com/subject/dkiotxtx.html