首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

2020年支持java8的Java反编译工具汇总

我们知道,在代码支撑方面,JDK 1.7引入了字符串Switch、泛型接口改进等新功能,1.8增加了lambda表达式、方法传递、多重注解等新特性,这使得反编译工具的编写难度加大。...Procyon-Decompiler支持JDK1.8类的反编译,在很多方面做得非常不错:字符串的Switch、枚举声明方面、注解方面、匿名类、内部类、Java8新接口规范、Java8 Lambda表达式...luyten是Procyon的GUI,是一款操作简单、功能实用的java反编译工具,软件支持*.JAR、*.zip、*.class等类型文件的反编译操作,还原度非常高,支持更多功能设置,如显式导入、类型...3、Android反编译gui工具Jadx jadx是一款Android反编译gui工具,它支持apk、dex、jar、class、zip、aar等文件。...三个工具中JD-GUI打开jar文件反编译速度飞快、luyten次之、Jadx最慢(有时候需要等好一会,喝杯咖啡先)。三者都会遇到反编译不出来的情况,建议配合使用。

77120
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    开发工具总结(2)之全面总结Android Studio2.X的填坑指南

    自定义android studio的配置文件目录后,无法正常安装和卸载插件(貌似2.0版本之后的插件安装卸载就有问题了)是何原因?...sources/android-25" /> 修改后的部分配置文件如下:注意红色方框部分,找到对应的编译版本,再添加对应的源码位置 ?...点开之后发现了一个pom.xml,这里面就是关于这个jar的一些配置文件,往下找,发现了一个依赖库的引用, 复制里面groupId,到你的app的build.gradle里,找到那个依赖,添加{exclude...3.看看是不是Dex越界引起的问题。在项目的build.gradle文件中添加以下代码: multiDexEnabled true 重新编译之后,项目成功移植了。 23....切换编译语言格式 此时会弹出窗口提示是否重载文件,选择“Reload”,基本也可以搞定。 ? 如果设置之后还是不行,建议clean一下,重启一下Android Studio。

    1.8K10

    《Kotin 极简教程》第16章 使用 Kotlin Native第16章 使用 Kotlin Native《Kotlin极简教程》正式上架:

    Kotlin Native能把 Kotlin代码直接编译成机器码,也就是站在了跟 C/C++、Go和Rust的同一个层次,于是这个领域又添一位竞争对手。...名称,在 build 之后会生成以这个名称命名的 KotlinorApp.kexe 可执行程序。...但是,在体验的过程中我们也发现整个过程比较手工化,显得比较繁琐(例如手工新建各种配置文件、手工使用 clang 编译C 代码等)。...我们可以看出,在Mac OS上,我们可以使用 Kotlin Native 编译android_arm32、android_arm64、iphone、macbook等目标平台的机器码可执行的程序。...它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime

    1.3K30

    Android5.0和6.0之后新增的控件说明

    为此,博主初步整理了Android在5.0和6.0之后的新增控件,及其对应的说明博文,给大家提供一个可资学习和借鉴的索引。...Android 6.0 以上的新控件,在项目中使用的时候,可分为三大类: 1、第一类是内核提供的控件,位于SDK的android.jar中。...这个与系统版本有关,每个版本的android.jar是固定的,有在该内核中定义的控件才能正常调用,没在内核中定义的控件在运行时会扔出类找不到的异常。...比如水波图形RippleDrawable和矢量图形VectorDrawable,这两个控件在Android5.0之后的系统内核中提供,所以只有系统版本不低于5.0的手机才能使用它们,运行4....v4库默认会被编译进App的安装包,所以它不需要系统内核支持,可直接运行在4.0之后的所有系统上,并且App工程无需手工导入v4库。

    1.3K20

    26款优秀的Android逆向工程工具

    工欲善其事必先利其器,好的Android逆向工程工具在逆向破解工程中起到事半功倍的作用。 1....DARE Dare是宾州大学计算机系发布的apk逆向工程工具,可以将Android系统中使用的apk文件反编译为JavaClass文件,这些Class文件随后可以通过现有的Java工具(包括反编译)进行处理...目前支持Linux和Mac OS X中使用。 9. DEX2JAR dex2jar是一个能操作Android的dalvik(.dex)文件格式和Java的(.class)的工具集合。...它有进行控制流分析,以及类型推断,也支持java8特性,其开发者为Mike Strobel。 21. FERNFLOWER Fernflower是一个对Java程序进行反编译分析的利器。...当插件状态被激活之后,它会将每一个单独的类文件加载进BCV中,这样一来,用户就可以使用ASM来控制这些加载的类文件了。 25.

    7.9K31

    graduation和completion_guides和maven区别

    :gradle 工具也升级到了3.0.0,在3.0.0中使用了最新的Gralde 4.0 里程碑版本作为gradle的编译版本,该版本gradle编译速度有所加速,更加欣喜的是,完全支持Java8。...在com.android.tools.build:gradle 3.0 以下版本依赖在gradle 中的声明写法 compile fileTree(dir: 'libs', include: ['*.jar...implement指令 使用了该命令编译的依赖,它仅仅对当前的Moudle提供接口。 优点:1. 加快编译速度。2. 隐藏对外不必要的接口。...provided(compileOnly) 只在编译时有效,不会参与打包 可以在自己的moudle中使用该方式依赖一些比如com.android.support,gson这些使用者常用的库,避免冲突...testCompile(testImplementation) testCompile 只在单元测试代码的编译以及最终打包测试apk时有效。

    25730

    Android连接 Mysql: 解决mysql-connector-java驱动编译时Dex cannot parse version 52 byte code...等错误

    因此想到了在Android端用mysql-connector-java驱动包直接访问服务器上的数据库(首先说明这是可行的)。...于是去Mysql官网找到了最新版的jar包下载,直接把mysql-connector-java-5.1.40-bin.jar(开发版最新为6.0.5)引入Android工程,(我用的是Android Studio...错误的意思大概是这个包不支持Java8(52是Java8的字节码版本号),需要你去build.gradle里手动修改项目的兼容性到1.7。网上查了很多很多资料都是这个解决办法,然而并无用。...然后我在Intellij IDEA下建了个普通的Java工程,连接数据库的代码不变,同样引入jar包,居然成功了(能够远程连接我云服务器上的数据库并进行数据操纵)。...因此,看来这并不是什么Java版本的问题,而是mysql-connector-java-5.1.40-bin.jar这个版本的驱动和Android编译不兼容的问题,最后,通过Google找到了解决办法。

    1.5K30

    一个Java9特性导致的编译失败 | 疑难杂症

    所以在dexbuilder构建的时候其实已经完成了混淆了。所以我们要从mapping中去找到这个类混淆前产物。之后我们才能根据这个类文件产物去盘他。 而且这个类名也比较骚哦,他竟然叫a.class。...module-info的描述上来看,这并不是一个一定需要的东西,他是一个对外部输出的描述信息,告诉你当前jar的一些模块化信息而已,所以如果使用低版本来进行编译,特别是安卓这种,就必然会出现这个奇怪的问题...我对module-info.class的类进行过滤,因为前文介绍过着是java9模块化使用的,也就是说在低版本上有没有这个类,其实完全没有用,他并不会实际被使用到。...剩下的就是对jar包内的处理逻辑了,因为jar涉及到拆包之后重新组包的逻辑,虽然其实也不复杂,但是各位还是要注意这部分。...扫描逻辑,当前的操作比较简单,如果发现文件名是module-info,则在生成新的jar的时候对这个文件进行跳过操作,就这么点。

    1.3K20

    Java8新特性及使用(二)

    更好的类型推测机制 Java 8在类型推测方面有了很大的提高。在很多情况下,编译器可以推测出确定的参数类型,这样就能使代码更整洁。...在Java 7中,相同的例子将不会通过编译,正确的书写方式是Value.defaultValue()。 3....String.getBytes()方法的性能;还增加了一些新的IO/NIO方法,使用这些方法可以从文件或者输入流中获取流(java.util.stream.Stream),通过对流的操作,可以简化文本行处理...它接受class文件、目录、jar文件作为输入,默认情况下,jdeps会输出到控制台。 作为例子,让我们看看现在很流行的Spring框架的库的依赖关系报告。....RELEASE.jar这个命令输出内容很多,我们只看其中的一部分,这些依赖关系根绝包来分组,如果依赖关系在classpath里找不到,就会显示not found.

    66330

    Android7.0新特性

    启用该模式,系统将拦截后台数据使用,在适当的情况下减少前台应用使用的数据量,通过配置厂商白名单可以让应用免受该模式的影响。...支持Java8 Java8的支持使得可以在Android开发者使用Lambda表达式 后台省电 屏幕关闭后后台进程将会被系统限制活动。...禁用多窗口模式 在targetSdkVersion大于24时在清单文件中加入resizeableActivity=false这个属性当开启多窗口模式时会提示用户该应用不支持多窗口; 在小于24的情况下是通过设置禁用横竖屏切换属性来设置不支持多窗口模式的...:在当前activity加入该属性:screenOrientation="portrait" Jit编译器 在 Android N 中,添加了 Just in Time (JIT) 编译器,它可以对 ART...这个功能还有助于减少整个 RAM 占用,包括关联的二进制文件。 此功能对于低内存设备非常有意义。同时,它可以最大程度降低对设备电池的影响,能够使系统更省电,因为仅当设备处于空闲状态和充电时才进行编译。

    39620

    Android编译优化:D8和R8

    回到Android,我们的代码是需要跑在容量更小,电量更小的移动设备当中,JVM那套就不太适用了,所以Google就针对Android开发了Dex编译器来编译dex格式的字节码,而运行Dex字节码的Android...= Java SE,Java7开始引入的新语言特性不能直接用在Android开发中,为了能够用上Java8新特性,Google增加了一步编译过程—脱糖(desugaring),但这一步会导致更长的编译时间...脱糖 即在编译阶段将在语法层面一些底层字节码不支持的特性转换为基础的字节码结构,(比如 List 上的泛型脱糖后在字节码层面实际为 Object);Android 工具链对 Java8 语法特性脱糖的过程可谓丰富多彩...编译更快、时间更短 DEX编译时占用内容更小 .dex文件更小 D8编译的.dex文件拥有相同或者更好的运行性能 如果你的工程已经使用Java 8尽可能开启D8编译,不然可能会出现编译错误。...如果你不想开启R8,可以在gradle.properties里添加如下配置: android.enableR8=false 开启R8的好处 代码缩减: 规避64引用限制 资源缩减: 移除不使用的资源 混淆代码

    2.5K40

    在Android项目中使用Java8

    Android平台不支持Java8,如果我们想在Android项目中使用Lambda表达式、Stream API等Java8中的新特性就必须使用Retrolambda、Lightweight-Stream-API...遗憾的是目前Android平台仅支持Java8的部分新特性,当我们在开发面向Android N及以上版本的应用时(即minSdkVersion>=24),可以使用如下新特性: Lambda表达式(Lambda...新的 Android 工具链将 Java 源语言编译成 Android 可读取的 Dalvik 可执行文件字节码,且有其自己的 .jack 库格式,在一个工具中提供了大多数工具链功能:重新打包、压缩、模糊化以及...进行上述配置后大家就可以在Android项目中尽情的探索使用Java8的新特性了。...等编译方案也会有影响,没做过验证,有了解的同学可以在评论区留言和大家交流下);总之要想在Android项目中愉快的使用Java8全部的新特性还需时日。

    1.1K60

    支持多JDK版本下运行的Jar文件打包方式

    本文内容:在Java 9增强了JAR多版本字节码文件格式的支持,同一个Jar包可以包含多个Java版本的class文件。...一、基本使用方法 多版本的字节码发行jar包,需要在其MANIFEST.MF中做以下的声明: Multi-Release: true 在jar包的META-INF/versions文件目录里面可以包含多个版本的...如果jar包是在JDK 8的运行时环境下运行,将使用根目录下面的class文件进行程序运行。...如果jar包是在JDK 9的运行时环境下运行,将使用META-INF/versions/9/ 下面的class文件进行程序运行。...编译 将Java8 、Java9的IOUtil.java代码分别在JDK8、JDK9的版本下分别编译成class字节码文件,并将class文件按照如下的目录结构打成保存,并打jar包。

    2.7K20

    从精准化测试看ASM在Android中的强势插入-Gradle插件

    文件夹,是一个系统保留目录,可以直接运行插件代码而不用引用插件包 独立项目:类似module,单独编译成jar使用 创建 Gradle中自带了创建模板项目的方法——gradle init,通过这个指令,...,这里建议大家增加指定Java8编译的指令。...,在根目录的build.gradle中使用。...使用 在使用插件的项目根目录Gradle文件中,指定访问mavenLocal,同时,使用groupId、artifactId和version组成对插件的引用,如下所示。...串联起来,Transform会拿到上一个Transform编译后的class文件,以及jar和aar资源、和asset目录下的资源文件作为自己的输入,同时做好处理后,也需要将这些内容作为自己的输出内容输出给下一个

    1.1K40

    一文看透java8新特性

    在实际使用过程中,函数式接口是容易出错的:如有某个人在接口定义中增加了另一个方法,这时,这个接口就不再是函数式的了,并且编译过程也会失败。...为了克服函数式接口的这种脆弱性并且能够明确声明接口作为函数式接口的意图,Java8增加了一种特殊的注解@FunctionalInterface(Java8中所有类库的已有接口都添加了@FunctionalInterface...,但是在使用默认方法时我们需要小心注意一个地方:在声明一个默认方法前,请仔细思考是不是真的有必要使用默认方法,因为默认方法会带给程序歧义,并且在复杂的继承体系中容易产生编译错误。...在Java 8以前,一般的解决方式用foreach循环,但是在Java 8里面我们可以使用stream:一串支持连续、并行聚集操作的元素。...4.6 并行(parallel)数组 Java8增加了大量的新方法来对数组进行并行处理。可以说,最重要的是parallelSort()方法,因为它可以在多核机器上极大提高数组排序的速度。

    83920

    这些Java9新特性,你用过吗?

    本文源自 公-众-号 IT老哥 的分享 IT老哥,一个在大厂做高级Java开发的程序员,每天分享技术干货文章 前言 虽然Java已经出到14了,但是大部分公司用的依然是Java8,用的不是Java8的小伙伴请举手...---- 这个文件就是所谓的模块化文件 在 module 文件中直接 exports 关键字+包名路径就可以选择需要对外暴露的class ?...开发者只需要输入一些代码,就可以在编译前获得对程序的反馈。而之前的 Java 版本要想执行代码,必须创建文件、声明类、提供测试方法方可实现。...接口的私有方法 jdk9,允许在接口中使用私有方法,java官方在近期版本对于接口的改动有点夸张:不断的开放接口的使用权限,说不准以后的接口跟抽象类有可能会合并在一起 ?...钻石操作符的使用升级 钻石操作符,是官方给出的说法,其实就是之前版本的泛型操作符,图中的代码在java8中是编译不通过的,但是java9可以,这个主要涉及到匿名子类的时候 ?

    64930

    JDK19都出来了~是时候梳理清楚JDK的各个版本的特性了【JDK9特性讲解】

    JDK和JRE目录变化   然后我们来看看JDK和JRE在JDK8和JDK9的差异 目录作用介绍: bin 包含命令行开发和调试工具 如javac jar javadoc include 包含编译本地代码时使用的...c/c++头部文件 lib 包含JDK工具的几个jar和其他类型的文件,他有一个tools.jar文件,其中含javac编译器的java类 jre/bin目录 包含基本指令,如java指令,在windows...平台上,它包含系统的运行时动态链接 jre/lib包含用户可编辑的配置文件,如properties和.policy文件,包含几个jar文件,rt.jar文件包含运行时的java类和资源文件 目录介绍...平台上的动态链接本地库,其子目录和文件不应由开发人员直接编译或使用 从9开始以后的JDK目录结构都是如此 4....标识符命名组成:字母,数字,下划线,美元符 JAVA8 中,可以使用一个 _ 作为标识符的命名 JAVA9 中,就不可以使用一个_ 作为标识符的命名了,不通过编译,但是标识符中仍然可以使用_,必须配合其他内容

    1.7K40
    领券