随着移动端设备越来越多, 微信应用号即将发布, 越来越多的页面需要被移动浏览器承载, HTML5开发大热, 我们需要掌握Web开发的技能来适应时代变化.

合适的WebApp框架

AndroidUI4Web是一个高性能的WebApp框架, 在移动浏览器上有与原生App一致的体验.
对Android开发者们来说, 更重要的是:
框架移植自Android, 开发方式和API调用与Android开发保持一致, Android们可以低成本快速上手开发.

框架优点

  1. 流畅度. 框架使用Web Canvas渲染页面, 能有接近60fps的流畅度.
  2. 原生级别体验. 页面过渡动画, 滚动回弹, 点击响应等等细节都是原生级别的体验.
  3. 稳定. 所有UI组件都是移植自Android, 组件内部逻辑与原生Android的一致, 稳定度也一致.
  4. 易用. 对Android开发者可以超低成本上手开发.
  5. 开发者社区. 所有API文档用法和问题等都可以从Android社区找到.

Sample App

在线Sample地址: http://linfaxin.com/AndroidUI4Web/sample/main.html
预览:

高性能的原因:Canvas

Android中的视图是通过Android的Canvas对象渲染的, AndroidUI4Web框架接管Android的视图层, 所有渲染最终由Web Canvas实现.
主流的Web开发是DOM开发, 而DOM节点的性能是公认的慢的, 其他框架不能胜任一个复杂的WebApp开发.
参考

与Android开发相似

整个WebApp的开发流程与AndroidApp基本一致

HTML语法布局:

1
2
3
4
5
6
<FrameLayout>
<TextView
android:text="Hello world"
android:gravity="center"
></TextView>
</FrameLayout>

TypeScript代码:

1
2
3
4
5
6
7
8
9
10
11
module my.app {
import Activity = android.app.Activity; export class MainActivity extends Activity{ protected onCreate(savedInstanceState?:android.os.Bundle):void {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_main);
}
}
}

开始开发

Note: 代码使用TypeScript书写, 风格和语法与Java相似, 就算没有接触过TypeScript, 可以很快上手: http://www.typescriptlang.org/Handbook

准备环境

  1. 下载IDE: 支持Typescript的IDE或者编辑器. (推荐使用WebStorm)
  2. 安装Node.js: https://nodejs.org/
  3. 安装Typescript: npm install -g typescript
  4. 安装Babel转码器: npm install -g babel-cli
  5. 下载打开Hello World工程: 下载地址
  6. 如果使用WebStorm, 打开工程后, 需要在设置中开启TypeScript编译以获得更好代码提示和错误检查:
    Preferences -> Languages & Frameworks -> TypeScript: 1.Enable TypeScript Compiler. 2.use tsconfig.json

Hello World工程一览

目录/文件说明:

  1. app.html
    App入口页面, 可以修改’title’标签为你的App名字, ‘android-ui’标签里定义activity为App的入口Activity

  2. androidui-sdk
    AndroidUI框架存放的目录, 如果框架版本有更新, 需要升级替换其中的文件.

  3. build
    存放最终构建生成的js文件.

  4. res & gen
    res文件夹放图片,布局等资源, 在构建时会生成R文件在gen目录, 在代码引用R文件调用资源

  5. src
    代码的存放目录

查看WebApp

需要先起一个本地服务器, 然后打开app.html文件的地址.
如果使用WebStorm, 可以直接对app.html文件右键->Open In Browser 就可以查看.
打开页面后, 需要打开浏览器的开发者模式和手机模拟器, 具体参考这里

布局代码

与Android工程一致, 布局文件存放在res/layout文件夹, 目前仅支持’.html’后缀的布局文件.
布局代码内容与Android工程一致, 如HelloWorld工程中的activity_main.html文件:

1
2
3
4
5
6
<FrameLayout>
<TextView
android:text="Hello world"
android:gravity="center"
></TextView>
</FrameLayout>

需要注意的是目前不支持self-closing, 如上例中的TextView不能写成:

1
2
3
4
5
6
<FrameLayout>
<TextView
android:text="Hello world"
android:gravity="center"
/>
</FrameLayout>

另外layout_width和layout_height属性不是必须项, 如果没有定义则以父节点的默认定义为准. 参考ViewGroup.generateDefaultLayoutParams

如果新增了布局文件, 需要先手动执行build脚本, 才可以在代码中以 R.layout.xxx 方式引用到这个布局:

1
./build.sh

TypeScript代码

代码存放在src目录, 使用TypeScript书写, 代码风格和语法和Java较为接近, 可以很快上手并书写代码.
框架的API和Android的一致, 上手TypeScript后, 就可以立马开始使用框架了.

需要注意的一些事项是:

  1. Java中可以省略this调用方法和属性, 但TypeScript中必须带上. 如: this.setContentView(…)
  2. 一个类不能有多个同名的方法
  3. 其他常见的Java开发开始写JavaScript会遇到的问题.

修改代码后必须手动执行build脚本:

1
./build.sh

然后刷新浏览器看到最新结果.

开发效率

WebStorm + TypeScript 使得代码提示和错误检查十分友好, 代码书写的效率不会低于目前Android开发.
布局开发暂无属性提示补全和错误属性检查, 建议先在AndroidStudio里写好复制过来. 后期会以WebStorm插件方式提供支持.
在Chrome开发台的调试和断点能力比原生开发体验更优, 界面和代码的调试都比原生Android开发更友好.
界面调试:

实时查看View属性:

代码调试:

移动端的性能

