跟我一起玩转Sencha Touch 移动 WebApp 开发1
跟我一起玩转Sencha Touch 移动 WebApp 开发(一)
1.目录
- 移动框架简介,为什么选择Sencha Touch?
- 环境搭建
- 创建项目框架,框架文件简介
- 创建简单Tabpanel案例
- 自定义图标的方式
- WebApp产品测试和发布
- HTML5离线缓存
- 发布成Android/IOS本地app应用
移动框架简介,为什么选择Sencha Touch?
目前市面上,移动应用web框架,也算是风生水起,不断涌现,各个都称自己最牛逼。常见的几个框架主要有jquery Mobile,Dojo Moble,Sencha Touch,我这里是极端推荐Sencha Touch,至于它多优秀,不是我说了算,只有你亲自用过,做过项目之后才能领悟他的魅力;至于从没用过的口水党,请绕道。
Sencha Touch是使用HTML5,CSS3和JavaScript来实现的,它可以在Android、IOS、WP、黑莓平台上使用,也可以在其他带有HTML5兼容的Web浏览器的平台上使用。更多详细介绍可以到官方阅读http://www.sencha.com/products/touch/,这里不罗嗦。
至于我为什么选择Sencha Touch,理由有如下几点:
- Sencha 旗下的产品,如果你熟练Extjs,几乎是零学习成本,平滑过渡到Touch开发,Sencha是一个非常活跃的组织,技术更新和支持都有很好的保障,世界财富100强里,50%都在用他们的产品
- 完美支持各大移动平台Android、IOS、WP、BlackBerry等,同时可以运行在任何HTML5兼容或以webkit为内核的浏览器上(chrome,safari,360|搜狗极速模式)等,一次编写,n次复用
- 采用超强的cmd压缩、Html5缓存和over-the-air技术,离线访问,解决您对流量的担忧
- 完美支持本地打包,一行命令即可将整个WebAPP打包成为NativeApp,非常方便,不需做任何变更(令我震惊的是可以直接通过ajax访问远程的服务没有跨域问题)
- MVC开发模式,充分解耦,层次分明
- 针对不同平台,区别对待,一个app,phone和tablet两种展现
- 便捷的Sencha Cmd命令工具,类似ruby的命令行,辅助开发
- 丰富的报表控件
- 业界最完备、精致的API文档,丰富的学习资料,几乎一看就懂,强大的forum支持
- 稳定性、JSONP、兼容性等小细节,堪称完美
- 等。
- 更多介绍请看API:http://docs.sencha.com/touch/2.2.1/
环境搭建
1.下载sencha Touch SDK包http://www.sencha.com/products/touch/download/
2.确认本机安装了jdk1.6+,1.7最好

3.Ruby1.9.3或者更早的版本,但一定不能安装2.0的,下载地址:http://rubyinstaller.org/downloads/

4.android-sdk-tools,如果你不想打包成nativeApp,可以不用下载
5.Sencha Cmd 下载地址:http://www.sencha.com/products/sencha-cmd/download
6.注意将jdk,ruby,sencha cmd都添加到环境变量
Sencha Cmd 能干什么?详见:http://docs.sencha.com/touch/2.2.1/#!/guide/command
创建项目框架
ok,环境搭建完毕,下面我们通过sencha cmd(一下简称cmd)的一行命令创建项目框架
# 首先确认进入到了sencha-touch-2-sdk
cd /path/to/sencha-touch-2-sdk
sencha generate app MyApp /path/to/www/myapp
ok,很简单我们生成了自己的项目架构,以后所有的开发都在这个项目架构中开发。

