手机java源代码 手机源码下载

java开发手机浏览器 只要最基本的功能

3.WebBrowser.java

十余年的坪山网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销的优势是能够根据用户设备显示端的尺寸不同,自动调整坪山建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“坪山网站设计”,“坪山网站推广”以来,每个客户项目都认真落实执行。

package CH04.源程序;

/*

**网页浏览器主程序

**WebBrowser.java

*/

import java.awt.*;

import javax.swing.*;

import javax.swing.text.*;

import java.awt.event.*;

import javax.swing.event.*;

import javax.swing.border.*;

import javax.swing.filechooser.FileFilter;

import javax.swing.filechooser.FileView;

import java.io.*;

import java.net.*;

import java.util.*;

public class WebBrowser extends JFrame implements HyperlinkListener,ActionListener{

//建立工具栏用来显示地址栏

JToolBar bar=new JToolBar ();

//建立网页显示界面

JTextField jurl = new JTextField (60);

JEditorPane jEditorPane1 = new JEditorPane ();

JScrollPane scrollPane = new JScrollPane (jEditorPane1);

JFileChooser chooser=new JFileChooser ();

JFileChooser chooser1=new JFileChooser ();

String htmlSource;

JWindow window = new JWindow (WebBrowser.this);

JButton button2=new JButton ("窗口还原");

Toolkit toolkit = Toolkit.getDefaultToolkit();

//建立菜单栏

JMenuBar jMenuBar1 = new JMenuBar();

//建立菜单组

JMenu fileMenu = new JMenu ("文件(F)");

//建立菜单项

JMenuItem saveAsItem = new JMenuItem ("另存为(A)...");

JMenuItem exitItem=new JMenuItem ("退出(I)");

JMenu editMenu=new JMenu ("编辑(E)");

JMenuItem backItem=new JMenuItem ("后退");

JMenuItem forwardItem=new JMenuItem ("前进");

JMenu viewMenu=new JMenu ("视图(V)");

JMenuItem fullscreenItem=new JMenuItem ("全屏(U)");

JMenuItem sourceItem=new JMenuItem ("查看源码(C)");

JMenuItem reloadItem=new JMenuItem ("刷新(R)");

//建立工具栏

JToolBar toolBar = new JToolBar();

//建立工具栏中的按钮组件

JButton picSave = new JButton("另存为");

JButton picBack = new JButton("后退");

JButton picForward = new JButton("前进");

JButton picView = new JButton("查看源代码");

JButton picExit = new JButton("退出");

JLabel label=new JLabel ("地址");

JButton button=new JButton ("转向");

Box adress=Box.createHorizontalBox ();

//ArrayList对象,用来存放历史地址

private ArrayList history=new ArrayList();

//整型变量,表示历史地址的访问顺序

private int historyIndex;

/**

**构造函数

**初始化图形用户界面

*/

public WebBrowser(){

setTitle ("网页浏览器");

setResizable(false);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//为jEditorPane1添加事件侦听

jEditorPane1.addHyperlinkListener (this);

//为组件fileMenu设置热键‘F’

fileMenu.setMnemonic('F');

saveAsItem.setMnemonic ('S');

//为“另存为”组件设置快捷键为ctrl+s

saveAsItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_S,InputEvent.CTRL_MASK));

exitItem.setMnemonic('Q');

exitItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_E,InputEvent.CTRL_MASK));

//将菜单项saveAsItem加入到菜单组fileMenu中

fileMenu.add (saveAsItem);

//在菜单项中添加隔离

fileMenu.addSeparator ();

fileMenu.add (exitItem);

backItem.setMnemonic ('B');

backItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_Z,InputEvent.CTRL_MASK));

forwardItem.setMnemonic('D');

forwardItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_P,InputEvent.CTRL_MASK));

editMenu.setMnemonic('E');

editMenu.add (backItem);

editMenu.add (forwardItem);

viewMenu.setMnemonic('V');

fullscreenItem.setMnemonic('U');

fullscreenItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_U,InputEvent.CTRL_MASK));

