java混淆打包(混淆后的java代码能还原吗)
华为云服务器特价优惠火热进行中! 2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。
合作流程: |
今天给各位分享java混淆打包的知识,其中也会对混淆后的java代码能还原吗进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
微信号:cloud7591如需了解更多,欢迎添加客服微信咨询。
复制微信号
本文目录一览:
- 1、如何使用Android Studio打包混淆的Jar
- 2、求教Java web项目一般怎样做代码混淆或加密
- 3、如何把一个java程序打包成exe文件,运行在没有java虚拟机的机器上?
- 4、eclipse 混淆打包报错,以前好使,突然不好使的。错误见图
- 5、如何打包JAVA游戏文件
- 6、eclipse混淆打包发生错误
如何使用Android Studio打包混淆的Jar
使用AS打包混淆Jar包,百度一下,一片一片的,但是很多都是零零散散的写得不是很详细或是直接拷贝,按照他们的教程测试总不是很顺利,所以这里我就把我个人学习AS打包混淆Jar的成果总结出来,希望对大家有帮助。个人觉得写得还是比较详细的
使用gradle混淆打包Jar
使用AS开发项目,引入第三方库是非常方便的,我们只需要在build.gradle中配置一行代码就可以轻松引入我们需要的开发库。那么gradle可以帮我们混淆打包Jar吗?答案是当然可以!
那么我们如何打包Jar呢?其实我们在编译项目的时候,AS已经帮我们在目录build/intermediates/bundles/release/classes.jar打好了Jar。那么我们需要做的就是把Jar进行混淆的工作了。这里以个人项目bannerDemo 为例,混淆步骤如下:
在你的library的build.gradle文件中加入如下代码:
task makeJar(type: proguard.gradle.ProGuardTask, dependsOn: "build") {
// 未混淆的jar路径
injars 'build/intermediates/bundles/release/classes.jar'
// 混淆后的jar输出路径
outjars 'build/outputs/cocolove2-banner-1.1.0.jar'
// 混淆协议
configuration 'proguard-rules.pro'}
配置混淆协议
1.我们先把AS自带的协议配置进来中文注释,笔者添加
# This is a configuration file for ProGuard.# Starting with version 2.2 of the Android plugin for Gradle, these files are no longer used. Newer# versions are distributed with the plugin and unpacked at build time. Files in this directory are# no longer maintained.#表示混淆时不使用大小写混合类名-dontusemixedcaseclassnames#表示不跳过library中的非public的类-dontskipnonpubliclibraryclasses#打印混淆的详细信息-verbose# Optimization is turned off by default. Dex does not like code run# through the ProGuard optimize and preverify steps (and performs some# of these optimizations on its own).-dontoptimize##表示不进行校验,这个校验作用 在java平台上的-dontpreverify# Note that if you want to enable optimization, you cannot just# include optimization flags in your own project configuration file;# instead you will need to point to the# "proguard-android-optimize.txt" file instead of this one from your# project.properties file.-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService-keep public class com.android.vending.licensing.ILicensingService# For native methods, see class * {
native methods;
}# keep setters in Views so that animations can still work.# see public class * extends android.view.View {
void set*(***);
*** get*();
}# We want to keep methods in Activity that could be used in the XML attribute onClick-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}# For enumeration classes, see enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
public static fields;
}# The support library contains references to newer platform versions.# Don't warn about those in case this app is linking against an older# platform version. We know about them, and they are safe.-dontwarn android.support.**# Understand the @Keep support annotation.-keep class android.support.annotation.Keep-keep @android.support.annotation.Keep class * {*;}-keepclasseswithmembers class * {
@android.support.annotation.Keep methods;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep fields;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep init(...);
}
2.AS自带的配置文档还是不够的,我们还需要加入如下配置
这里只展示基本操作,在实际开发中可能需要更多依赖,要根据具体情况引入自己需要的依赖包
#下面代码中的xx是指我个人的配置路径,涉及个人信息,这里以xx代替
#引入依赖包rt.jar(jdk路径)
-libraryjars /xxx/xx/xx/jdk1.8.0_77.jdk/Contents/Home/jre/lib/rt.jar
#引入依赖包android.jar(android SDK路径)
-libraryjars /xx/xx/xx/Android/sdk/platforms/android-24/android.jar
#如果用到Appcompat包,需要引入
-libraryjars /xxx/xxx/xx/xxx/MyApplication/library-banner/build/intermediates/exploded-aar/com.android.support/appcompat-v7/24.1.1/jars/classes.jar
-libraryjars /xx/xx/xx/xx/MyApplication/library-banner/build/intermediates/exploded-aar/com.android.support/support-v4/24.1.1/jars/classes.jar
#忽略警告
-ignorewarnings
#保证是独立的jar,没有任何项目引用,如果不写就会认为我们所有的代码是无用的,从而把所有的代码压缩掉,导出一个空的jar
-dontshrink
#保护泛型
-keepattributes Signature
3.加入自己不想混淆的配置根据实际需求配置
-keep class com.cocolove2.library_banner.view.**{*;}
在命令行执行命令混淆Jar,提示BUILD SUCCESFUL表示成功!
//mac./gradlew makeJar//windowsgradlew makeJar
示例展示
我这里以混淆library-banner 库为例
1.首先我们要看看下我们的buildTool的配置,如下图:
buildTools#Gradle
如果你的项目的buildTool#Gradle配置如上图,那你打包混淆的第一步已经完成了,而如果选择的是本地的gradle,当你执行./gradlew
makeJar时,系统会先下载gradle,不知是网络不好还是被墙掉了,我每次尝试下载都是等了很久,最终也没成功。
2.在项目目录下执行./gradlew makeJar打包输出混淆的Jar,如下图
QQ20160827-0@2x.png
QQ20160827-1@2x.png
3.查看混淆结果.
QQ20160827-2@2x.png
混淆报错解决办法个人遇到的
#log提示缺少依赖Jar,或者路径不对
解决办法:乖乖的引入缺少的依赖jar和修改路径
#提示如下异常[INFO] java.io.IOException: Can't read [D:\Program
Files\Java\jdk1.8.0_91\jre\lib\rt.jar] (Can't process class [com/oracle/net/Sdp$1.class] (Unsupported class version number
[52.0] (maximum 51.0, Java 1.7)))
解决办法:
下载最新proguard(支持Java 8的版本),然后将下载的文件解压。
将andorid sdk/tools/proguard/lib中的jar包,替换为刚下载解压文件中的lib包。
proguard5.2.1下载地址
阅读
求教Java web项目一般怎样做代码混淆或加密
一、java web项目混淆
proguard4.8工具,说是支持war的,可混淆过后少了classes目录了,自然成功不了。网上搜的过程不详说了,最后找着--“J2EE-web工程ProGuard代码混淆07_28”,网址:
根据提示一步步完成。
把web项目打成jar包后用proguard进行混淆,然后把混淆过后的class目录替换发布包war中的对应目录,启动运行是正常的。
主要注意利用proguard生成xxx.pro文件,然后手动加工-keep class WebRoot.WEB-INFO.lib.* 等项目中不需要混淆的包和类。
二、java web项目打成.exe
没找到免费的,这搜到个收费的--Jinstall,试了下功能挺好,
可以加密、集成jdk、tomcat,如果数据库是mysql也集成,其他数据库的话要设置数据库的url.

