Android Studio使用gradle导出jar包并混淆代码代码记录一

创建一个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 执行完毕生成混淆包
这里写图片描述
这里写图片描述
本文到此结束。

猜你喜欢

转载自blog.csdn.net/q919233914/article/details/72466585
今日推荐