天天看点

android 将module打包成jar文件供其他工程使用

GitHub地址:https://github.com/linliangliang/TestHttp

module可以打包成jar文件和aar文件,

.jar:只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件。

.aar:包含所有资源,class以及res资源文件全部包含。

我们下面只介绍导出jar文件。

android 将module打包成jar文件供其他工程使用

如图:app module是主modul,用来测试导出的jar文件是否可用的。baseprolib module是新建的module,用来生成jar包的,在baseprolib中封装android常用到的功能类,如LogUtil类,ToastUtil类等,这些工具类可以用在所有项目中,所有打包出来。

baseprolib的build.gradle文件设置

apply plugin: 'com.android.library'
//apply plugin: 'com.android.application'


android {
    compileSdkVersion 26

    defaultConfig {
        //applicationId "com.zhengyuan.baseprolib"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 101
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
    task makeJar(type: Copy) {
        //删除存在的
        delete 'build/libs/utillib.jar'
        //设置拷贝的文件
        from('build/intermediates/bundles/release/')
        //打进jar包后的文件目录
        into('build/libs/')
        //将classes.jar放入build/libs/目录下
        //include ,exclude参数来设置过滤
        //(我们只关心classes.jar这个文件)
        include('classes.jar')
        //重命名
        rename('classes.jar', 'utillib.jar')
    }
    makeJar.dependsOn(build)
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:0.5'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2'
}
           

apply plugin: 'com.android.application'改成apply plugin: 'com.android.library'

去掉:applicationId "com.zhengyuan.baseprolib"

然后写好工具类

android 将module打包成jar文件供其他工程使用

然后rebuild project后可以在baseprolib->build->intermediates->bundles中可以看见一个class.jar文件

为了方便,我们对其重命名并改变一下生成的路径,可以看到在module的build.gradle中有一段

task makeJar(type: Copy) {
        //删除存在的
        delete 'build/libs/utillib.jar'
        //设置拷贝的文件
        from('build/intermediates/bundles/release/')
        //打进jar包后的文件目录
        into('build/libs/')
        //将classes.jar放入build/libs/目录下
        //include ,exclude参数来设置过滤
        //(我们只关心classes.jar这个文件)
        include('classes.jar')
        //重命名
        rename('classes.jar', 'utillib.jar')
    }
    makeJar.dependsOn(build)
           

这段代码就是重命名,改生成路径的task。但是这段代码不能直接起作用需要,需要在Teminal中输入“gradlew makeJar”执行一些

第一次编译会比较久,需要下载一些东西,我第一次操作报错了,原因是有些东西需要翻 qiang下载。第二次也执行失败,原因是第一次下了一半有缓存,将c盘->user->username->.gralde->caches->moudles-2文件夹删除了。搭上梯子后重新执行。

Teminal执行成功后可以在build/libs/中看见utillib.jar,这个就是打包出来的jar文件。

为了在app module中使用这个jar文件中的类,需要将生成的utillib.jar拷贝到app module的lib文件夹下面,然后在app module的build.gradle中的依赖中添加

Implementation project (':utillib.jar')

即可使用jar包中封装的类