将依赖的第三方库打包进自己的jar包

1、先将第三方的库包拿到,然后添加jar包到项目的libs。

2、项目的build.gradle脚本添加下面的task:

 task buildJar(dependsOn: ['compileReleaseJavaWithJavac'], type: Jar) {
appendix = "sample"
baseName = "demo"
version = "1.0.0"
classifier = "release"
//后缀名
extension = "jar"
//最终的 Jar 包名,如果没设置,默认为 [baseName]-[appendix]-[version]-[classifier].[extension]
// archiveName = "AndroidDemo.jar"
//需打包的资源所在的路径集
def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"];
//初始化资源路径集
from srcClassDir
from (project.zipTree("libs/第三方库包.jar"))
destinationDir = file("build/libs")
//去除路径集下部分的资源 exclude "**/**/BuildConfig.class"
exclude "**/**/BuildConfig\$*.class"
exclude "**/R.class"
exclude "**/R\$*.class"
//只导入资源路径集下的部分资源
include "**/*.class"
include "第三方库的包名/**/*/class" }

3、添加好第三方包,以及包名。

4、执行task。

jar 包 混淆:

1、打非混淆的jar包:

 task buildJar(dependsOn: ['compileReleaseJavaWithJavac'], type: Jar) {
appendix = "sample"
baseName = "demo"
version = "1.0.0"
classifier = "release"
//后缀名
extension = "jar"
//最终的 Jar 包名,如果没设置,默认为 [baseName]-[appendix]-[version]-[classifier].[extension]
// archiveName = "AndroidDemo.jar"
//需打包的资源所在的路径集
def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"];
//初始化资源路径集
from srcClassDir
//去除路径集下部分的资源
exclude "**/**/BuildConfig.class"
exclude "**/**/BuildConfig\$*.class"
exclude "**/R.class"
exclude "**/R\$*.class"
//只导入资源路径集下的部分资源
include "**/*.class"
}

2、混淆的jar 包:

(1)修改混淆文件:proguard-rules.pro

(2)执行如下task:

 task proguardJar(dependsOn: ['buildJar'], type: ProGuardTask) {
//Android 默认的 proguard 文件
configuration android.getDefaultProguardFile('proguard-android.txt')
//manifest 注册的组件对应的 proguard 文件
configuration project.buildDir.absolutePath + "/intermediates/proguard-rules/release/aapt_rules.txt"
configuration 'proguard-rules.pro'
String inJar = buildJar.archivePath.getAbsolutePath()
//输入 jar
injars inJar
//输出 jar
outjars inJar.substring(0, inJar.lastIndexOf('/')) + "/proguard-${buildJar.archiveName}"
//设置不删除未引用的资源(类,方法等)
dontshrink
Plugin plugin = getPlugins().hasPlugin(AppPlugin) ?
getPlugins().findPlugin(AppPlugin) :
getPlugins().findPlugin(LibraryPlugin)
if (plugin != null) {
List<String> runtimeJarList
if (plugin.getMetaClass().getMetaMethod("getRuntimeJarList")) {
runtimeJarList = plugin.getRuntimeJarList()
}
else if(android.getMetaClass().getMetaMethod("getBootClasspath")) {
runtimeJarList = android.getBootClasspath()
} else {
runtimeJarList = plugin.getBootClasspath()
}
for (String runtimeJar : runtimeJarList) {
//给 proguard 添加 runtime
libraryjars(runtimeJar)
}
}
}

最新文章

  1. ZeroMQ接口函数之 :zmq_recv – 从一个socket上接收一个消息帧
  2. iOS之block
  3. L2-015. 互评成绩
  4. HDU 5265 pog loves szh II (技巧)
  5. 会场安排问题—NYOJ14
  6. 如何通过js使搜索关键词高亮
  7. 前端编程提高之旅(六)----backbone实现todoMVC
  8. Objective-C和Swift
  9. 修改release management client对应的服务器的地址
  10. mahout 查看kmeans结果的命令
  11. 约瑟夫环(java面向对象实现)
  12. NGUI_Depth
  13. video与audio的使用
  14. JS中some(),every(),forEach(),map(),filter()区别
  15. selenium+python-unittest多线程生成报告
  16. WebApi Owin OAuth
  17. 我的es6笔记
  18. Java语法基础常见疑惑解答8,16,17,21图片补充
  19. 还原一直卡在ASYNC_IO_COMPLETION浅析
  20. XStream将XML转javaben,出现多余的tag,导致出错

热门文章

  1. 全排列递归算法(元素有重复与无重复,C++实现)
  2. 【vue】组件使用Deferred特性
  3. Socket netty ...
  4. java实现多个文件以压缩包导出到本地
  5. smbclient匿名访问win7共享文件夹
  6. UTF-8字符C2A0引起的问题
  7. delphi 获取时间戳 如何得到 和 js 中 new Date().getTime();的 相同?
  8. LeetCode 解题总结
  9. trie上记忆化搜索,括号匹配——cf1152D好题!
  10. 打造vim IDE