移动开发的灵便迭代之道 黄凯.

Slides:



Advertisements
Similar presentations
嘉義縣中埔國民小學 補救教學實施方案 精神內涵說明 科技化評量系統實務操作 及基本學習內容認知. 為什麼要安排這樣的課程呢? 攜手計畫與補救教學實施方案的 差異 不是補救目前教學進度,也不再 是一堆表冊,而是補救學生的基 本學力 ( 基本學習內容 )
Advertisements

软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
跨平台移动开发框架比较 How many mobile platforms android 拥有最多的 developer. 开发语言-大众脸- java 开发成本最低,不用单独买一台电脑. 开发者账号-免费 发布应用很快-当天提交,当天就能发布 iOS 贵族平台-至少把自己包装的很高大上.
Java 程序设计(第二版) 普通高等教育 “ 十一五 ” 国家级规划教材 辛运帷等 编著 徐小平 主讲.
互联网公司通用 XSS 解决方案探 讨 百度. 自我介绍 暗夜潜风 /d4rkwind 百度 高级安全工程师 mere#vip.qq.com.
報告者:蕭曄鴻 班級:溫馨甲孝 指導教授:李開濟博士
單元名稱: 健康的兩性交往.
課程地圖 (104年入學-日間部) 校通識核心 專業課程 必修與選修 與管理模組 網路技術 App設計與應用模組 學院通識核心 學院專業核心
职业教育.课程改革.项目课程 江苏省太仓中等专业学校校长 江苏省职业教育教学改革创新指导委员会委员 江苏省职业教育课程开发研究中心组组长
翰林版國文第三冊第六課 《迢迢牽牛星》 設計者:郭宜幸.
提升应用内HTML5 的开发和使用体验
移动校园Hybrid应用开发介绍 2015年11月.
C语言程序设计 李伟光.
事件驱动的移动数据中心 广州舜飞信息科技有限公司 谭荣棉.
教學經驗分享 吳毅成 國立交通大學資訊工程系 2012年4月.
Java程序设计教程 第一讲 Java概述.
國立清華大學 國科會計畫經費管理 報告人:周 杏 貞 中華民國101年5月.
JavaScript中常用的互動方式 認識簡單的交談與基本的運算.
第12讲 Javascript 复习 信息学院 孙辉.
Hello小程序的运行和编译 Java AppletJava小程序的构成 1、关键字
第23章 增加点击率 ——网站优化与推广.
信 息 与 软 件 工 程 学 院 实验室开放实验介绍.
广东省教育厅教研室 黄志红 ,     研究改进行动     反思促使成长 广东省教育厅教研室  黄志红 ,
第4章 JavaScript脚本语言基础 4.1 JavaScript简介 4.2 JavaScript语法基础
《网页设计与制作》 教学课件 主讲人:湖南铁道职业技术学院 陈承欢
俄语字母的发音体系 阅读规则.
歡 迎 各位視光界精英 蒞 臨 元培視光系 103校外學分班說明會.
让微笑伴您一生.
幼兒美勞試教 我想飛~~~~~ 四幼二A D 莊小萱 D 林昀儒 D 劉思妤
Html5在移动互联网项目的应用 主讲人:曲毅
第1章 导论 倚动实验室.
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
組員:蔡惠雅 494D0032 楊雅惠494B0079 蔡騏鴻 葉時宇 余建霖495B0002 陳瑛淑495B0021
第10章 App微信分享的实现 倚动实验室.
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
Ch5 Android應用程式的主要組成.
HTTPS改造项目 阿里技术保障部-PE1部-千山 2014/9/18.
职责链模式.
JavaScript 靜宜大學 資管系 楊子青.
Java语言程序设计 第八部分 Applet小程序.
NAMO網頁製作教學簡報 講師:李惠茹.
張智星 台大資工系 多媒體檢索實驗室 第九章 小餅乾(Cookies) 張智星 台大資工系 多媒體檢索實驗室.
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
UI设计标准、移动开发规范、移动管理规范、集成标准规范
程式語言與邏輯 高慧君 台北市立南港高中 2006年12月22日.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
Ajax编程技术 第六章 调试与错误处理.
網路應用.
Ch09 在網頁之間傳遞資訊 網頁程式設計.
致 理 科 技 大 學 「106年大專校院弱勢學生助學計畫」 說 明 會 中 華 民 國 106 年 9 月 13日.
網站HOLMES DATA監測代碼.
UI 软件 设计 页面布局(一).
关于视听障的N个小知识.
主编:钟元生 赵圣鲁.
第3章 JavaScript基本语句.
Unity回傳統計資訊程式說明: 填寫回傳資訊網址(theUrl)。
服務教育課程 改制說明會 學生事務處 服務教育組
喜雨亭記 國二甲 S 陳姿婷.
僅首頁出現本title即可 責任的故事(二年級) 生命最美麗動人的本能 簡報製作:瑞柑國民小學 鄭雙慧 文/ 何秀芳.
第8章 网页特效——JavaScript 主讲人:刘泰然 经济管理学院.
大数据应用人才培养系列教材 数据清洗 刘 鹏 张 燕 总主编 李法平 主编 陈潇潇 副主编.
第9章 BroadcastReceiver的使用
第6章 Android客户端模块实现 QQ群(App开发案例教程--清华) :
讀取網路資料及JSON開放資料 靜宜大學資管系 楊子青
美和科技大學資訊科技系 助理教授 美和科技大學資訊科技系 學生士
104學年度 進修學校期初工作報告.
Part 8 Broadcast Receiver、Service和App Widget
JavaScript 教师:魏小迪
Presentation transcript:

