1、引用此library,打包apk,生成对应release目录
2、library build.gradle中添加
apply plugin: 'com.android.application'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'net.sf.proguard:proguard-gradle:5.2.1'
}
}
import proguard.gradle.ProGuardTask
def jarPath = 'build/outputs/jar/repackaged.jar'
task makeJar(type: ProGuardTask, dependsOn: "build") {
//删除之前编译混淆jar包
delete jarPath
// 未混淆的jar,不同gradle版本目录不一样,坑坑坑坑坑
// injars 'build/intermediates/packaged-classes/release/classes.jar'
injars 'build/libs/carryFramework.jar'
// 混淆后的jar路径
outjars jarPath
// 混淆文件
configuration 'makejar-rules.pro'
}
3、混淆脚本
##引入依赖包rt.jar(jdk路径)(注意:如在makeJar的时候提示指定了两次,可以将其注释掉)
-libraryjars '/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/rt.jar'
##引入、依赖包android.jar(android SDK路径)(注意:如在makeJar的时候提示指定了两次,可以将其注释掉)
-libraryjars '/Users/xievxin/Library/Android/sdk/platforms/android-23/android.jar'
##如果用到Appcompat包,需要引入(注意:如在makeJar的时候提示指定了两次,可以将其注释掉)
##-libraryjars 'D:\AndroidStudioProjects\MyApplication\mylibrary\build\intermediates\exploded-aar\com.android.support\appcompat-v7\23.4.0\jars\classes.jar'
##-libraryjars 'D:\AndroidStudioProjects\MyApplication\mylibrary\build\intermediates\exploded-aar\com.android.support\support-v4\23.4.0\jars\classes.jar'
-keep class com.xiex.sdk.**{*;}
4、检查对应release目录下有classes.jar,在控制台输入
gradlew makeJar
or
./gradlew makeJar
(注:JD-GUI有缓存,最好将jar拖入的时候换个名字。)
如果过程中还出现报错,很有可能是Gradle版本引起。笔者的环境是:
moudle:
project:
扩展,打指定类文件jar:
task releaseJar(type: Jar) {
baseName "carryFramework"
def fromDir = "${project.buildDir}/intermediates/javac/release/compileReleaseJavaWithJavac/classes/com/carry/"
from fromDir
into('com/carry')
//去掉不需要打包的目录和文件
exclude('BuildConfig.class', 'R.class')
//去掉R$开头的文件
exclude{ it.name.startsWith('R$')}
}
releaseJar.dependsOn build
如果要混淆的话:
buildTypes {
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}