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