sourceItem.setMnemonic('C');

sourceItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_C,InputEvent.CTRL_MASK));

reloadItem.setMnemonic('R');

reloadItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_R,InputEvent.CTRL_MASK));

Container contentPane=getContentPane ();

//设置大小

scrollPane.setPreferredSize(new Dimension(100,500));

contentPane.add (scrollPane, BorderLayout.SOUTH);

//在工具栏中添加按钮组件

toolBar.add(picSave);

toolBar.addSeparator();

toolBar.add(picBack);

toolBar.add(picForward);

toolBar.addSeparator();

toolBar.add(picView);

toolBar.addSeparator();

toolBar.add(picExit);

contentPane.add (bar,BorderLayout.CENTER);

contentPane.add(toolBar,BorderLayout.NORTH);

viewMenu.add (fullscreenItem);

viewMenu.add (sourceItem);

viewMenu.addSeparator ();

viewMenu.add (reloadItem);

jMenuBar1.add (fileMenu);

jMenuBar1.add (editMenu);

jMenuBar1.add (viewMenu);

setJMenuBar (jMenuBar1);

adress.add (label);

adress.add (jurl);

adress.add (button);

bar.add (adress);

//为组件添加事件监听

saveAsItem.addActionListener(this);

picSave.addActionListener(this);

exitItem.addActionListener(this);

picExit.addActionListener(this);

backItem.addActionListener(this);

picBack.addActionListener(this);

forwardItem.addActionListener(this);

picForward.addActionListener(this);

fullscreenItem.addActionListener(this);

sourceItem.addActionListener(this);

picView.addActionListener(this);

reloadItem.addActionListener(this);

button.addActionListener(this);

jurl.addActionListener(this);

}

/**

**实现监听器接口的actionPerformed函数

*/

