创建一个Android module 和一个AndroidLibrary module
在jardemo下的gradle文件中编写对应的导Jar包Task和混淆Task
1.导Jar包Task
task makeJar(type: Jar, dependsOn: ['compileReleaseJavaWithJavac']) {
appendix = 'demo'
baseName = 'AndroidJar'
version = '1.0.0'
classifier = 'release'
//后缀名
extension = 'jar'
//最终的 Jar 包名,如果没设置,默认为 [baseName]-[appendix]-[version]-[classifier].[extension]
//archiveName = 'Demo.jar'
//需打包的资源所在的路径集
def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"]
//初始化资源路径集
from srcClassDir
//去除路径集下部分的资源
exclude 'com/scott/jardemo/BuildConfig.class'
exclude '**/R.class'
exclude '**/R\$*.class'
//只导入资源路径集下的部分资源
include 'com/scott/jardemo/**/*.class'
}
在Teminal中cd jardemo 进入jardemo目录下,敲命令 gradle makeJar 执行完毕就将Jar导出来了,在build/lib 下
使用jd-gui.exe打开如下
如果要在MANIFEST.MF中添加其他的信息,下篇文章继续说。
这里简单说下,type是Jar,这个就不用说了,dependsOn的意思是依赖于哪个任务,在执行这个任务之前会先执行依赖的任务
2.混淆jar包
task proguardJar(dependsOn: ['makeJar'], type: proguard.gradle.ProGuardTask) {
//Android 默认的 proguard 文件
configuration android.getDefaultProguardFile('proguard-android.txt')
//manifest 注册的组件对应的 proguard 文件
configuration 'proguard-rules.pro'
String inJar = makeJar.archivePath.getAbsolutePath()
//输入 jar
injars inJar
//输出 jar
outjars inJar.substring(0, inJar.lastIndexOf(File.separator)) + "/proguard-${makeJar.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)
}
}
proguard-rules.pro文件
这里我没有做什么代码过滤混淆的,只写了一句
#忽略警告
-ignorewarnings
执行gradle proguardJar 执行完毕生成混淆包
本文到此结束。