框架文件简介
.sencha:cmd命令运行的一些配置参数
app:整个项目
resources:项目的资源文件,包括css,images,icons[app图标],startup[启动闪屏图片]
touch:touch的核心包,源文件,资源文件等
app.js:整个项目的入口,配置了需要加载那些js文件等等
index.html:app启动页面
这里需要重点讲下app.json文件和packager.json文件
从st2.x开始,项目启动时候加载的js,css等并不像以前一样全都写在index.html,而是通过app.json配置的形式来动态加载
st2.x的启动加载方式有多种,你可以参考http://www.cnblogs.com/dowinning/archive/2012/03/23/2413071.html
之所以保持官方这种方式,是因为后期我们可以直接通过cmd命令对项目压缩发布,或者打包等,如果破坏了目录结构,cmd将无法执行。
更详细介绍请看官网:http://docs.sencha.com/touch/2.2.1/#!/guide/command_app
app.json浅析
通过IIS或者VS的IIS Express可能无法加载该MIME类型,需要手工配置MIMEhttp://www.cnblogs.com/qidian10/p/3289816.html
app.json文件中注意js部分,默认开发的时候采用的是sencha.js,这将导致整个app加载js的时候都是加载st的源代码文件,速度会非常慢,这里我改成sencha-all.js文件,直接加载他编译好的包,效率将大大提升
packager.json该文件是为了app打包用的,等到项目发布的部分再解析
创建简单Tabpanel案例

我们打开app文件夹,在view里面添加如下文件:

各个部分代码如下:
其他文件夹的main文件和favorite的类似,只需要改下标题和iconCls即可,下载地址:http://files.cnblogs.com/qidian10/view.rar
当然这些view、store、model、controller文件,你完全可以通过cmd命令创建
cd /path/to/www/myapp
sencha generate model User id:int,name,email
如果知道命令参数,直接输入:sencha generate model
ok,创建完成这些文件,你应该可以看到自己的界面了,但遗憾的是估计你看不到你的图标iconCls的图标,应为有两个图标是我自定义的。
SenchaTouch里如何使用自己定义的图标也是一门很大的学问,ST采用sass技术,图标在2.2里面全部改成了字体的形式,也就是你看到的图标其实是一个字体(例如A)
自定义图标的方式
那么如何在Sencha Touch 2.2 里自定义icon图标呢?提供一种简单方法http://www.cnblogs.com/qidian10/p/3292669.html
学会自定义icon后,将需要的icon,CSS加入到app.json的css块中
WebApp产品测试和发布
ok,不出意外,现在一个完整的demo应用已经展现在你面前了。
到目前为止,如果你不嫌费流量和加载效率的话,其实一个应用已经完成了,你可以直接用了。
但是Sencha给我们提供了更加优秀的app发布方式,可以直接将项目中需要的资源压缩打包,进行html5的离线缓存,这样,我们的应用程序在第一次加载完成后,在离线情况下也是可以使用的(数据访问除外)
Sencha给我们提供了4种发布方式
- testing:供测试,QA使用版本
- package:脱离web server,本地html文件资源包
- production:正是发布的webapp产品
- native:打包成android apk,或者ios app本地安装文件
我们只需要在cmd里,执行一行命令即可发布我们的产品:
#production,testing,native,package
#进入到你的通过cmd生成的MyApp文件夹中
sencha app build production

ok,项目成功build,你可到MyApp/build/MyApp/Production中看生成的文件,你直接打index.html你会发现瞬间app就打开了,因为cmd帮我们做了压缩工作,所有的css,js都压缩了,而且app的mvc核心文件都打包压缩到app.js里,减少了请求次数。
HTML5离线缓存
如果你将已发布好的app,放到remote server上,第一次打开index.html,然后切断网络,再次刷新index.html你会发现仍然可以显示。原因就是他采用了html5的离线缓存技术

Sencha Touch App每次打开都会检查服务器是否有变动,如果有变动,会自动触发app.js里的onUpdated方法,提醒用户更新
如果HTML5离线缓存小白的同学,赶紧补课:http://www.cnblogs.com/qidian10/p/3292876.html
哦对了,这里还需要添加MIME类型以支持html5的缓存变更文件cache.appcache,application/cache-manifest
发布成Android/IOS本地app应用
如果你觉得采用webapp的方式,仍然不够理想,那么可以用st的另一把利器,打包Sencha Touch webapp为本地native app
这里介绍如何将Sencha Touch 打包为Android的apk
首先确认安装了android-sdk-tools,jdk,下面开始本节的最后一个内容:
1.生成android证书
简单起见,我们将私钥仓库(keystore)建立在X:/目录,将私钥仓库(keystore),别名(alias) 和密码(password)都设为"hzyapp"。

