通用 Gradle打包混淆Jar, 合并第三方引用的Jar (Gradle 3.0)

1,677

有向客户提供SDK的需求, 以jar包的形式提供. 我们的项目中引用了第三方的Jar(其实是公司另一个项目的jar), 所以也需要把第三方的jar打到SDK中 搜索网上发现资料都不是很完美, 综合之后, 自己实现gradle脚本.

打包命令 1.未混淆的jar

gradle makeJar

2.混淆过的Jar gradle makeJar_Pro

Gradle 脚本代码如下


task clearJar(type: Delete) {
    delete 'build/libs/livesdk_pro.jar'
    delete 'build/libs/livesdk.jar'

}

task makeJar(type: Jar, dependsOn: ['build']) {
    archiveName = 'livesdk.jar'
    from('build/intermediates/classes/release')
    from(project.zipTree("libs/kk_common_sdk.jar"))

    destinationDir = file('build/libs')
    exclude('com/tvmao/sdk/live/BuildConfig.class')
    exclude('com/tvmao/sdk/live/BuildConfig\$*.class')
    exclude('**/R.class')
    exclude('**/R\$*.class')
}

def androidSDKDir = project.android.sdkDirectory.absolutePath
def androidJarDir = androidSDKDir.toString() + '/platforms/' + "${android.compileSdkVersion}" + '/android.jar'   

task makeJar_Pro(type: proguard.gradle.ProGuardTask, dependsOn: "build") {
// 未混淆的jar
    injars 'build/libs/livesdk.jar'
// 混淆后的jar路径
    outjars 'build/libs/livesdk_pro.jar'
    libraryjars(androidJarDir)
// 具体需要keep住的类
    configuration 'proguard-rules.pro'
    copy {
        from('build/libs/')
        into('/')
        include('livesdk_pro.jar')
        rename('livesdk_pro.jar', 'livesdk_pro_' + sdkvercode + '.jar')
    }
}
makeJar_Pro.dependsOn(makeJar, clearJar, build)

注意, 低版本的gradle 获取SDK dir的方式有所不同.

def androidSDKDir = plugins.getPlugin('com.android.library').sdkHandler.getSdkFolder()
def androidJarDir = androidSDKDir.toString() + '/platforms/' + "${android.compileSdkVersion}" + '/android.jar'