代码改变世界

PhoneGap,Web Application,反编译,代码阅读器

2012-01-25 10:09  onm  阅读(476)  评论(0编辑  收藏  举报
这篇文有点杂了,说了四部分,破折号后面纯扯了,如标题所示,分别是,PhoneGap,Web Application,代码阅读器,反编译。 PhoneGap phonegap,我想搞手机开发的人应该都知道,使用phonegap可以用web开发的前端技术开发应用,也就是html,css,js开发应用,然后可以部署到多个主流平台,并且phonegap根据各个平台封装了统一的一套和手机交互的api。API包含Accelerometer,Camera,Capture,Compass,Connection,Contacts,Device,File,Geolocation,Media,Notification,Storage等。然后就是js那套事了。 android的activity的生命周期算是android学习的第一课,那么关于phonegap的生命周期呢,分别是onDOMContentLoaded, window.onload,onNativeReady,onPhoneGapInit,onPhoneGapReady,onPhoneGapInfoReady,onDeviceReady,onResume,onPause,onDestroy。其中只有deviceready,pause,resume是提供给用户处理的,deviceready是java代码部分初始化完毕全部初始化完成,状态就绪触发,pause,resume是和android的onPause和onResume一样周期。 phonegap的问题是性能问题,还是会卡,照原生应用差很多,而且对于有大量后台逻辑的很不适合,Services,线程啥的还是很麻烦,官网说像Dropbox这种,大量上传下载,同步逻辑的应用不适合搞。而且虽说是phonegap是跨平台,但是按照http://phonegap.com/apps应用列表来看,大部分都是只编译了ios平台的,只用phonegap确实有很多限制,之前看到有部分嵌入phonegap的,当前这种模型可能更多也更适合些。 对于部分采用phonegap的,可能需要和其它原生Activity交互,传送数据什么的,phonegap提供了插件机制,github有维护插件列表,有个webintent,phonegap默认没有用js打开本地activity的方法,用别的activity启动phonegap的activity的时候也不能传参给js代码,这个可以方便做这些操作。最近版本的phonegap这个webintent插件失效了,phonegap插件机制有所更改,需要做一点更改,可以看这里https://github.com/phonegap/phonegap-plugins/pull/335。关于phonegap plugin,其实大部分的api都是基于插件机制做的,但是关于plugin的相关文档很不好,如果想写phonegap插件,还是看别的插件和源码中插件那部分,我看了下其实不复杂。 Web Application 分四部分,内容大部分来自android dev guide,其实Web Application就是应用里面嵌入个浏览器,用浏览器呈现网页罢了,不过是文艺的说法。 1. Targeting Screens from Web Apps 又是屏幕问题,Android的设备多种多样,重要的是dpi也不一样,你说电脑显示器也很多,各种各样,但是dpi是一致的。 对于Web Application,Android系统提供了一些对于分辨率的支持,html代码定义一些meta,webview会识别,然后做相应调整。
<meta name="viewport"
      content="
          height = [pixel_value | device-height] ,
          width = [pixel_value | device-width ] ,
          initial-scale = float_value ,
          minimum-scale = float_value ,
          maximum-scale = float_value ,
          user-scalable = [yes | no] ,
          target-densitydpi = [dpi_value | device-dpi |
                               high-dpi | medium-dpi | low-dpi]
          " />
简要说明,默认viewport的宽是800像素,如果设置了,设置多少就是多少,如果设置成device-width(height)就是手机分辨率的像素数。user-scalable是否允许用户缩放。另外js中可以通过window.devicePixelRatio取得设备像素密度比值。css可以通过media的-webkit-device-pixel-ratio属性来加载相应的css。 2. Building Web Apps in WebView 总结起来一句话用WebView,这个类仔细看看其实挺好玩,涉及到另两个WebViewClient和WebChromeClient,也很好玩。 3. Debugging Web Apps Debuging好说,就是用console.log之类的,会在Logcat上打印。 4. Best Practices for Web Apps 其实这也没啥东西。 总结起来其实没啥东西。 反编译 ------ http://code.google.com/p/android-apktool/ 主要用来看反编译出来的资源文件。 http://code.google.com/p/dex2jar/ 配合JD(Java decompiler),主要用来看反编译出来的代码。代码被混淆过的话,看了也看不出来啥,有的时候可以看看它用了什么库。 用法都很简单,另外,可以用hierarchyviewer来看Activity的布局,需要手机是Debug模式的,这个不是说手机root后就可以用。手机要是Debug模式的。 5分钟构建代码阅读器 刚看到一条微博,《简讯:为庆祝 Vim 编辑器的20周年,Applidium 项目团队把 Vim 移植到 iOS 了》。 然后有人回复:放过程序员吧!别人买一ipad开心玩游戏,我们买一个ipad到处写程序啊! ~~~~ 代码阅读器,这其实是一个需求。 最基础的需求是代码高亮,这个其实巨简单,可以写成web application,可以用phonegap,现成的基于js的代码高亮工具有很多,搞技术博客的人肯定知道一堆这种js脚本,我看了几个简单的代码阅读器,都是基于google的prettify的。 读取文件内容到html,然后js高亮。读取文件可以java读取然后给html,也可以用phonegap的File API,用了下File API,很简单也好用。如果想要文件浏览器之类的,可以用OpenIntents的OI文件管理器,http://www.openintents.org/en/,然后就完了。可以说是5分钟完成代码阅读器应用。 另外,通过反编译,看到有的原生实现的用到了RSyntaxTextArea这个库,关于Android重点在MultiAutoCompleteTextView.Tokenizer这个东西,大概看了一眼。 但是我觉得,代码阅读的关键是,交叉引用的跳转,管有代码高亮只实现了一半,研究了半天没找到什么解决方案。过程中找到ace editor这个玩应,挺强大,但是对平板触摸设备不兼容,虽然有ipad branch,但是不好用。 结:写的很粗,过年Happy下~