public void actionPerformed(ActionEvent e) {

String url = "";

//点击转向按钮

if (e.getSource() == button){

//获得地址栏的内容

url=jurl.getText ();

//url不为“”,并且以“http://”开头

if(url.length ()0url.startsWith ("http://")){

try {

//JEditorPane组件显示url的内容链接

jEditorPane1.setPage (url);

//将url的内容添加到ArrayList对象history中

history.add(url);

//historyIndex的数值设为history对象的长度-1

historyIndex=history.size()-1;

//重新布局

jEditorPane1.setEditable(false); //add by copy editor :)

jEditorPane1.revalidate ();

}

catch(Exception ex) {

//如果链接显示失败,则弹出选择对话框“无法打开该搜索页”

JOptionPane.showMessageDialog (WebBrowser.this,"无法打开该搜索页","网页浏览器",JOptionPane.ERROR_MESSAGE);

}

}

//url不为“”,并且不以“http://”开头

else if(url.length ()0!url.startsWith ("http://")) {

//在url前面添加“http://”

url="http://"+url;

try {

jEditorPane1.setPage (url );

history.add(url);

historyIndex=history.size()-1;

jEditorPane1.setEditable(false); //add by copy editor :)

jEditorPane1.revalidate ();

}

catch(Exception ex) {

JOptionPane.showMessageDialog (WebBrowser.this,"无法打开该搜索页","网页浏览器",JOptionPane.ERROR_MESSAGE);

}

}

//没有输入url,即url为空

else if(url.length ()==0){

JOptionPane.showMessageDialog (WebBrowser.this,"请输入链接地址","网页浏览器",JOptionPane.ERROR_MESSAGE);

}

}

//输入地址后点击回车

else if (e.getSource() == jurl){

url=jurl.getText ();

if(url.length ()0url.startsWith ("http://")) {

try {

jEditorPane1.setPage (url);

history.add(url);

historyIndex=history.size()-1;

jEditorPane1.setEditable(false); //add by copy editor :)

jEditorPane1.revalidate ();

jurl.setMaximumSize (jurl.getPreferredSize ());

}

catch(Exception ex) {

JOptionPane.showMessageDialog (WebBrowser.this,"无法打开该搜索页","网页浏览器",JOptionPane.ERROR_MESSAGE);

}

}

else if(url.length ()0!url.startsWith ("http://")) {

url="http://"+url;

try {

jEditorPane1.setPage (url );

history.add(url);

historyIndex=history.size()-1;

jEditorPane1.setEditable(false); //add by copy editor :)

jEditorPane1.revalidate ();

}

catch(Exception ex) {

JOptionPane.showMessageDialog (WebBrowser.this,"无法打开该搜索页","网页浏览器",JOptionPane.ERROR_MESSAGE);

}

}

else if(url.length ()==0){

JOptionPane.showMessageDialog (WebBrowser.this,"请输入链接地址","网页浏览器",JOptionPane.ERROR_MESSAGE);

}

}

//另存为...

else if (e.getSource() == picSave||e.getSource() == saveAsItem){

url = jurl.getText ().toString ().trim();

if(url.length ()0!url.startsWith ("http://")) {

url="http://"+url;

}

if(!url.equals ("")) {

//保存文件

saveFile(url);

}

else {

JOptionPane.showMessageDialog (WebBrowser.this,"请输入链接地址","网页浏览器",JOptionPane.ERROR_MESSAGE);

}

}

//退出

else if (e.getSource() == exitItem ||e.getSource() == picExit){

System.exit(0);

}

//后退

else if (e.getSource() == backItem ||e.getSource() == picBack){

historyIndex--;

if(historyIndex 0)

historyIndex = 0;

url = jurl.getText();

try{

//获得history对象中本地址之前访问的地址

url = (String)history.get(historyIndex);

jEditorPane1.setPage(url);

jurl.setText(url.toString());

jEditorPane1.setEditable(false); //add by copy editor :)

jEditorPane1.revalidate ();

}

catch(Exception ex){

}

}

//前进

else if (e.getSource() == forwardItem ||e.getSource() == picForward){

historyIndex++;

if(historyIndex = history.size())

historyIndex = history.size()-1;

url = jurl.getText();

try{

//获得history对象中本地址之后访问的地址

url = (String)history.get(historyIndex);

jEditorPane1.setPage(url);

jurl.setText(url.toString());

jEditorPane1.setEditable(false); //add by copy editor :)

jEditorPane1.revalidate ();

}

catch(Exception ex){

}

}

//全屏

else if (e.getSource() == fullscreenItem){

boolean add_button2=true;

//获得屏幕大小

Dimension size = Toolkit.getDefaultToolkit().getScreenSize();

Container content = window.getContentPane();

content.add (bar,"North");

content.add (scrollPane,"Center");

//button2为点击“全屏”后的还原按钮

if(add_button2==true) {

bar.add (button2);

}

//为button2添加事件

button2.addActionListener (new ActionListener () {

public void actionPerformed (ActionEvent evt) {

WebBrowser.this.setEnabled (true);

window.remove (bar);

window.remove (toolBar);

window.remove (scrollPane);

window.setVisible (false);

scrollPane.setPreferredSize (new Dimension (100,500));

getContentPane ().add (scrollPane,BorderLayout.SOUTH);

getContentPane ().add (bar,BorderLayout.CENTER);

getContentPane ().add (toolBar,BorderLayout.NORTH);

bar.remove (button2);

pack();

}

});

window.setSize (size);

window.setVisible (true);

}

//查看源文件

else if (e.getSource() == sourceItem ||e.getSource() == picView){

url = jurl.getText ().toString ().trim ();

if(url.length ()0!url.startsWith ("http://")) {

url="http://"+url;

}

if( !url.equals ("")) {

//根据url,获得源代码

getHtmlSource (url);

//生成显示源代码的框架对象

ViewSourceFrame vsframe = new ViewSourceFrame (htmlSource);

vsframe.setBounds (0,0,800,500);

vsframe.setVisible(true);

}

else {

JOptionPane.showMessageDialog (WebBrowser.this,"请输入链接地址","网页浏览器",JOptionPane.ERROR_MESSAGE);

}

}

//刷新

else if (e.getSource() == reloadItem){

url=jurl.getText ();

if(url.length ()0url.startsWith ("http://")) {

try {

jEditorPane1.setPage (url);

jEditorPane1.setEditable(false); //add by copy editor :)

jEditorPane1.revalidate ();

}

catch(Exception ex) {

}

}

else if(url.length ()0!url.startsWith ("http://")) {

url="http://"+url;

try {

jEditorPane1.setPage (url );

jEditorPane1.setEditable(false); //add by copy editor :)

jEditorPane1.revalidate ();

}

catch(Exception ex) {

}

}

}

}