$ keytool -genkey -v -keystore hzyapp.keystore -alias hzyapp -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password: (I entered "hzyapp")
What is your first and last name?
[Unknown]: jack chen
What is the name of your organizational unit?
[Unknown]: it
What is the name of your organization?
[Unknown]: hzy
What is the name of your City or Locality?
[Unknown]: jiaxing
What is the name of your State or Province?
[Unknown]: zhejiang
What is the two-letter country code for this unit?
[Unknown]: CN
Is CN=Patrick Chu, OU=Training, O=Sencha, L=Redwood City, ST=California, C=US correct?
[no]: y Generating 2,048 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10,000 days
for: CN=jack chen, OU=it, O=hzy, L=jiaxing, ST=zhejiang, C=CN
Enter key password for <hzyapp>
(RETURN if same as keystore password):
[Storing hzyapp.keystore]

ok,这样你就产生了一个hzyapp.keystore证书,备用。
上面我们讲到还有一个文件packager.json没解析,这里解析下,该文件就是打包本地应用的配置文件,打开文件内容配置对android的配置如下:

{
"applicationName":"HzyApp",
"applicationId":"com.hwayifashiongroup.HzyApp",/*必须是包括两个点*/
"bundleSeedId":"KPXFEPZ6EF",
"versionString":"1.0",
"versionCode":"1",
"icon": {
"36":"resources/icons/Icon_Android36.png",
"48":"resources/icons/Icon_Android48.png",
"57":"resources/icons/Icon.png",
"72":"resources/icons/Icon~ipad.png",
"114":"resources/icons/Icon@2x.png",
"144":"resources/icons/Icon~ipad@2x.png"
},
"inputPath":"./",
"outputPath":"../build/",
"configuration":"Debug",
"platform":"Android",/*平台,还有IOS等类型*/
"certificatePath":"X:/hzyapp.keystore",/*证书*/
"certificateAlias":"hzyapp",/*证书别名*/
"certificatePassword":"hzyapp",/*证书密码*/
"sdkPath":"D:/GreenSoftWare/Android/android-sdk-windows",/*android-sdk路径*/
"androidAPILevel":"8",/*Android版本,我用了2.2*/
"permissions":[
"INTERNET",
"ACCESS_NETWORK_STATE",
"CAMERA",
"VIBRATE",
"ACCESS_FINE_LOCATION",
"ACCESS_COARSE_LOCATION",
"CALL_PHONE"
]
}

文件配置成功后,执行最关键的一步,打包命令


如果全线飘绿,那恭喜你,你成功了,赶紧到\build\MyApp\native目录下找你的apk吧,哈哈

