热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

gradlejava文件合并_FatJar:适用于sdk多module打包和合并多个jar的gradle插件

usage:1.下载fatJar.gradle放置于project根目录2.在project的build.gradle中添加依赖和配置:applyfro

10173813_qa4D.jpg

usage:

1.下载fatJar.gradle放置于project根目录

2.在project的build.gradle中添加依赖和配置:

apply from: 'fatJar.gradle'

buildscript {

dependencies {

classpath 'xyz.bboylin:FatJarPlugin:1.0.5'

}

}

//可配置项

fatJarExt {

//这里可配置需要打包的module名和需要加入的第三方jar绝对路径

jarPaths = ["/github/okhttp.jar",

"libtwo",

"commonlib"]

//配置需要添加assets的module名,没有可删掉此项

assetsPaths = ["libtwo","commonlib"]

//最后output的jar名

output = "result.jar"

//manifest中created-by的值

owner = "your name or your organization"

//manifest中version的值

version = 'your sdk version'

//只打debug包的话加上这句,只打release包的话不加

isDebug = true

}

3.项目根目录下命令行执行gradlew fatJar即可。

10173815_V3Gy.png

注意:

如果你的module不在项目根目录下,比如D:\MyApplication\components\libone和D:\MyApplication\components\player\bdplayer,D:\MyApplication是我的项目根目录,那你不能直接写"libone",要改为"components:libone",即module用相对路径。示例:

fatJarExt {

jarPaths = ["/github/okhttp.jar"

,"libtwo",

,"commonlib"

,"components:libone"

,"components:player:bdplayer"]

assetsPaths = ["libtwo"

,"components:libone"

,"components:player:bdplayer"]

//最后output的jar名

output = "result.jar"

//manifest中created-by的值

owner = "your name or your organization"

//manifest中version的值

version = 'your sdk version'

//只打debug包的话加上这句,不加默认只打release包

isDebug = true

}

示例

apply plugin: 'FatJarPlugin'

def ROOT_BUILD_PATH = project.buildDir.absolutePath

def JAR_NAME = "ParserEngine_${buildInfo.version}.jar"

def BUBBLE_ASSETS_PATH = "${rootProject.rootDir.absolutePath}/Engines/BubbleEngine/src/main/assets"

def CARD_PARSER_ASSETS_PATH = "${rootProject.rootDir.absolutePath}/Engines/CardEngine/src/main/assets"

def BUBBLE_ASSETS_FILES = ["sms_bubble_stable_ac.index", "sms_bubble_stable_others.index", "sms_bubble_stable_regex.db"]

def CARD_RULE_ASSETS_FILES = ["sms_card_stable_ac.index", "sms_card_stable_others.index", "sms_card_stable_regex.db"]

def CARD_PARSER_ASSETS_FILES = ["parser.dic", "parser.zip"]

def SDK_OUT_PATH = "${ROOT_BUILD_PATH}/sdk_out_temp"

def SDK_ZIP_NAME = "parser_engine_${buildInfo.version}.zip"

def SO_PATH = "${rootProject.rootDir.absolutePath}/ParserEngine/src/main/jniLibs"

//依赖assembleDebug或者assembleRelease

fatJarTask.dependsOn({

def tasks &#61; new ArrayList<>()

def taskName &#61; fatJarExt.isDebug ? ":assembleDebug" : ":assembleRelease"

fatJarExt.jarPaths.each {

if (!it.contains(".jar")) {

tasks.add(":" &#43; it &#43; taskName)

}

}

return tasks.toArray()

})

//可配置项

fatJarExt {

jarPaths &#61; ["ParserEngine", "commonlib", "ActionLib"]

output &#61; JAR_NAME

owner &#61; "parserengine_${buildInfo.version}_${buildInfo.vcs_version}_${buildInfo.build_time}"

// version &#61; buildInfo.version

// isDebug &#61; true

}

task copySDK(type: Copy, dependsOn: [":fatJarTask"]) {

delete JAR_NAME

delete SDK_OUT_PATH

delete "$ROOT_BUILD_PATH/$SDK_ZIP_NAME"

into(&#39;/jniLibs&#39;) {

from SO_PATH

}

into(&#39;/libs&#39;) {

from JAR_NAME

}

into(&#39;/assets&#39;) {

def allFiles &#61; []

allFiles.addAll(BUBBLE_ASSETS_FILES.collect { "${BUBBLE_ASSETS_PATH}/${it}" })

allFiles.addAll(CARD_PARSER_ASSETS_FILES.collect { "${CARD_PARSER_ASSETS_PATH}/${it}" })

allFiles.addAll(CARD_RULE_ASSETS_FILES.collect { "${CARD_PARSER_ASSETS_PATH}/${it}" })

from allFiles

}

destinationDir(file(SDK_OUT_PATH))

}

task makeSDK(type: Zip, dependsOn: [copySDK]) {

from SDK_OUT_PATH

archiveName SDK_ZIP_NAME

destinationDir(file(ROOT_BUILD_PATH))

}



推荐阅读
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
author-avatar
冷尔岚钰_820
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有