/*

**保存文件

*/

void saveFile (final String url) {

final String linesep = System.getProperty ("line.separator");

chooser1.setCurrentDirectory (new File ("."));

chooser1.setDialogType (JFileChooser.SAVE_DIALOG);

chooser1.setDialogTitle ("另存为...");

if(chooser1.showSaveDialog (this) != JFileChooser.APPROVE_OPTION)

return;

this.repaint ();

Thread thread = new Thread () {

public void run () {

try {

java.net.URL source = new URL (url);

InputStream in = new BufferedInputStream (source.openStream ());

BufferedReader br=new BufferedReader (new InputStreamReader (in));

File fileName = chooser1.getSelectedFile ();

FileWriter out = new FileWriter (fileName);

BufferedWriter bw = new BufferedWriter (out);

String line;

while((line = br.readLine ()) != null) {

bw.write (line);

bw.newLine ();

}

bw.flush ();

bw.close ();

out.close ();

String dMessage = url + " 已经被保存至"+ linesep +fileName.getAbsolutePath ();

String dTitle = "另存为";

int dType = JOptionPane.INFORMATION_MESSAGE;

JOptionPane.showMessageDialog ((Component) null,dMessage,dTitle,dType);

}

catch(java.net.MalformedURLException muex) {

JOptionPane.showMessageDialog ((Component)null,muex.toString (),"网页浏览器",JOptionPane.ERROR_MESSAGE);

}

catch(Exception ex) {

JOptionPane.showMessageDialog ((Component) null,ex.toString (),"网页浏览器",JOptionPane.ERROR_MESSAGE);

}

}

};

thread.start ();

}

/*

**获得源代码

*/

void getHtmlSource (String url) {

String linesep,htmlLine;

linesep = System.getProperty ("line.separator");

htmlSource ="";

try {

java.net.URL source = new URL (url);

InputStream in = new BufferedInputStream (source.openStream ());

BufferedReader br = new BufferedReader ( new InputStreamReader (in));

while((htmlLine = br.readLine ())!=null) {

htmlSource = htmlSource +htmlLine+linesep;

}

}

catch(java.net.MalformedURLException muex) {

JOptionPane.showMessageDialog (WebBrowser.this,muex.toString (),"网页浏览器",JOptionPane.ERROR_MESSAGE);

}

catch(Exception e) {

JOptionPane.showMessageDialog (WebBrowser.this,e.toString (),"网页浏览器",JOptionPane.ERROR_MESSAGE);

}

}

/**

**实现监听器接口的hyperlinkUpdate函数

*/

public void hyperlinkUpdate (HyperlinkEvent e) {

/* if(e.getEventType () == HyperlinkEvent.EventType.ACTIVATED) {

String url = jurl.getText();

if(url.length ()0url.startsWith ("http://")) {

try {

jEditorPane1.setPage (url);

jEditorPane1.revalidate ();

}

catch(Exception ex) {

}

}

else if(url.length ()0!url.startsWith ("http://")) {

url="http://"+url;

try {

jEditorPane1.setPage (url );

jEditorPane1.revalidate ();

}

catch(Exception ex) {

}

}

}

*/

// Revised by copy editor :) Now with new code to help hyperlink

try {

if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED)

jEditorPane1.setPage(e.getURL());

} catch (Exception ex) {

ex.printStackTrace(System.err);

}

}

/*生成一个IE对象*/