移动开发的灵便迭代之道 黄凯

一切的开始 1、频繁的版本发布 2、个性化的通知无法随时定制

解决方案: HTML

1.1 JavaScript 呼叫 Android方法 … myWebView = (WebView) findViewById(R.id.myWebView); myWebView.addJavascriptInterface(new ScriptHandler(this), “callclass"); JavaScript … <script type="text/javascript"> function share(message) { javascript:callclass.share(message); } </script>

1.2 JavaScript 呼叫 iOS 方法 iOS: - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *url = request.URL; if ([url.scheme isEqualToString:@"hujiang"] && [url.host isEqualToString:@"com.hujiang.class"]) { NSString *path = url.path; if (path isEqualToString:@"showToast") { NSString *message = xxx; //取请求参数 (参数可通过 url.query 获取到) [HJToast showToast:message]; return NO; } return YES; HTML … window.href=hujiang://com.hujiang.class/showToast?text=hujiang

2、 Cordova (JavaScript 呼叫 Android方法) <script src="js/cordova_android.js" type="text/javascript"></script> <script src="js/cordova_plugins.js" type=“text/javascript"></script> … <script type="text/javascript"> varshare = function(){ var cb=function(data){} var cberr=function(err){ } window.echo=cordova.exec(cb, cberr, ‘MVPlugin', 'Share' , [{title:”我是标题”,imageUrl:"http://hujiang.com/hujiang.png",link:"http://hujiang.com",description:"分享数据"}]); </script> Java (MVPlugin.java extends CordovaPlugin) … execute(String action, JSONArray params, CallbackContext callback)…{ if ("Share".equals(action)) { … }

3 JSBridge

3.1 JSBridge 调用 Android Java (HJAppJSEvent.java) … @JavascriptInterface public void navigator_setTitle(String titleJson, String callback) { callJSMethod(callback, jsonString); } Java … JSSDK.getInstance().registerJSEvent(HJAppJSEvent.getInstance(this)); JavaScript … HJAPP.navigator_setTitle(‘hujiang’, ‘callback_method’)

3.2 JSCore 调用 iOS iOS ( HJMJSNavigatorModule.h) … @protocol HJMJSNavigatorModuleExport <JSExport> JSExportAs(navigator_setTitle, - (void)setNavigatorTitle:(NSString *)title callback:(NSString *)callback ); @end iOS (HJMJSNavigatorModule.m) (void)setNavigatorTitle:(NSString *)title callback:(NSString *)callback { … [callback callWithArguments:@[returnValue]]; } JavaScript … HJAPP.navigator_setTitle(‘hujiang’, ‘callback_method’)

遇到的问题 性能 (弱网、无网络) 方案:打包页面、本地加载

遇到的问题 缓存 方案1:修改页面访问路径 方案2:页面访问的资源路径加上版本号

遇到的问题 应用外网页打开应用 方案: Scheme

1、什么是Scheme? 2、Scheme如何实现呼叫原生? hujiang://com.hujiang.class/showToast?text=hujiang 2、Scheme如何实现呼叫原生? iOS … - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return YES; }… Android … <activity android:name=".activity.SchemeActivity" > <data android:host=“com.hujiang.class” android:scheme="hujiang" /> </activity> HTML … <a href=’ hujiang://com.hujiang.class/showToast’ />…

遇到的问题 用户信息的传递 方案1:Http Header 方案2:cookie

遇到的问题 重定向页面点击后退按钮 方案:document.referrer

Apk的动态加载 不安装也能执行

DL : Apk动态加载框架

不支持Service、BroadcastReceiver 遇到的问题 不支持Service、BroadcastReceiver 方案: Remote Service 挂载到现有的Receiver

(Scripting Layer for Android) 脚本语言的应用 SL4A (Scripting Layer for Android) http://code.google.com/p/android-scripting/ Python For Android https://github.com/kivy/python-for-android

Demo: Python … >>> import android >>> droid = android.Android() >>> result = droid.makeToast(‘Hello, world!’) >>> |

Q&A