公司动态
Java 的 JRE、JDK、卸载 OpenJDK、双击打开 jar、java文档
Java17 官方 API 文档https://docs.oracle.com/en/java/javase/17/docs/api/index.html1、JRE、JDKJRE 和 JDK 区别JRE (Java Runtime Environment)JRE 就是 java 运行时环境包含了 java 虚拟机java 基础类库是 java 程序运行时所需要的软件环境。如果只需要运行 java 程序只需安装 JRE 就可以。JRE 根据不同操作系统如windowslinux等和不同 JRE 提供商IBM、ORACLE等有很多版本最常用的是 Oracle 公司收购 SUN 公司的 JRE 版本。JDK (Java Development Kit)JDK 就是 java 开发工具包是使用 java 语言编写 java 程序所需的开发工具。JDK 包含了 JRE同时还包含了编译 java 源码的编译器 以及调试和分析的工具还有所需的文档和 demo 例子程序。如果需要编写 java 程序需要安装 JDK。图来源https://docs.oracle.com/javase/7/docs/OpenJDK和OraleJDK在大多数 Linux 发行版本里内置或者通过软件源安装 JDK 的话都是安装的 OpenJDK。OpenJDKAdoptium Temurin / brew openjdkGPLv2 开源协议个人、商用、公司生产全部免费无版权风险不用买许可。Oracle JDK仅本地开发、学习免费如果公司拿来跑线上项目、业务系统必须付费订阅Oracle 会审计追责。Oracle JDK 是 Oracle 自家打包的闭源二进制授权严格个人电脑纯自用虽不收费但完全没必要折腾。大白话认识 JVM大白话带你认识 JVMhttps://javaguide.cn/java/jvm/jvm-intro.htmlJVM 是 Java Virtual Machine 的缩写它是一个虚构出来的计算机一种规范。Java 程序再通过这个虚拟的计算机和真实的物理机交互间接调用真实系统从而实现各种功能。Java 文件是如何被运行的。写一个简单的 HelloWorld.java 这个 HelloWorld.java 抛开所有东西不谈其实就是后缀名以java结尾的文本文件JVM是不认识文本文件的所以它需要编译成一个二进制文件HelloWorld.classJava 文件经过编译后变成 .class 字节码文件这样 JVM 才能认识。但是JVM想要执行这个.class文件我们需要将其装进一个类加载器中它就像一个搬运工一样会把所有的.class文件全部搬进 JVM 里面来。字节码文件通过类加载器被搬运到 JVM 虚拟机中。虚拟机主要的 5 大块方法区堆都为线程共享区域有线程安全问题栈和本地方法栈和计数器都是独享区域不存在线程安全问题而 JVM 的调优主要就是围绕堆栈两大块进行Oracle GraalVM什么是 Oracle GraalVMhttps://www.oracle.com/cn/java/graalvm/what-is-graalvm/在讲GraalVM前先回看下Java当前遇到的问题概括而言如下云时代的掉队者由于Java启动的高延时、对资源的高占用、导致在Serverless及FaaS架构下力不从心在越来越流行的边缘计算、IoT方向上也是难觅踪影系统级应用开发的旁观者Java语言在业务服务开发中孤独求败但在系统级应用领域几乎是C、C、搅局者Go、黑天鹅Rust的天下移动应用、敏捷应用的追随者移动应用中Android逐步去Java前端又是JS的世界敏捷开发方面前有Ruby、Python后有NodeJS怎么办要兼容稳定那么别打语法、API、字节码创新的心思Java本身就那样了但它背后的JVM 却有更多的选择。Java 的问题可以让 JVM 来补救说资源占用高那先来个 JPMS 模块化但目前看貌似并不成功说启动延迟大那咱支持AoT搞Native吧说对系统级应用、移动应用、敏捷应用支持不好那你行你上我把你们都包进来纳入到我JVM大生态中这就是GraalVM正在做的。所以 GraalVM 是一个新的 JVM。官方定义 GraalVM 的定义Oracle GraalVM 是一个使用即时 (JIT) 编译器加速 Java 和 JVM 应用性能的高性能 JDK。它由 Oracle 提供 24/7 支持能够降低应用延迟通过缩短垃圾回收时间提高峰值吞吐量。此外GraalVM 本地镜像实用程序可提前 (AOT) 编译 Java 字节码生成可近乎瞬时启动且仅占用极少内存资源的本机可执行文件。2、下载 jdk官网下载地址https://www.oracle.com/java/technologies/downloads/Java8下载https://www.java.com/en/download/JDK 镜像站点https://www.injdk.cn/Java SE、Java EE、Java MEOracle 官网有好几个 java 版本但是最重要的主要有三个Java SE、Java EE、Java MEJava SEJava PlatformStandard Edition。以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类并为 Java PlatformEnterprise EditionJava EE提供基础。Java EEJava PlatformEnterprise Edition。以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的它提供 Web 服务、组件模型、管理和通信 API可以用来实现企业级的面向服务体系结构service-oriented architectureSOA和 Web 2.0 应用程序。Java MEJava PlatformMicro Edition。以前称为 J2ME。Java ME 为在移动设备和嵌入式设备比如手机、PDA、电视机顶盒和打印机上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次就可以用于许多设备而且可以利用每个设备的本机功能。三者的区别简而言之主要是面向的应用领域不一样javase即 J2SE ( java标准版 )主要做一般的 java 应用比如应用软件 / QQ之类的通信软件等javaee: 即J2EE ( 主要做企业应用 ) 比如公司网站、企业解决方案等。javame: 即J2ME主要面向嵌入式等设备应用的开发比如手机游戏等。3、Java 环境变量配置配置Java环境变量https://www.runoob.com/w3cnote/windows10-java-setup.htmlWindows 配置(java1.5 版本之后可不需要设置 classpath)windows 设置步骤此电脑 --- 属性 --- 高级系统设置 --- 环境变量 --- 系统环境变量JAVA_HOME D:\java\jdk1.8.0_171CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jarPath 添加 %JAVA_HOME%\bin 和 %CLASSPATH%安卓 sdk 环境变量步骤 1设置 ANDROID_HOME打开系统属性右键点击“此电脑”或“我的电脑”选择“属性”。 点击左侧的“高级系统设置”然后点击“环境变量”。新建系统变量在“系统变量”下点击“新建”。 变量名ANDROID_HOME 变量值填写 Android SDK 的安装路径例如D:\Android\SDK。 点击“确定”。步骤 2配置 Path 变量编辑 Path 变量在“系统变量”中找到 Path点击“编辑”。 添加以下路径每行单独添加%ANDROID_HOME%\platform-tools%ANDROID_HOME%\tools%ANDROID_HOME%\tools\bin%ANDROID_HOME%\emulator保存更改点击“确定”保存所有设置。步骤 3验证配置打开命令提示符Win R 输入cmd。输入以下命令验证是否成功adb versionemulator -version如果显示版本信息则说明配置成功。Linux 设置解压tar -zxvf 文件名临时设置export PATH/usr/local/share/java17/bin:$PATH当前用户设置打开~/.bashrc添加行export PATH/usr/local/share/java17/bin:$PATH所有用户设置(vim /etc/profile)export export PATH/usr/local/share/java17/bin:$PATH对于对vi不熟悉的可以使用 gedit 命令启动文本编辑器比起vi命令更方便sudo gedit /etc/profileexport JAVA_HOME/opt/java/jdk-10.0.1export JRE_HOME/opt/java/jre-10.0.1export CLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH${PATH}:${JAVA_HOME}/bin:${JRE_HOME}/bin设置生效source profile验证是否成功。执行命令java --version或者javac --version如果安装正确jdk 和 jre 则都是我们自己安装的版本设置默认 jdk (如果有openjdk时)由于 Ubuntu 中可能会有默认的 jdk如 openjdk。如果有 openjdk时。可以设置默认使用的jdk。sudo update-alternatives --install /usr/bin/java java /opt/java/jdk-10.0.1/bin/java 300sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk-10.0.1/bin/javac 300sudo update-alternatives --install /usr/bin/java java /opt/java/jdk-10.0.1/bin/java 300sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk-10.0.1/bin/javac 300sudo update-alternatives --install /usr/bin/jar jar /opt/java/jdk-10.0.1/bin/jar 300sudo update-alternatives --install /usr/bin/javah javah /opt/java/jdk-10.0.1/bin/javah 300sudo update-alternatives --install /usr/bin/javap javap /opt/java/jdk-10.0.1/bin/javap 300通过上面步骤将我们安装的 jdk 加入 java 选择单。然后执行代码:sudo update-alternatives --config javasudo update-alternatives --config javac通过这一步选择系统默认的jdkubuntu 切换java环境配置单独的用户环境执行命令sudo update-alternatives --config javaThere are 2 choices for the alternative java (providing /usr/bin/java).Selection Path Priority Status------------------------------------------------------------* 0 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 auto mode1 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 manual mode2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode选择 1然后服务器的全局变量java就是变成java -versionjava version 1.7.0_121OpenJDK Runtime Environment (IcedTea 2.6.8) (7u121-2.6.8-1ubuntu0.14.04.3)OpenJDK 64-Bit Server VM (build 24.121-b00, mixed mode)Linux 使用 update-alternatives 命令进行版本的切换https://blog.csdn.net/JasonDing1354/article/details/50470109ubuntu 利用 update-alternatives 配置 javahttps://blog.csdn.net/yinlijun2004/article/details/53008035卸载 openjdk执行命令sudo apt-get remove openjdk*6、双击 jar 文件直接打开关于 加壳1、壳的功能壳最本质的功能就是实现加载器壳是指在一个程序的外面再包裹上另外一段代码保护里面的代码不被非法修改或反编译的程序。它们一般都是先于程序运行拿到控制权然后完成它们保护软件的任务深入点就是在apk外面再套一层壳在运行的时候这层壳会把真正的apk的dalvik指令集释放出来为apk加壳是目前主流的防护方案真正的源码是隐藏在壳之下的要想拿到源码研究其逻辑就要先想办法将壳脱掉所以我们拿到一个apk要逆向的第一步就是用查壳工具看下这个apk文件是否加壳以及加了什么壳然后想办法把壳脱掉拿到dex文件再去分析。注意壳绝对不能改变原来代码的执行流程加壳程序也不能对源程序有任何的影响。2、apk的组成原理apk壳和pc端的都差不多只是在处理不同的文件格式dex和exe中会有差别导致不同的加壳Android上的应用安装文件是apk格式的这个apk文件其实就是个归档文件压缩包把应用相关的源码、资源文件、配置文件等等都归档打包直接解压之后就能得到app的dalvik指令集dex文件然后再反编译为smali还可以再反编译为Java这样就几乎等同于拿到了app就能拿到可读性还蛮清晰的源码。3、Android Dex文件加壳原理Android APK加壳过程中牵扯到三个角色加壳程序(加密源程序为解壳数据、组装解壳程序和解壳数据)、解壳程序(解密解壳数据并运行时通过DexClassLoader动态加载)、(源程序)需要加壳处理的被保护代码关于壳的资料Dex文件结构https://blog.csdn.net/androidsecurity/article/details/8664778APK加壳原理简述:https://blog.csdn.net/amurocrash/article/details/79103189Android APK加壳技术方案【1】https://blog.csdn.net/androidsecurity/article/details/8678399Android APK加壳技术方案【2】https://blog.csdn.net/androidsecurity/article/details/8809542Android4.0内存Dex数据动态加载技术https://blog.csdn.net/androidsecurity/article/details/9674251APKSCAN-PKID 下载Windows 版下载地址https://www.jb51.net/softs/603472.htmlJava 版下载地址https://pan.baidu.com/s/1rDfsEvqQwhUmep1UBLUwSQ 密码: wefdWindows 解压后双击即可打开选择apk路径或直接拖放至exe中Java 版的需要用到Java环境然后执行java -jar .\ApkScan-PKID.jarjar 文件的3种运行方式.jar 文件的类型为 Executable Jar File (.jar)可以直接双击执行但是运行.jar需要安装相应的java环境。其实.jar文件可以直接解压缩里面都是.class文件但是.class文件不能直接运行。首先弄清楚要运行的 .jar 文件需要哪个版本的JDK,再去官网下载。JDK包含JREJRE又包含JVM命令行执行示例java -jar .\ApkScan-PKID.jar双击运行.jar在运行中输入regedit打开注册表编辑器菜单栏--- 编辑 --- 查找javaw.exe。找到以下目录 javaw.exe-shell-open-command找到后按箭头指示双击修改数据修改数据为C:\Program Files\Java\jdk-15.0.2\bin\javaw.exe -jar %1然后单击确定现在就可以双击运行 jar 文件。bat 文件 运行修改注册表可能过于麻烦还不如直接命令行启动jar文件例如java -jar jar文件路径但是每次都用命令行和复制文件路径又过于繁琐而且还要考虑绝对路径和相对路径的问题所以不如直接写一个bat命令程序在每次双击运行jar文件时用该程序打开间接的调用命令行但是节省了敲命令的时间以及避免了路径的错误一劳永逸。程序代码如下。javaw -jar %1再把jar文件的默认打开方式指定为jar.bat就好了。以后jar文件就都可以双击直接运行了。