IOS端稳定在50fps+, 全程原生级别的流畅度.
Android端Chrome浏览器根据机子性能在40-50fps左右.
Android4.x系统WebView:30fps左右. 不过国内主流机型都是定制过的系统(小米系统等), 默认浏览器内核已是较新版本, 能有40-50fps.

打包成App发布

目前可以使用Cordova(PhoneGap)打包方案, 同时建议Android端打包进CrossWalk内核保证4.x系统的流畅度.

进入调试

在’android-ui’标签加上debug属性, 所有Android视图节点都会以DOM节点的形式输出到’android-ui’标签里, 可以看到每个节点的大小位置.
Chrome开发台里选中对应节点后, 可以在节点的Properties里看到DOM节点的字段值, 所有Android节点的信息都在AndroidView字段里.

转战WebApp: 最适合Android开发者的WebApp框架的更多相关文章

  1. C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 VC中进程与进程之间共享内存 .net环境下跨进程、高频率读写数据 使用C#开发Android应用之WebApp 分布式事务之消息补偿解决方案

    C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing). ...

  2. Android开发者必备的42个链接

    http://mobile.51cto.com/ahot-426035.htm Android开发者必备的42个链接 下面收集了42个帮助大家学习Android的内容链接,部分内容是面向初学者的,帮助 ...

  3. 每个Android开发者都应该了解的资源列表

    前言   这是一篇译文,原文地址Resources every Android developer must know,在译文开头,推荐两篇同样适合于Android开发者阅读的资源列表Android开 ...

  4. [转] Android开发者必备的42个链接

    下面收集了42个帮助大家学习Android的内容链接,部分内容是面向初学者的,帮助大家从头开始学习Android开发,其他则面向较高级的开发者.希望推荐的这些内容对你有帮助. 官方网站 1.谷歌And ...

  5. 每个Android开发者必须知道的资源集锦

    英文原文:Resources every Android developer must know 随着 Android 平台持续惊人的增长,越来越多的开发人员开始工作于 Android 应用程序.而且 ...

  6. 定制Android开发者专属T恤

    之前在T社上买了一件定制的T恤,感觉质量挺不错的,那是段子张发起的众筹.正面有hello google这几个字母. 我自己本身是一个Android粉,从nexus手机到pixel手机,坚持买原生的操作 ...

  7. 【工利其器】必会工具之(二)Android开发者官网篇

    前言 当刚开始踏入Android程序员这个行业的时候,想必绝大多数的人都和笔者一样,热血沸腾,激情四射,买了很多讲解Android开发的书籍.当开发某个功能需要学习某方面知识的时候,大家又成了“面向百 ...

  8. 写给Android开发者的Kotlin入门

    写给Android开发者的Kotlin入门 转 https://www.jianshu.com/p/bb53cba6c8f4 Google在今年的IO大会上宣布,将Android开发的官方语言更换为K ...

  9. Android开发者选项——Gpu呈现模式分析

    对于Android用户来说,无论你用的什么品牌的手机,在开发者选项中都能发现“玄学曲线”的开关,之所以称其为玄学曲线,还是因为它被很多网友用于测试一个说不清道不明的东西——流畅度.到底多流畅才叫流畅, ...

随机推荐

  1. union 与struct的空间计算

    一.x86 总体上遵循两个原则: 整体空间----占用空间最大的成员(的类型)所占字节数的整数倍 对齐原则----内存按结构成员的先后顺序排列,当排到该成员变量时,其前面已摆放的空间大小必须是该成员类 ...

  2. 学习Swift -- 拓展

    拓展(Extension) 扩展就是向一个已有的类.结构体.枚举类型或者协议类型添加新功能.这包括在没有权限获取原始源代码的情况下扩展类型的能力(即逆向建模).扩展和 Objective-C 中的分类 ...

  3. vim配置vimrc详解(转)

    vimrc的存放位置: 系统 vimrc 文件: "$VIM/vimrc" 用户 vimrc 文件: "$HOME/.vimrc" 用户 exrc 文件: &q ...

  4. Quartz 有状态的JobDataMap

    Quartz,每次执行job,job永远是全新的对象,但是,如果job实现org.quartz.StatefulJob接口,而不是job接口. 此时JobDetail的JobDataMap将会共享一个 ...

  5. Spring MVC 解读——@RequestMapping (2)(转)

    转自:http://my.oschina.net/HeliosFly/blog/214438 Spring MVC 解读——@RequestMapping 上一篇文章中我们了解了Spring如何处理@ ...

  6. 接收对 http://192.168.1.18:8001/ObtainData/Service 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。

    [2015/8/5 19:28:49]错误信息:接收对 http://192.168.1.18:8001/ObtainData/Service 的 HTTP 响应时发生错误.这可能是由于服务终结点绑定 ...

  7. bzoj1014

    动态询问LCP,所以我们不好用后缀数组考虑使用维护序列问题的splay+hash求LCP这里mark一下,hash求LCP常用mo=9875321自然溢出的话交上去莫名其妙WA了这里树上某节点hash ...

  8. [FJSC2014]折线统计

    [题目描述] 二维平面上有n 个点(xi, yi),现在这些点中取若干点构成一个集合S,对它们按照x 坐标排序,顺次连接,将会构成一些连续上升.下降的折线,设其数量为f(S).如下图中,1->2 ...

  9. BZOJ1600: [Usaco2008 Oct]建造栅栏

    1600: [Usaco2008 Oct]建造栅栏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 825  Solved: 473[Submit][Sta ...

  10. -_-#【Better Code】throttle / debounce

    浅谈javascript的函数节流 javascript函数的throttle和debounce throttle 疯狂触发事件,固定步调执行 debounce 疯狂触发事件,不会执行 var res ...