public static void main (String [] args){

try{

UIManager.setLookAndFeel(

UIManager.getCrossPlatformLookAndFeelClassName()

);

}

catch(Exception e){

}

WebBrowser webBrowser = new WebBrowser ();

webBrowser.pack();

webBrowser.setVisible(true);

}

}

在哪能找到java源代码?

引用:down.china-code.net

引用:down.chinaz.com

引用:

引用:

引用:

引用:

引用:

引用:

引用:

Java是什么?Java到底能干嘛?

一、Java是什么?

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 。

二、Java能做什么?

学了Java到底能做什么工作,这个问题让初次接触Java的人很迷茫。其实Java可以做的东西太多了,手机游戏、中间件、软件、网站、以及如今非常火的手机app等等,都是通过Java语言编写的。

1、Java可以用来编写网站

对于学生来说,最关心的是Java能做什么,市场上招什么工作跟Java有关。现在很多大型网站都用jsp写的,JSP全名为JavaServerPages。

它是一种动态网页技术,比如我们熟悉的163,一些政府网站都是采用JSP编写的。所以学习Java的同学可以找编写网站方面的工作,而且现在找这方面的岗位比较多。

2、Java可以做Android

Android是一种基于Linux的自由及开放源代码的操作系统,其源代码是Java。所以市场上见到的手机系统例如MIUI,阿狸云,乐蛙等,都是修改源代码再发行的。

Java做安卓不单单是指系统,还有APP.对于更多的开发人员来说,他们更多的时间是花在开发APP上面。

3、Java可以做游戏

或者你不知道,在以前诺基亚还很流行的时候,你玩的手机游戏有90%以上都是Java开发的。当然现在已经很少人再去开发了,都转到安卓上去了。电脑上也有Java开发的游戏,最经典的是:《我的世界》(minecraft,简称MC)。

4、Java可以做软件

一般编程语言都可以做软件的,Java也不例外,例如Eclipse,MyEclipse等知名Java开发工具。有关开发软件组件,可以了解JavaSwing编程或者awt相关知识。

5、其他

除了以上所提的Java语言应用范围之外,家里的洗衣机、微波炉等家电都有可能是通过Java语言程序控制的呢。最重要的是要找到自己的一个兴趣所在,专攻一个领域,坚持下去才会做出成绩。

以上就是Java开发能做的一些工作。可以看出Java开发备受企业需要,大量的需求也就意味着从业人员的就业市场庞大,而那些具备贴近企业需求的扎实Java基本功的程序员,更是被企业争相抢聘。

java的源代码隐藏问题

你要的功能其实是Java代码混淆,如果要了解Java编译成exe,可以看“参考资料”。

下面一段文字摘自《Java 手机/PDA 程序设计入门》一书,可以做为混淆器性能的大致观点:

笔者没用过DashO,所以无法对其作出个人评价。所以现在仅说明笔者曾用过的产品。以笔者的个人观点,如果就混淆的程度来说,ZKM最好,JAX中等,RetroGuard和ProGuard最差,一分钱一分货,这是千古不变的道理。如果就功能性而言,ZKM和JAX都不错,不过,JAX是IBM所开发的产品,因此也继承了大部分IBM产品的最大特色,就是“功能超强,可是不易使用”,可能光是要看完JAX的设定文件就是一个很大的问题。

下面分别介绍几种具有代表性的混淆器,对它们的产品性能进行对比。我们使用不同混淆器对同一段java代码进行混淆,分别列出混淆后代码反编译的结果,并给出使用的一些直接体会。

原始java代码:

public class SimpleBean implements Serializable {

private String[] name = {"name0","name1","name2","name3"};

private List myList = null;

public void SimpleBean() {

myList = new ArrayList(4);

}

public void init_public() {

myList.add("name");

for(int i= 1; i 4; i++){

init_private(i);

}

}

private void init_private(int j) {

myList.add(name[j]);

}

private void writeObject(java.io.ObjectOutputStream out)

throws IOException {

}

}

一、ProGuard 4.5.1

