美文网首页
Android Studio Gradle 导出多个Jar

Android Studio Gradle 导出多个Jar

作者: TurboHuang | 来源:发表于2017-12-19 19:26 被阅读0次

曾经有那么一个...的需求放在我面前,我没有好好的吐槽。同一份代码,需要导出有区别的Jar,例如分为三个版本,分别为A.jar,B.jar,C.jar:

  1. A.jar 正常项目
  2. B.jar 包含 b.jar(来自另一个项目)
  3. C.jar 包含 c.jar(来自另一个项目)
    本来以为每次改一点,编译出来就行了,反正项目改动不大,结果我错了,由于来自其他项目的jar频繁变动,导致我经常需要导出Jar,每次都要手动去改,很繁琐,还容易出错,
    终于在我被多次摧残以后,我决定利用gradle一次生成多个Jar,Google Baidu了一下,没有类似的文章,由于时间关系,我只能用比较暴力的方式了,参考多渠道APK,我在gradle做了如下修改,关键代码如下:
 buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        pure.initWith(buildTypes.release)
        pure {
            //需要在src下建相应的文件夹,可以在此文件夹写差异化代码
        }

        im.initWith(buildTypes.release)
        im {
            //需要在src下建相应的文件夹,可以在此文件夹写差异化代码
        }
    }
dependencies {
    //    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    provided files('libs/android-support-v4.jar')

    //以下部分不同的版本依赖不同的Jar

    //Debug version
    debugCompile files('libs/xxx.jar')
    debugCompile files('libs/xxx.jar')

    //Integration version
    releaseCompile files('libs/xxx.jar')
    releaseCompile files('libs/xxx.jar')

    //Pure version
    pureProvided files('libs/xxx.jar')
    pureCompile files('libs/xxx.jar')

    //IM version
    imProvided files('libs/xxx.jar')
    imProvided files('libs/xxx.jar')

}
task makeJar(type: Copy, dependsOn: ['build']) {
    //删除存在的
    delete 'build/libs/test.jar'
    //设置拷贝的文件
    from('build/intermediates/bundles/release/')
    //打进jar包后的文件目录
    into('build/libs')
    //将classes.jar放入build/libs/目录下
    //include ,exclude参数来设置过滤
    exclude "**/R.class"
    exclude "**/R\$*.class"
    include('classes.jar')
    //重命名
    rename('classes.jar', 'test.jar')
}

task makeJarPure(type: Copy, dependsOn: ['build']) {
    delete 'build/libs/pure.jar'
    from('build/intermediates/bundles/pure/')
    into('build/libs')
    exclude "**/R.class"
    exclude "**/R\$*.class"
    include('classes.jar')
    rename('classes.jar', 'pure.jar')
}

task makeJarIM(type: Copy, dependsOn: ['build']) {
    delete 'build/libs/im.jar'
    from('build/intermediates/bundles/im/')
    into('build/libs')
    exclude "**/R.class"
    exclude "**/R\$*.class"
    include('classes.jar')
    rename('classes.jar', 'im.jar')
}

这个task只是为了同时执行以上的三个task(如果jar的版本多的话,可以把上面的task定义成一个函数,然后在下面的方法调用),不用一个一个去执行,只要执行releaseJar就可以生成多个版本的Jar了。

task releaseJar(type: Copy, dependsOn: makeJar) {
    dependsOn makeJarPure
    dependsOn makeJarIM

    from('build/libs')
    into('../app/libs')
    include('test.jar')
    include('pure.jar')
    include('im.jar')

    //integration version
    rename('test.jar', 'xxx' + '_release.jar')

    //pure version
    rename('pure.jar', 'xxx'  + '_release.jar')

    //IM version
    rename('im.jar', 'xxx' + '_release.jar')
}

相关文章

网友评论

      本文标题:Android Studio Gradle 导出多个Jar

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