您当前的位置: 首页 >  ar

小枫_S

暂无认证

  • 3浏览

    0关注

    42博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

小枫_S 发布时间:2017-05-18 14:25:30 ,浏览量:3

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

关注
打赏
1495089800
查看更多评论
立即登录/注册

微信扫码登录

0.0530s