ProGuard是一款免费的Java类文件压缩器、优化器和混淆器。它能发现并删除无用类、字段(field)、方法和属性值(attribute)。它也能优化字节码并删除无用的指令。最后,它使用简单无意义的名字来重命名你的类名、字段名和方法名。经过以上操作的jar文件 会变得更小,并很难进行逆向工程。eclipse已经把Proguard集成在一起了。它支持脚本控制,可以使用GUI界面,字符串不加密,支持 J2ME。

类似功能的开源混淆器:

RetroGuard yGuard(RetroGuard的一个升级版本) JODE

Jad反编译混淆后class得到的代码:

public class SimpleBean

implements Serializable

{

public SimpleBean()

{

a_java_util_List_fld = null;

}

public void SimpleBean()

{

a_java_util_List_fld = new ArrayList(4);

}

public void init_public()

{

a_java_util_List_fld.add("name");

for(int i = 1; i 4; i++)

{

int j = i;

SimpleBean simplebean = this;

a_java_util_List_fld.add(simplebean.a_java_lang_String_array1d_fld[j]);

}

}

private String a_java_lang_String_array1d_fld[] = {

"name0", "name1", "name2", "name3"

};

private List a_java_util_List_fld;

}

优点:

1、对内部private方法的调用进行了内联,但基本达不到混淆效果;

2、使用文档详尽,混淆选项配置文件的编写示例多;

3、混淆选项粒度较细,可以使用GUI界面,支持本地方法的保护等;

4、支持j2me,可以集成到Eclipse;

5、开源。

缺点:

1、符号混淆的命名具有提示性,字符串未加密,没有其它的混淆措施;

2、混淆主要针对Xlet、Midlet等应用,混淆库文件时配置文件将会很复杂。

二、Jocky

Jocky是金蝶中间件技术领袖袁红岗先生的个人作品(旧有名称JOC)。原本是方便Apusic 应用服务器的开发,现在开放出来,供大家自由使用。Jocky混淆编译器是在Sun JDK中提供的Java编译器(javac)的基础上完成的,修改了其中的代码生成过程,对编译器生成的中间代码进行混淆,最后再生成class文件,这样编译和混淆只需要一个步骤就可以完成。也就是说,它是直接从源码上做文章,这是Jocky与其它混淆编译器最大的不同之处。另外可以在源程序中插入符号保留指令来控制哪些符号需要保留,将混淆过程与开发过程融合在一起,不需要单独的混淆选项配置文件。Jocky的上述特点较适合于java类库的混淆。

Jad反编译混淆后class得到的代码:

public class SimpleBean

implements Serializable

{

public SimpleBean()

{

this;

String as[] = new String[4];

as;

as[0] = "name0";

as;

JVM INSTR swap ;

1;

"name1";

JVM INSTR aastore ;

JVM INSTR dup ;

JVM INSTR swap ;

2;

"name2";

JVM INSTR aastore ;

JVM INSTR dup ;

JVM INSTR swap ;

3;

"name3";

JVM INSTR aastore ;

_$2;

_$1 = null;

return;

}

public void SimpleBean()

{

this;

JVM INSTR new #9 Class ArrayList;

JVM INSTR dup ;

JVM INSTR swap ;

4;

ArrayList();

_$1;

}

public void init_public()

{

_$1.add("name");

for(int i = 1; i 4; i++)

_$1(i);

}

private void _$1(int i)

{

_$1.add(_$2[i]);

}

private void writeObject(ObjectOutputStream objectoutputstream)

throws IOException

{

}

private String _$2[];

private List _$1;

}

优点:

1、除符号混淆外增加了数据混淆(字符数组初始化);

2、有一些语句反编译只能得到字节码指令;

3、在Sun JDK中提供的Java编译器(javac)的基础上完成,编译和混淆一体完成,不需要先生成class文件再混淆;

4、提供了Eclipse的插件,能够直接在Eclipse中使用Jocky。

缺点:

1、混淆选项粒度较粗,使用中可能要在具体代码中添加@preserve指令来实现,工作量大;

2、没有控制流混淆。

三、Allatori 3.1_demo

