I-Jetty部署war包到安卓手机
2016-03-17 21:32
302 查看
罗嗦一下:最近在做一个把iJetty集成到安卓软件中的项目,今天经过4小时的折腾,到快绝望了才让我把这个问题给解决掉了,哎,记下,以免别人走我的老路,还有提醒大家,以后多关心下Log。。。
1、制作安卓手机能识别的war包
声明:直接用Eclipse导出的war包,安卓手机是无法解析的,原因是安卓用的java虚拟机是谷歌自己写的,做安卓开发的人都知道为什么,就不说明了。
(1) 把web工程的lib下的jar文件转换成安卓认识的dex文件
以下指令说明:把lib和classes的中与java有关的文件编译成dex并打包到D盘根目录下(dx.bat在android sdk的build-tools中有)
(2) 把classess.zip文件复制到web工程的lib文件夹下,并删除lib文件夹下所有的jar包,但是classes中的class文件要保留。
(3) 把Web工程打包成war(打开cmd后,先cd到web工程的WebRoot下,如cd D:\Test\WebRoot),注意指令后面的英文句号,有用的!!!
(4) 在WebRoot文件夹下会生成Test.war,把它复制放到到安卓的ijetty/webapps下,重启ijetty服务器后,有些手机就可以看到效果了。
2、解决HTTP ERROR: 503 SERVICE_UNAVAILABLE
这个问题百度、谷歌后,基本没人回答的出来,当然问的人也少,我也是最后看到了log之后才知道原因的,以下原因分析:
先看log:
上面说IO流出错,Test.war的WEB-INF目录下的web.xml文件无法打开,其实原因很简单,这里是因为程序没有读SD卡权限造成的,谷歌在安卓4.1后加入了读SD卡权限,刚好我使用的模拟器是4.4版本,而且刚好iJetty也没有加入读SD卡权限,所以会报错,所以加上读SD卡权限后,问题解决,完成!!!
1、制作安卓手机能识别的war包
声明:直接用Eclipse导出的war包,安卓手机是无法解析的,原因是安卓用的java虚拟机是谷歌自己写的,做安卓开发的人都知道为什么,就不说明了。
(1) 把web工程的lib下的jar文件转换成安卓认识的dex文件
以下指令说明:把lib和classes的中与java有关的文件编译成dex并打包到D盘根目录下(dx.bat在android sdk的build-tools中有)
dx.bat --dex --output=D:\classes.zip D:\WorkSpace\Test\WebRoot\WEB-INF\classes D:\WorkSpace\Test\WebRoot\WEB-INF\lib
(2) 把classess.zip文件复制到web工程的lib文件夹下,并删除lib文件夹下所有的jar包,但是classes中的class文件要保留。
(3) 把Web工程打包成war(打开cmd后,先cd到web工程的WebRoot下,如cd D:\Test\WebRoot),注意指令后面的英文句号,有用的!!!
jar cvf Test.war .
(4) 在WebRoot文件夹下会生成Test.war,把它复制放到到安卓的ijetty/webapps下,重启ijetty服务器后,有些手机就可以看到效果了。
2、解决HTTP ERROR: 503 SERVICE_UNAVAILABLE
这个问题百度、谷歌后,基本没人回答的出来,当然问的人也少,我也是最后看到了log之后才知道原因的,以下原因分析:
先看log:
Failed startup of context o.e.j.w.WebAppContext{/Test,[file:/data/data/org.mortbay.ijetty/cache/jetty-0.0.0.0-8080-Test.war-_Test-any-/webinf/, jar:file:/storage/emulated/0/jetty/webapps/Test.war!/]},file:/storage/emulated/0/jetty/webapps/Test.war java.io.IOException: Couldn't open jar:file:/storage/emulated/0/jetty/webapps/Test.war!/WEB-INF/web.xml at org.apache.harmony.xml.ExpatParser.openUrl(ExpatParser.java:755) at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:292) at javax.xml.parsers.SAXParser.parse(SAXParser.java:390) at org.eclipse.jetty.xml.XmlParser.parse(XmlParser.java:199) at org.eclipse.jetty.xml.XmlParser.parse(XmlParser.java:215) at org.eclipse.jetty.webapp.Descriptor.parse(Descriptor.java:60) at org.eclipse.jetty.webapp.WebDescriptor.parse(WebDescriptor.java:143) at org.eclipse.jetty.webapp.MetaData.setWebXml(MetaData.java:165) at org.eclipse.jetty.webapp.WebXmlConfiguration.preConfigure(WebXmlConfiguration.java:55) at org.eclipse.jetty.webapp.WebAppContext.preConfigure(WebAppContext.java:417) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:453) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at org.mortbay.ijetty.deployer.AndroidWebAppDeployer.scan(AndroidWebAppDeployer.java:203) at org.mortbay.ijetty.deployer.AndroidWebAppDeployer.doStart(AndroidWebAppDeployer.java:63) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at org.eclipse.jetty.util.component.AggregateLifeCycle.doStart(AggregateLifeCycle.java:63) at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:53) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:91) at org.eclipse.jetty.server.Server.doStart(Server.java:263) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at org.mortbay.ijetty.IJettyService.startJetty(IJettyService.java:704) at org.mortbay.ijetty.IJettyService$JettyStarterThread.run(IJettyService.java:159) Caused by: java.util.zip.ZipException: Local File Header signature not found; was F0C75E71 at java.util.zip.ZipFile.throwZipException(ZipFile.java:427) at java.util.zip.ZipFile.getInputStream(ZipFile.java:283) at java.util.jar.JarFile.getInputStream(JarFile.java:389) at libcore.net.url.JarURLConnectionImpl.getInputStream(JarURLConnectionImpl.java:222) at org.apache.harmony.xml.ExpatParser.openUrl(ExpatParser.java:753) ... 21 more
上面说IO流出错,Test.war的WEB-INF目录下的web.xml文件无法打开,其实原因很简单,这里是因为程序没有读SD卡权限造成的,谷歌在安卓4.1后加入了读SD卡权限,刚好我使用的模拟器是4.4版本,而且刚好iJetty也没有加入读SD卡权限,所以会报错,所以加上读SD卡权限后,问题解决,完成!!!
相关文章推荐
- 关于动态规划的一点理解
- LA2963
- Paper Reading 3:Continuous control with Deep Reinforcement Learning
- LightOJ - 1003 Drunk
- POJ-1160 Post Office (DP+四边形不等式优化)
- 24Pointgame-----24点游戏
- iOS开发--项目内存优化
- 18. 4Sum LeetCode
- KVM原理与架构系列之三 CPU虚拟化篇
- 《leetCode》:Maximum Product Subarray
- 浅谈 C++ 中的 new/delete
- Android自定义弹出框AlertDialog
- 使用FreeMarker的Web Project例子
- Reverse Linked List II
- PB事件:pbm_enupdate
- python标准库学习1-SYS
- 从客户端中检测到有潜在危险的 Request.Form 值 设置 ValidateRequest="false" 不管用
- IBM Bluemix试用到期后绑定信用卡继续免费使用
- PowerDesigner 学习笔记
- noip2011普及组:统计单词