ok,安装到手机上,测试,一切正常,速度刚刚的,当然真正的和nativeapp比,必然会存在一些不足,但对于企业级的移动应用足够了。
文章最后再爆一料,默认产生的app,安装到android后,title bar是没有隐藏的,这个你只需要去更改cmd的模版文件即可
SenchaCmd\Sencha\Cmd\3.1.2.342\stbuild\st-res\android\AndroidManifest.xml,我想你该知道怎么做了吧!(*^__^*)
OK了,本节基本上贯穿了整个Sencha Touch开发的全貌。
下节课将会介绍真正的Sencha Touch细节开发了,深入到app里的各个层面(model,store,view,controller),注意事项,profile不同设备的适配等,敬请期待。
能坚持看完的朋友,别忘了支持下哦
跟我一起玩转Sencha Touch 移动 WebApp 开发1的更多相关文章
- 跟我一起玩转Sencha Touch 移动 WebApp 开发(一)
1.目录 移动框架简介,为什么选择Sencha Touch? 环境搭建 创建项目框架,框架文件简介 创建简单Tabpanel案例 自定义图标的方式 WebApp产品测试和发布 HTML5离线缓存 发布 ...
- sencha touch 入门系列 (二)sencha touch 开发准备
这是本人第一次写博客教程,没什么经验,文笔也不是很好,写这教程一方面为了巩固自己这段时间的学习成果,一方面帮助大家解决问题,欢迎大家多提建议,指出问题.接下来我们就开始我们的sencha touch开 ...
- html5外包—长年承接html5外包业务:《Sencha Touch权威指南》下载
<Sencha Touch权威指南>内容简介:如何才能全面而透彻地理解和掌握移动应用开发框架Sencha Touch并开发出令人心动的移动应用?<Sencha Touch权威指南&g ...
- sencha touch 开发准备
这是本人第一次写博客教程,没什么经验,文笔也不是很好,写这教程一方面为了巩固自己这段时间的学习成果,一方面帮助大家解决问题,欢迎大家多提建议,指出问题.接下来我们就开始我们的sencha touch开 ...
- 俺的新书《Sencha Touch实战》终于出版了
内容简介:Sencha框架是第一个基于HTML 5的移动也能给予框架,可以让Web应用看起来像网络应用.美丽的用户 界面 组件和丰富的数据管理,全部基于最新的HTML 5和CSS 3的Web标准,全部 ...
- sencha touch 常见问题解答(26-50)
26.sencha touch在华为.红米等部分手机下hide事件失效,msgbox无法关闭怎么办 答:请看http://www.cnblogs.com/cjpx00008/p/3535557.htm ...
- 【翻译】使用Sencha Touch开发Google Glass应用程序
原文:Developing for Google Glass with Sencha Touch 作者:Ross Gerbasi Ross Gerbasi is a Senior Engineer a ...
- sencha touch的开源插件和例子
写了好久的sencha touch,没想到换工作竟然一年多没有搞了.因为项目的缘故收集了好多的组件,由于懒惰,没有整理,现在想想有点后悔了,再加上如果就这样丢弃,感觉有些遗憾,今天整理了一下放在git ...
- 亲手使用Sencha Touch + phonepag开发Web APP随笔 -- 第一个APP
参考博文: [Phonegap+Sencha Touch] 移动开发1.准备工作 [Phonegap+Sencha Touch] 移动开发2.PhoneGap/Cordova初步使用 经过差不多1 ...
随机推荐
- maven_基本配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 用fildder 查看loveuv 刷流量时通信的数据
loveuv是一个用来刷网页流量的站点,以下介绍怎么查看它刷流量时数据的传输 首先是注冊页面,邀请码UBMNEY 注冊账号登陆后,在账户资料页面http://www.loveuv.com/user/m ...
- hdu(2062)-Subset sequence 组合数学
意甲冠军:查找集合{1,2,3...n}第一m一个排列子. 收集的线索所行的大小. 例两个元素的排列子集合按字典树排列是:{1},{1,2},{2},{2,1}: 解法:一个一个元素来确定,每次把剩余 ...
- IOS开发中绘制地图线路
地图应用经常会涉及到线路的绘制问题,ios下可以使用MKMapView进行地图开发,使用 MKOverlayView进行线路的绘制. 使用MKMapView添加MKMap.framework 和Cor ...
- HDU 1256 图片8
图片8 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- Math.random引发的骗术,绝对是用随机数骗前端妹纸的最佳方法
我觉得今天我运气特好,今天我们来赌一赌,我们来搞个随机数,Math.floor(Math.random() * 10),如果这个数等于0到7,这个月的饭,我全请了,如果是8或9,你就请一个礼拜成不?于 ...
- SQL点滴15—在SQL Server 2008中调用C#程序
原文:SQL点滴15-在SQL Server 2008中调用C#程序 T-SQL的在执行普通的查询的时候是很高效的,但是在执行循环,判断这样的语句的时候效率就不那么的高了.这时可以借助CLR了,我们可 ...
- ViewPaper实现轮播广告条
使用V4包中的viewPaper组件自己定义轮播广告条效果. 实现viewpaper的滑动切换和定时自己主动切换效果. 上效果图 布局文件 <RelativeLayout xmlns:andro ...
- JS基础——事件绑定
上一篇博客JS事件对象中,老师问JS事件处理和VB中的事件处理有什么联系?先来解决一下这个问题.举个VB.net中事件处理的样例(JS敲久了,VB习惯的都不熟悉了,看来得常常回想了): 1.事件处理V ...
- C# 在本地创建文件夹及子文件夹
string dict = @"d:\估价报告\"; if (!Directory.Exists(dict)) { Directory.CreateDirectory(dict); ...