Allatori属于第二代混淆器,具有全方位保护你的知识产权的能力。Allatori具有以下几种保护方式:命名混淆,流混淆,调试信息混淆,字符串编码,以及水印技术。对于教育和非商业项目来说这个混淆器是免费的。2.1版本支持war和ear文件格式,并且允许对需要混淆代码的应用程序添加有效日期。

Jad反编译混淆后class得到的代码:

public class SimpleBean

implements Serializable

{

public void init_public()

{

d.add(c.k("{u{0"));

int i = 1;

goto _L1

_L3:

H(i);

++i;

_L1:

4;

JVM INSTR icmplt 21;

goto _L2 _L3

_L2:

}

public void SimpleBean()

{

d = new ArrayList(4);

}

private void H(int a)

{

d.add(c[a]);

}

public SimpleBean()

{

d = null;

}

private void H(ObjectOutputStream objectoutputstream)

throws IOException

{

}

private String c[] = {

c.k("\177q\177te"), c.k("\177q\177td"), c.k("\177q\177tg"), c.k("\177q\177tf")

};

private List d;

}

注:c.k是为进行字符串加密额外生成的类c的静态方法。

优点:

1、设计考虑了库文件混淆的使用场景;

2、使用文档详尽,混淆选项配置文件的编写示例多;

3、除符号混淆外,还使用了两种高级的混淆手段:控制混淆(改写了for循环)和字符串加密(String数组初始化);

4、混淆选项粒度较细,支持本地方法的保护等;

5、支持水印技术,允许对需要混淆的代码添加有效日期;

6、支持j2me;

缺点:

1、商业软件(价格附后),对教育和非商业用途免费(网站链接是)。

附:价格情况

SINGLE DEVELOPER LICENSE

1 license $290

2-5 licenses $260

6-10 licenses $230

11+ licenses $200

SITE LICENSE $3750

BUSINESS LICENSE $4850

ANNUAL SUPPORT UPDATE $45

四、Zelix KlassMaster(ZKM)

Zelix KlassMaster是一个来自Zelix Pty Ltd的商业混淆器。官方文档中关于它的混淆特性的介绍很少。它的保护功能非常强大,可以进行符号混淆和控制混淆,支持字符串的复杂加密保护,堆栈混乱,支持异常重构,支持增量混淆,支持J2ME。Zelix KlassMaster提供试用版本,可以到下载。

五、DashO Pro

DashO Pro 是由Preemptive Solutions开发的商业化的混淆器. 免费的评估版可以到下载。DashO Pro代码保护能力强大易用,方便灵活(商业软件,非开源)。该Java混淆器是Sun的选择,对于企业级应用,作为其Java开发包的一部分,Sun微系统使用DashO Pro来混淆其加密库。DashO Pro能够对ID进行重新命名,使之成为毫无意义的字符;混淆元数据;改变控制流等,所有这些操作使得java代码被混淆,难于理解。产品特点包括:

领先的Java源码保护机制;

运用专利Overload-Induction技术对包/类/方法/域进行重命名;

高级的流程控制混淆机制;

字符串加密技术;

防止反编译器生成有用的输出;

水印软件;

提高Java源码效率;

不采用类/方法/域,全面移除常数存储库;

类/方法级别的优化,以提高JIT效果;

动态加载检测到的类;

全面高效的Java源码的拓展和部署;

支持所有的JDK版本 (JSE, J2EE, J2ME, etc)包括1.5;

自动堆栈跟踪转换;

在指定路径打包或者java jars;

支持任何打包类型的Java内容——程序、库、applets程序、小服务器程序、EJB等;支持基于J2ME CLDC的架构,包括MIDP和 iAppli;

支持CLDC预检验库中的类;

可以从指定路径、Zip压缩包或者jars中提取;

支持导出100%纯粹的Java,并提供验证;

命令行接口适合集成到构建环境内;

基于XML的配置文件,易于使用;

全面准确的PDF格式用户指南。


网页标题:手机java源代码 手机源码下载
分享路径:http://myzitong.com/article/docdseo.html