手把手教你一键打出不同配置和不同包名的jar包

 

1.前景

现公司的产品主要是做SDK,因为有需求,需要打包出不同配置和不同包名的SDK,而SDK的功能是一样的。

开始的想法是复制多一份library,需改一下配置,修改一下包名,然后再多执行几次 gradlew makeJar 。

...这个方法有点out,操作起来有点麻烦,而且SDK的需求会不断变化,处理配置和包名其他功能需要同步,一不小心就出错了。

有没有办法同一份library,通过配置,来满足产品的需求呢?

于是有了这篇文章! 下面我将用一个demo来为大家,

要求打出两个jar,区别(参考下边图片):

jar1:包名:"eli.com.library" ,配置:EConfig.webUrl=“http://baidu.com”(EConfig.java中的一个静态变量)

jar2:包名:"eli.com.google",配置:EConfig.webUrl=“http://google.com”

2.动态配置参数

a.在SDK目录下的build.gradle中为其建立productFlavors,并进行webUrl配置。

library.gradle: 

defaultConfig {
        minSdkVersion 9
        targetSdkVersion 28
        flavorDimensions "releaseType"
} 
//动态配置webUrl值
productFlavors {
        baidu {
            dimension "releaseType"
            buildConfigField "String", "WEB_URL", '"http://baidu.com"'
        }
        google {
            dimension "releaseType"
            buildConfigField "String", "WEB_URL", '"http://google.com/"'
        }
 }

EConfig.java

public class EConfig {
    public static String webUrl = BuildConfig.WEB_URL;
}

3.动态修改SDK包名(利用jarjar-1.4.jar进行jar包名修改

a.在项目根目录新建一个jarjar文件夹

b.添加jarjar-1.4.jar 下载地址

c.新建rule_google.txt

rule_google.txt

rule eli.com.library.** eli.com.google.@1

将jar的包名由eli.com.library修改为eli.com.google

d.在library.gradle中添加两个task(makeGoogleJar和changePackGoogle)

def SDK_BASENAME = "EliSDK"
def SDK_VERSION = "_V1.0.0"
def sdkDestinationPath = "build/outputs/jar/"

task deleteBuild(type: Delete) {
    delete sdkDestinationPath
}

task makeJar(type: Jar) {
    def zipFile = file('build/intermediates/classes/baidu/release/')
    from fileTree(zipFile)
    from fileTree(dir: 'src/main', includes: ['assets/**'])
    baseName = SDK_BASENAME + SDK_VERSION + "_baidu"
    destinationDir = file(sdkDestinationPath)
}

//打出webUrl修改了的jar包
task makeGoogleJar(type: Jar) {
    def zipFile = file('build/intermediates/classes/google/release/')
    from fileTree(zipFile)
    from fileTree(dir: 'src/main', includes: ['assets/**'])
    baseName = SDK_BASENAME + SDK_VERSION + "_google"
    destinationDir = file(sdkDestinationPath)
}

//修改包名
task changePackGoogle(type: Exec) {
    def appBuildDir = file("build/outputs/jar/")
    workingDir appBuildDir
    //执行修改包名的命令
    commandLine 'java', '-jar', '../../../../jarjar/jarjar-1.4.jar', 'process', '../../../../jarjar/rule_google.txt', SDK_BASENAME + SDK_VERSION + "_google" + ".jar", SDK_BASENAME + SDK_VERSION + "_google" + ".jar"
}

changePackGoogle.dependsOn makeGoogleJar//执行changePackGoogle Task前先执行makeGoogleJar Task


makeJar.dependsOn(deleteBuild, build)
makeJar.finalizedBy changePackGoogle//执行makeJar Task后执行changePackGoogle Task

e.最后clean——>gradlew makeJar 会生成两个jar包

 

 

Demo地址:GitHub

 

参考文章:

Android Studio 打包时动态修改aar 包名称

https://blog.csdn.net/MyLero/article/details/78969586?utm_source=blogxgwz8

jar包冲突解决--jarjar工具修改jar包名

https://blog.csdn.net/weixin_42310890/article/details/81261831

写个Gradle脚本来干活--遍历&执行java命令

https://blog.csdn.net/MyLero/article/details/78969586?utm_source=blogxgwz8

Gradle tip #3-Task顺序

https://blog.csdn.net/lzyzsd/article/details/46935405

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值