跟我一起玩转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里面添加如下文件:

各个部分代码如下:

 app.js
 app/view/Main.js
 app/view/favorite/Main.js

其他文件夹的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的更多相关文章

  1. 跟我一起玩转Sencha Touch 移动 WebApp 开发(一)

    1.目录 移动框架简介,为什么选择Sencha Touch? 环境搭建 创建项目框架,框架文件简介 创建简单Tabpanel案例 自定义图标的方式 WebApp产品测试和发布 HTML5离线缓存 发布 ...

  2. sencha touch 入门系列 (二)sencha touch 开发准备

    这是本人第一次写博客教程,没什么经验,文笔也不是很好,写这教程一方面为了巩固自己这段时间的学习成果,一方面帮助大家解决问题,欢迎大家多提建议,指出问题.接下来我们就开始我们的sencha touch开 ...

  3. html5外包—长年承接html5外包业务:《Sencha Touch权威指南》下载

    <Sencha Touch权威指南>内容简介:如何才能全面而透彻地理解和掌握移动应用开发框架Sencha Touch并开发出令人心动的移动应用?<Sencha Touch权威指南&g ...

  4. sencha touch 开发准备

    这是本人第一次写博客教程,没什么经验,文笔也不是很好,写这教程一方面为了巩固自己这段时间的学习成果,一方面帮助大家解决问题,欢迎大家多提建议,指出问题.接下来我们就开始我们的sencha touch开 ...

  5. 俺的新书《Sencha Touch实战》终于出版了

    内容简介:Sencha框架是第一个基于HTML 5的移动也能给予框架,可以让Web应用看起来像网络应用.美丽的用户 界面 组件和丰富的数据管理,全部基于最新的HTML 5和CSS 3的Web标准,全部 ...

  6. sencha touch 常见问题解答(26-50)

    26.sencha touch在华为.红米等部分手机下hide事件失效,msgbox无法关闭怎么办 答:请看http://www.cnblogs.com/cjpx00008/p/3535557.htm ...

  7. 【翻译】使用Sencha Touch开发Google Glass应用程序

    原文:Developing for Google Glass with Sencha Touch 作者:Ross Gerbasi Ross Gerbasi is a Senior Engineer a ...

  8. sencha touch的开源插件和例子

    写了好久的sencha touch,没想到换工作竟然一年多没有搞了.因为项目的缘故收集了好多的组件,由于懒惰,没有整理,现在想想有点后悔了,再加上如果就这样丢弃,感觉有些遗憾,今天整理了一下放在git ...

  9. 亲手使用Sencha Touch + phonepag开发Web APP随笔 -- 第一个APP

    参考博文: [Phonegap+Sencha Touch] 移动开发1.准备工作 [Phonegap+Sencha Touch] 移动开发2.PhoneGap/Cordova初步使用   经过差不多1 ...

随机推荐

  1. I/O概述和审查操作

    I/O流量可表示非常多不同种类的输入源和输出目的地.它包含一个简单的字节流,基本数据(int.boolean.double等待),本地化字符,和对象.仅是简单地传递数据,另一些流能够操作和转换数据 不 ...

  2. linux复制文件命令scp

    linux大多数复制我们的递送工具使用,有着ftp,scp等一下. 当中scp命令很easy快捷, 本机到远程:scp (-r) 本地目录或者文件路径 远程ip:目录 远程到本机:scp (-r) 远 ...

  3. Java初始阶段

    初时接触感觉Java与C语言有很多异曲同工之处. Java起源: Java之父:James Gosling 正式发布时间:1995年5月23日 其特点为:简单.面向对象.可移植.多线程.动态 其编译后 ...

  4. iOS开发的一些奇巧淫技2

    能不能只用一个pan手势来代替UISwipegesture的各个方向? - (void)pan:(UIPanGestureRecognizer *)sender { typedef NS_ENUM(N ...

  5. MVC验证13-2个属性至少输入一项

    原文:MVC验证13-2个属性至少输入一项 有时候,我们希望2个属性中,至少有一个是必填,比如: using Car.Test.Portal.Extension;   namespace Car.Te ...

  6. Wowza流媒体Live直播和VOD点播配置实战

    Wowza是当今可以说最流行的流媒体服务器之一,近来因为需要搭建相应的服务器,但又不想用camera等作真实的直播,所以想办法用媒体文件转换成直播流再提供给Wowza进行直播.这里把该设置步骤以及设计 ...

  7. Android项目----AsyncTask异步操作

    public abstract class AsyncTask extends Object java.lang.Object    ↳ android.os.AsyncTask<Params, ...

  8. 实现基本的CRUD功能

    文] 使用 MVC 5 的 EF6 Code First 入门 系列:实现基本的CRUD功能 2014-04-28 16:29 by Bce, 428 阅读, 0 评论, 收藏, 编辑 英文渣水平,大 ...

  9. MFC双缓冲和裁剪问题导致闪烁

    问题描述: 应用场景:在对话框中,自定义一个MFC图形控件(为了描述方便,暂定为HSPaintControl),控件覆盖整个对话框的客户区,属于最底层的控件,在这之上放置了很多其他的小图形控件. 问题 ...

  10. 你的flume-ng的第一篇博客

    我在flume-ng 1.1.0 孵化版的时候就开始接触了,自己也搞了一段时间,没事扯扯心得吧. 先说在前面,flume-ng 后面的版本,我没仔细读change log ,比较农民 , 不知道新添了 ...