Android - Gradle 使用干货 之 生成 jar 包 和 生成混淆的 jar 包 和 上传 artifactory

Android - Gradle 使用干货 之 生成 jar 包 和 生成混淆的 jar 包 和 上传 artifactory

1. 前言

Android - Gradle 使用干货 之 artifactory仓库上传arr 配置

前面已经说了上传本地仓库的使用方法,这篇将生成 jar 包 和 混淆 jar 包 并上传到 本地仓库;

2. 生成 jar 包

使用 gradle 的 自定义任务 生成 jar 包,比如:

task buildJar(dependsOn: ['assembleRelease'], type: Jar) {    //后缀名    extension = "jar"    //最终的 Jar 包名    archiveName = "${project.getName()}-release.jar"    //需打包的资源所在的路径集    def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"];    //初始化资源路径集    from srcClassDir}

说明:

buildJar 任务 依赖于 assembleRelease task , 在 执行该任务的时候,会先执行 asembleRelease 任务,后再将 release 的内容 buildjar

生成文件在 : module_name/build/libs/xxx-release.jar


3. 混淆 jar 包

想要混淆 jar 包 ,需要先生成 jar 包 ,后再混淆,新建混淆任务:

task buildProguardJar(dependsOn: ['buildJar'], type: ProGuardTask) {    //Android 默认的 proguard 文件, 默认的混淆文件有时候出错    //configuration android.getDefaultProguardFile('proguard-android.txt')    //会根据该文件对 Jar 进行混淆,注意:需要在 manifest 注册的组件也要加入该文件中    configuration 'proguard-rules.pro'    String inJar = buildJar.archivePath.getAbsolutePath()    //输入 jar    injars inJar    //输出 jar    outjars inJar.substring(0, inJar.indexOf(".")) + "_proguard.jar"    //设置不删除未引用的资源(类,方法等)    dontshrink    AppPlugin appPlugin = getPlugins().findPlugin(AppPlugin)    if (appPlugin != null) {        List<String> runtimeJarList        if (appPlugin.getMetaClass().getMetaMethod("getRuntimeJarList")) {            runtimeJarList = appPlugin.getRuntimeJarList()        } else if (android.getMetaClass().getMetaMethod("getBootClasspath")) {            runtimeJarList = android.getBootClasspath()        } else {            runtimeJarList = appPlugin.getBootClasspath()        }        for (String runtimeJar : runtimeJarList) {            //给 proguard 添加 runtime            libraryjars(runtimeJar)        }    }}

说明 :

执行该任务时,依次会执行的任务:

先进行 release 编译,其次 生成 jar 包 ,最后 混淆 jar

buildProguardJar <= buildJar <= assembleRelease

混淆后文件:module_name/build/libs/xxx-release_proguard.jar


4. build.gradle

import com.android.build.gradle.AppPluginimport proguard.gradle.ProGuardTaskapply plugin: 'com.android.library'apply from: "$rootDir/config.gradle"apply plugin: 'com.jfrog.artifactory'apply plugin: 'maven-publish'def MAVEN_LOCAL_PATH = urls.localUploadPathdef ARTIFACT_ID = artifactIds.coredef VERSION_NAME = versions.coredef GROUP_ID = groupIds.core// 编译类型:1 不混淆,2 混淆 ,无需修改,执行不同命令生成不同的jar文件def build_type = 1/** * 执行命令: * (这是一条命令) * gradle :core:buildJar * :core:generatePomFileForMavenJavaPublication * :core:artifactoryPublish */android {    compileSdkVersion versions.complieSdk    buildToolsVersion versions.buildTools    defaultConfig {        minSdkVersion versions.minSdk        targetSdkVersion versions.targetSdk        versionCode versions.code        versionName versions.name    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    compile libs.gson    //ok http    compile libs.okhttpLib    compile libs.okhttpInterceptor    //retrofit2    compile libs.retrifit2Lib    compile libs.retrifit2Gson    compile libs.retrifit2Rxjava2Adapter    //rx java2    compile libs.rxJava2    compile libs.rxAndroid    //glide    compile libs.glide}publishing {    publications {        mavenJava(MavenPublication) {            groupId GROUP_ID            version = VERSION_NAME            artifactId ARTIFACT_ID            // Tell maven to prepare the generated "*.jar" file for publishing            println(build_type)            def artifactPath = "$buildDir/libs/${project.getName()}-release.jar"            if (build_type == 2) {                artifactPath = "$buildDir/libs/${project.getName()}-release_proguard.jar"            }            println(artifactPath)            artifact(artifactPath)        }    }}artifactory {    contextUrl = MAVEN_LOCAL_PATH    publish {        repository {            // The Artifactory repository key to publish to            repoKey = localRespos.repoName            username = localRespos.userName            password = localRespos.password            maven = true        }        defaults {            publications('mavenJava')            publishArtifacts = true            publishPom = true        }    }    resolve {        repoKey = 'jcenter'    }}task buildJar(dependsOn: ['assembleRelease'], type: Jar) {    build_type = 1    //后缀名    extension = "jar"    //最终的 Jar 包名    archiveName = "${project.getName()}-release.jar"    //需打包的资源所在的路径集    def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"];    //初始化资源路径集    from srcClassDir}task buildProguardJar(dependsOn: ['buildJar'], type: ProGuardTask) {    //Android 默认的 proguard 文件    //configuration android.getDefaultProguardFile('proguard-android.txt')    //会根据该文件对 Jar 进行混淆,注意:需要在 manifest 注册的组件也要加入该文件中    configuration 'proguard-rules.pro'    String inJar = buildJar.archivePath.getAbsolutePath()    //输入 jar    injars inJar    //输出 jar    outjars inJar.substring(0, inJar.indexOf(".")) + "_proguard.jar"    //设置不删除未引用的资源(类,方法等)    dontshrink    AppPlugin appPlugin = getPlugins().findPlugin(AppPlugin)    if (appPlugin != null) {        List<String> runtimeJarList        if (appPlugin.getMetaClass().getMetaMethod("getRuntimeJarList")) {            runtimeJarList = appPlugin.getRuntimeJarList()        } else if (android.getMetaClass().getMetaMethod("getBootClasspath")) {            runtimeJarList = android.getBootClasspath()        } else {            runtimeJarList = appPlugin.getBootClasspath()        }        for (String runtimeJar : runtimeJarList) {            //给 proguard 添加 runtime            libraryjars(runtimeJar)        }        build_type = 2    }}

生成不混淆的 jar 包 并上传到 本地仓库:
(这是一行命令)

gradle :core:buildJar :core:generatePomFileForMavenJavaPublication :core:artifactoryPublish

生成混淆的 jar 包 并上传到 本地仓库:

gradle :core:buildProguardJar:core:generatePomFileForMavenJavaPublication :core:artifactoryPublish

附上粗糙的执行运行图:


推荐阅读

    学习写字楼新选择6000元主流配置

    学习写字楼新选择6000元主流配置,,这种配置需要考虑双核心的办公和娱乐平台,充分考虑办公室的办公需求和娱乐需求,以约6000元的预算和cost-e

    酷睿I7 配置

    酷睿I7 配置,配置,玩家国度啦华硕 Rampage II Extreme(3800元)如果米不够,也可以把Extreme改为Gene,不过是小板内存推荐金士顿6G DDR3 2000骇

    鼠标不能拖动文件了

    鼠标不能拖动文件了,鼠标,拖动,本文目录鼠标不能拖动文件了电脑鼠标无法拖动软件图标了,怎么办鼠标不能滚动怎么调整电脑鼠标不能进行任何

    提高3A四核羿龙II游戏配置的性能

    提高3A四核羿龙II游戏配置的性能,,以节能环保为主题的IT产业,目前3A低端平台处理器、主板芯片组、独立开发卡性能突出,特别是在与AMD的处理

    opporeno8参数配置及价格

    opporeno8参数配置及价格,面部,亿元,Oppo的荣誉2020年1月4日,接近屏幕关闭传感器是否支持双卡:支持oppor11splus什么时候上市的Oppo R11S P

    查看配置:酷睿i3530集展示办公平台

    查看配置:酷睿i3530集展示办公平台,,由于时间和精力的关系,我们不可能对所有的配置进行评论,希望我们能理解,我希望我们的评论能在那些需要帮

    3500元超额值学生娱乐结构的优化配置

    3500元超额值学生娱乐结构的优化配置,,作为一个DIY的主流用户领域的学生,每个用户51学生攒机的高峰。因为学生用户没有稳定的收入来源,攒机