zoukankan      html  css  js  c++  java
  • 使用gradle打包jar包

    近期用android studio来做android开发的IDE,它是使用gradle来构建的,于是開始学习gradle.

    如今有一个项目,里面有一个android-library的模块。我想在做release的时候,把这个模块中我写的代码编译并打包成jar包,而且和依赖的jar包拷贝出来,但android studio对android-library的管理是把其与依赖包打包成一个aar的包的,显示这不是我要的,于是便想用gradle来实现。

    首先我找到的第一种方法是在模块中的build.gradle添加�一个编译jar包的task.代码例如以下:

    task releaseJar(type:Jar) {
        from sourceSet.main.java
        destinationDir = file('build/libs')
    }

    可是运行的时候,却提示里面的Log类找不到。显示用这样的方法仅仅能编译一般的java文件,无法编译用到了android库的源文件。可能是还要在哪里加入�依赖吧。


    另外一种方法是在stackoverflow中找到的,它也确实能打包成jar包。代码例如以下:

    android.libraryVariants.all { variant ->
        def name = variant.buildType.name
        if (name.equals(com.android.builder.BuilderConstants.DEBUG)) {
            return; // skip debug builds
        }
        def task = project.tasks.create "jar${name.capitalize()}, Jar
        task.from variant.javaCompile.destinationDir
        artifacts.add('archives', task)
    }

    然后运行gradle jarRelease就能够了。

    可是它会把我的R.java也编译进去,并且这个文件又非常大。我原来的代码编译之后打包才不到13K,加上编译这个文件的话,要28K。


    第三种方法就比較取巧了。这是由于gradle在构建的时候,会对这个模块的class文件先打包成classes.jar并放在build/bundles/release。于是我仅仅须要把它拷出来,并重命名就能够了。

    于是代码例如以下:

    task releaseJar(type: Copy) {
        from( 'build/bundles/release')
        into( 'build/libs')
        include('classes.jar')
        rename('calsses.jar', 'superlog' + VERSION_NAME + '.jar')
    }
    
    task releaseLib(type: Copy, dependsOn: releaseJar) {
        into "../../release"
        from 'libs'
        from 'build/libs'
    }

    当中VERSION_NAME是我定义的一个变量,在gradle.properties文件里。该文件与gradle.build在同级文件夹。

  • 相关阅读:
    MySQL约束条件
    MySQL基本数据类型
    MySQL基本sql语句,存储引擎,创建表的语法,严格模式
    MySQL环境变量配置及系统服务制作,设置及修改密码,跳过授权表并重置密码,统一编码
    数据库及SQL语句由来,重要概念介绍,MySQL安装,启动服务端及连接,初识SQL语句
    图书管理系统前端页面搭建
    Bootstrap组件2
    c#版工作流之流程发起(3)
    C#版工作流运行机制(1)
    c#版本工作流引擎状态机(2)
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4024136.html
Copyright © 2011-2022 走看看