<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>你经常写一些有趣的小程序么?你想分发你的程序么?你怎么保证目标机上有jre呢?你打包一个?一个jre几十兆,若是大工程,带个jdk也无所谓,如果你自己的类文件一共还没有1兆,就要带个几十兆的jre,你能接受么?如果你想分发你的小程序,那么我们来进行jre瘦身吧!看看我们的HelloWorld最小能多小。
jre带的很多文件可能在你的程序里并不需要,或者你的程序只需要某个几兆大的jar里面的一个class。所以,理论上我们可以对jre进行减肥运动。把你不需要的jar和文件删掉,剩下的跟你的程序一起打个包。
下面以jdk5.0开发的一个HelloWorld为例来简单做个试验。
开发我们的Hello软件:
classHello{
publicstaticvoidmain(String[]args){
System.out.println("HelloWorld!");
}
}
用java-verboseHello执行程序就能看到所有用到的class。当然,如果你的程序比较复杂,中间有条件跳转的话,一次执行可能并不能将所有的可能用到的class打印出来。这个不是大问题,你可以尝试别的办法来找出所有用到的文件。
1。把这些class找出来。java-verboseHello>G:/jdkfit/Hello.list
当然,用Runtime.exec("java-verboseHello").getInputStream()来获得输出结果直接使用更好。
2。打个包。我们来写个程序来完成这个任务吧。执行下边这个Packager程序。
3。拷贝一个jre,把我们自己打的jar覆盖jre的rt.jar,用这个jre执行javaHello。最好做个bat文件(我做了个run.bat)。试着删除jre下的文件,看能不能run。直到最后,呵呵,只剩下这么几个了:
bin/java
bin/run.bat
bin/client/jvm.dll
lib/rt.jar(我们自己打的那个包)
lib/i386/jvm.cfg
共计大小:2.11兆
再来rar一下:1.123兆
呵呵1.1兆的一个小程序包更加容易分发吧。
packagecn.javadoc.jfit;
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.jar.JarOutputStream;
importjava.util.zip.ZipEntry;
publicclassPackager{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args)throwsException{
Filef=newFile("G:/jdkfit/Hello.list");
Packagerpkger=newPackager();
Listret=pkger.parseOutput(newFileInputStream(f));
pkger.debugEnabled=true;
pkger.pkgResources(ret,"G:/jdkfit/jar/Hello.jar");
}
privatebooleandebugEnabled;
publicListparseOutput(InputStreamin)throwsIOException{
ArrayListret=newArrayList();
BufferedReaderreader=newBufferedReader(newInputStreamReader(in));
Stringline=reader.readLine();
while(line!=null){
if(line.matches("\[Loaded.*from.*")){
if(debugEnabled)
System.out.println("Matches:"+line);
ret.add(line.substring(8,line.indexOf("from")));
}else{
if(debugEnabled)
System.out.println("UnMatches:"+line);
}
line=reader.readLine();
}
returnret;
}
publicvoidpkgResources(Listres,StringfileName)
throwsIOException{
Filef=newFile(fileName);
if(!f.exists()){
f.createNewFile();
}
byte[]buf=newbyte[1024];
JarOutputStreamout=newJarOutputStream(
newFileOutputStream(fileName));
for(Strings:res){
s=s.replace('.','/')+".class";
if(debugEnabled){
System.out.println("adding:"+s);
}
InputStreamin=this.getClass().getClassLoader()
.getResourceAsStream(s);
out.putNextEntry(newZipEntry(s));
intw=in.read(buf);
while(w>=0){
out.write(buf,0,w);
w=in.read(buf);
}
in.close();
}
out.finish();
out.close();
}
}
文章来源:http://www.javaresearch.org/article/99402.htm
分享到:
相关推荐
程序写好并编译后生成hex文件,这个hex文件就是要...好了,从今天起你就要知道你所写的程序有多大该怎么看了,另外程序的大小还可以在工程目录下的.map文件中看到:找到.map文件,用记事本打开,拉到最后就可以看到了。
python语⾔程序设计实践教程上海交通⼤学_Python语⾔程序 设计 Q:为什么越来越多的学校和专业已经或者计划开设Python程序设计相关课程? A:相较于其它⼤部分的通⽤型程序设计语⾔,Python的基础语法相对简单,且在...
也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。 小程序越来越流行,微信小程序、百度小程序、支付宝小程序、头条小程序等等不断涌入我们的生活,...
首先,微信小程序无需下载安装,用户通过微信即可直接使用,极大地降低了使用门槛。其次,小程序拥有与原生应用相近的用户体验,同时加载速度快,响应迅速,保证了良好的使用感受。此外,微信小程序还提供了丰富的...
这是一款多功能游戏组合的一款小程序 比如猜歌,摇骰子,真心话大冒险等等 php7.2 mysql5.6 1.上微擎框架 2.将后台两个压缩包上传到addons目录下解压 创建小程序应用 3.后台设置一下 接口 4.前段设置siteinfo.js...
小程序是一个易上手的东西, 对于新手来说,多看官方文档,可以初步做出比较完整的小程序,正是因为简单上手,功能实现简单,小程序是越来越火,商业价值也越来越大。 1. 微信web开发者工具:微信小程序官网 这是个...
你猜的不错,这就是一款恋爱话术小程序 该款小程序相对来说还是挺强大的 比之前小编发布的另外一款还强大,另外一款地址:https://airymz.com/3847.html 另外一款有的这一款都有,另外这一款有的另外一款确没有 这款...
小程序是一个易上手的东西, 对于新手来说,多看官方文档,可以初步做出比较完整的小程序,正是因为简单上手,功能实现简单,小程序是越来越火,商业价值也越来越大。 1. 微信web开发者工具:微信小程序官网 这是个...
小程序是一个易上手的东西, 对于新手来说,多看官方文档,可以初步做出比较完整的小程序,正是因为简单上手,功能实现简单,小程序是越来越火,商业价值也越来越大。 微信小程序开发和传统的H5开发还是有些不同的,...
小程序是一个易上手的东西, 对于新手来说,多看官方文档,可以初步做出比较完整的小程序,正是因为简单上手,功能实现简单,小程序是越来越火,商业价值也越来越大。 微信小程序开发和传统的H5开发还是有些不同的,...
在微信中运行时,微信小程序获得更多的系统权限。首先是数据缓存能力,这可以让用户在打开一个小程序的时候将程序的主要框架缓存到微信上,下一次就可以快速打开了。微信创始人张小龙曾说过,微信应用号希望实现的...
小程序是一个易上手的东西, 对于新手来说,多看官方文档,可以初步做出比较完整的小程序,正是因为简单上手,功能实现简单,小程序是越来越火,商业价值也越来越大。 1. 微信web开发者工具:微信小程序官网 这是个...
小程序是一个易上手的东西, 对于新手来说,多看官方文档,可以初步做出比较完整的小程序,正是因为简单上手,功能实现简单,小程序是越来越火,商业价值也越来越大。 1. 微信web开发者工具:微信小程序官网 这是个...
小程序是一个易上手的东西, 对于新手来说,多看官方文档,可以初步做出比较完整的小程序,正是因为简单上手,功能实现简单,小程序是越来越火,商业价值也越来越大。 1. 微信web开发者工具:微信小程序官网 这是个...
小程序是一个易上手的东西, 对于新手来说,多看官方文档,可以初步做出比较完整的小程序,正是因为简单上手,功能实现简单,小程序是越来越火,商业价值也越来越大。 微信小程序开发和传统的H5开发还是有些不同的,...
小程序是一个易上手的东西, 对于新手来说,多看官方文档,可以初步做出比较完整的小程序,正是因为简单上手,功能实现简单,小程序是越来越火,商业价值也越来越大。 1. 微信web开发者工具:微信小程序官网 这是个...
小程序是一个易上手的东西, 对于新手来说,多看官方文档,可以初步做出比较完整的小程序,正是因为简单上手,功能实现简单,小程序是越来越火,商业价值也越来越大。 1. 微信web开发者工具:微信小程序官网 这是个...
热量到底有多大呢?调查表明,用户观看博客的主要原因是“更个人化”和“可以看到不加掩饰的各种观点”,明显领先于其他,可见Blogger的竞争力重点是原创、个性。“更快的获得新闻”成为选项中最少的,看来中文博客...
小程序是一个易上手的东西, 对于新手来说,多看官方文档,可以初步做出比较完整的小程序,正是因为简单上手,功能实现简单,小程序是越来越火,商业价值也越来越大。 1. 微信web开发者工具:微信小程序官网 这是个...