如何把一个java程序打包成exe文件,运行在没有java虚拟机的机器上?
首先,将编译好的程序打包成jar文件,然后做出exe,这样代码就不可见了;但是exe文件在没有安装jre的电脑上不能运行,如果要求客户再去安装jre 设置环境变量 就不雅了。我们需要将jre打包。
这几步操作网上介绍的插件和方法很多,但有的好用有的不好用,而且有的还需要注册。经过尝试比较,在“千里冰封”的博客上得到了很大的帮助。整理一下。使用这几个工具,您也可以顺利的发布您的java程序!
1 打包成双击可执行的jar文件。
推荐插件:fatJar(Eclipse使用)
下载地址 ;package_id=125924
我用的是Eclipse,它自带的打包方法在打包一些图片等资源时不是很爽。可以使用这个插件。
安装方法解压后将plugins文件夹下的net.sf.fjep.fatjar_0.0.24文件夹拷到eclipse安装目录的plugins 下。
用此工具可以方便的将eclipse中的工程打包成jar文件。如果是要打成可执行的jar请注意选取主类。
你的项目=〉Export..=向导里有fat jar =...
2 将jar文件转换成exe文件。
推荐工具:exe4j
用exe4j把java打包成exe
在我们写程序的时候,有时会有一种需求,那就是希望我们的程序是一个可执行文件,而不是一个 jar文件,其实大部份时候,可执行的jar文件都可以满足要求,但是如果我们的程序是需要保护的,那么打包成jar文件就不太安全了,因为jar文件就是一个解压缩文件,一解压就什么都能看到了,当然也可以选择混淆,但是混淆了以后排错就没那么容易了,因为混淆的时候,把一些类的信息都混淆了。如何既保证代码的安全又容易排错呢?那么打包成exe就是一种很好的办法了,其实我今天介绍这个方法并不是希望大家去打包成exe文件,因为exe文件毕竟不是跨平台的,用了exe的格式就失去了java的初衷了。
exe4j可以打包成各种格式的exe,可以把jar打包进exe,也可以引用一个外部的 jar文件,还可以打包成windows服务的程序,并且可以设置最低jre的版本,还可以设定启动画面,虽然java6.0已经实现了这一点,但是还是没有exe4j生成的启动画面快。
3 将exe文件并jre打包成安装文件,可以在没有安装java虚拟机的电脑上运行
推荐工具:install4j
Install4j介绍
install4j是一个功能强大的,多平台Java安装文件生成工具,用于生成Java应用程序本地化的安装及应用程序发布。 install4j 的优异性在于它易于使用,紧密的集成到目标平台,以及灵活的JRE 管理与部署选项。
创建发布树
install4j的图形用户界面允许你:
* 完全自定义发布树
在发布树的每一个目录中,你能设置整个目录内容或是磁盘上任何目录的单个文件。定义的视图与结果视图让你能完全控制安装程序将发布的文件。
* 处理特定平台的差异
install4j提供方便的“包含/排除”机制,使其适应平台方式来进行发布。
* 针对Unix, Linux 及Mac OS X所定义的文件权限
对发布树的每一个元素,当其安装在类似于Unix这样的平台上时,你能自定义用户访问的权限。
* 定义优良的卸载策略
对发布树的每一个元素,你能决定在卸载时是否删除它。
* 定义覆盖策略
对发布树的每一个元素,你能配置不同的覆盖策略,当安装过程中需要覆盖文件时,这些覆盖策略会指示nstall4j进行相应的操作。
* 定义安装的组件
你能定义文件及目录的分组,形成分离的安装组件,这样你就可提供给用户来选择只安装一定的组件。
其实一个好的应用如果不太好布署,那么别人也只能对它望而兴叹了,现在有了 install4j,很多布署的问题几乎全部解决了.我们可以用exe4j打包java应用,然后用install4j发布java应用,以前java程序布署难的问题,现在几乎都解决了.install4j不但用于打包很合适,并且它还提供了一组很强大很实用的与平台相关的api.这些对于扩展我们的程序也是有很大的帮助的.
eclipse 混淆打包报错,以前好使,突然不好使的。错误见图
eclipse 混淆打包报错,以前好使,突然不好使的
情况1:
Proguard returned with error code 1. See console
Error: C:/Documents (系统找不到指定文件)
后来发现是因为将整个工程放到了桌面上,而桌面的目录是C:/Documents and Settings/Administrator/桌面,在这里面有空格,而proguard进行发编译的时候是不允许有空格的
如果换了正确路径还不好用的话,直接删除proguard就好了
注意:SDK和程序路径最好不要有空格符
情况2:
Proguard returned with error code 1. See console
异常:
java.lang.ArrayIndexOutOfBoundsException
解决办法:将proguard.cfg中的"-dontpreverify"改成“-dontoptimize”
如何打包JAVA游戏文件
第一种:在jbuilder中:
首先你要保证Run菜单--Run Project能顺利运行
然后Wizards菜单--Native Executable Builder
选中Compress the contents of the archive(产生jar文件的话)
Next--Next--选中Always include all classes and resources再Next--Next--Next
选中Windows GUI"exe"(产生EXE文件的话)--Finish
再在项目的文件列表中的Native Executable右击--Make就可以了
第二种:在cmd 下生成jar文件
abc.txt内容如下:
Manifest-Version: 1.0
Main-Class: main-class-name(回车)
在cmd下:
javac *.java
jar cvfm abc.jar abc.txt *.class
示例——生成能通过鼠标双击就执行的.jar文件
一、 编写Java源程序Test.java如下:
// Test.java
import javax.swing.*;
/**
* @(#) Test.java
* Copyleft (c) 2002 RatKing
* @author a href="ratking@ynet.com"RatKing/a
* @version 0.1, 2002-11-7
* 描述:一个测试用的Java Application
*/
public class Test extends JFrame {
public Test(String title) {
super(title);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().add(new JLabel("测试!", JLabel.CENTER), SwingConstants.CENTER);
this.pack();
}
public static void main(String[] args) {
try {
//UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) {
e.printStackTrace();
}
Test t = new Test("Test - 测试");
t.setVisible(true);
}
}
二、编译Test.java为Test.class(当然假设你事先已经设置好了JDK的环境变量PATH和CLASSPATH)
在命令行执行编译命令:
javac Test.java
三、用文本编辑器(比如记事本/UltraEdit等 - 甚至用ECHO命令加管道“”)编写如下manifest文件,并保存为abc.txt
Manifest-Version: 1.0
Main-Class: Test
【注意】文件abc.txt内必须是3行文本:
第一行的内容依次是:“Manifest”、英文减号、“Version”、英文冒号、英文空格、数字“1”、英文句号、数字“0”
第二行的英文冒号与Test之间必须要有一个英文空格!!!
第三行是一个空行,也就是说,你要在Test之后键入一个回车,然后才可以存盘退出!!!
如果冒号后面没有空格,可以生成jar文件但不能执行;如果Test后没有回车符,则生成jar文件时会报错。
四、将Test.class打包成.jar文件,并使用abc.txt指明哪一个是带有public static void main()的“主函数”
在命令行执行编译命令:
jar cvfm Test.jar abc.txt *.class
你可以使用WinZip之类的解压软件看一看刚刚生成的Test.jar文件里到底有什么。
五、用鼠标双击Test.jar的图标,应该可以看到Test执行后的窗口。
〖说明〗如果你正确地安装了Java运行环境(JRE),那么.jar的图标应该是象一页纸并有一个A的形状,就如同写字板的图标。
如果你的.jar文件默认的打开关联不对,可以重新设置:
我的电脑-查看(Win9x)或工具(Win2k)-文件夹选项-文件类型-选择JAR文件-编辑该类型文件的属性-操作栏填入[ open ](不填引号和中括号[]),并在“执行操作的应用程序”栏填入[ "C:\Program Files\Java\j2re1.4.1\bin\javaw.exe" -jar "%1" %* ](填两对英文引号,不填[])
并按“确定”、“关闭”退出对.jar文件关联的编辑。
(你的javaw.exe文件是不是位于C:\Program Files\Java\j2re1.4.1\bin\路径下,视你自己电脑的情况而定) 另外,可以下一个第三方软件
eclipse混淆打包发生错误
这是因为你混淆的代码没有一个入口,也就是说,这个程序或者jar包被全部混淆了,外部没有任何一个地方可以正常调用到它,换句话说就是“你混淆出来的东西没法用”。假如你混淆的是apk,参考
假如你混淆的是jar包:
依赖其它的库使用类似下述语句
-libraryjars D:/developApp/androidsource/xxx.jar
混淆的java代码里有标签,加上
-keepattributes *Annotation*
最后就是把对外接口给keep住
java混淆打包的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于混淆后的java代码能还原吗、java混淆打包的信息别忘了在本站进行查找喔。
