当前位置: 编程技术>移动开发
本页文章导读:
▪PhoneGap技术引见 PhoneGap技术介绍
PhoneGap
开发语言: HTML, CSS, JavaScript开发工具: PhoneGap Development Tools, Development Code链接: http://phonegap.com/ 优点:开源、跨平台
PhoneGap是一个开源项目,并且是跨平台的.........
▪ 【selenium】selenium-ide装配及验证 【selenium】selenium-ide安装及验证
selenium安装前提
1、安装Firefox浏览器2、到官网http://seleniumhq.org/download/
下载selenium-ide-1.6.0.xpi
selenium-ide安装
1、下载完成后拖动文件到打开的Firefox窗口,.........
▪ 雷电战机-附源码 雷电战机---附源码自己无聊写着玩的,没有注意代码架构和规范阿,大家就当娱乐一下,挺好玩的!我玩了一下午....
package com.example.phonegaptest;
import java.util.ArrayList;
import java.util.Iterator;
impor.........
[1]PhoneGap技术引见
来源: 互联网 发布时间: 2014-02-18
PhoneGap技术介绍
开发一个具有相同业务的应用Natural-Application需要使用到不同平台的框架和开发语言。使用 C/C++ 的 Symbian、使用 Object C 的 iOS 和使用 Java 的 Android 应用开发技术,几乎是完全无法融合的。 PhoneGap跨平台移动应用开发框架正是应运而生。
PhoneGap
- 开发语言: HTML, CSS, JavaScript
- 开发工具: PhoneGap Development Tools, Development Code
- 链接: http://phonegap.com/
- 优点:开源、跨平台
PhoneGap是一个开源项目,并且是跨平台的。有了它,JavaScript工程师能够轻松地利用网页技术(HTML/CSS/JavaScript)来开发手机应用(包括安卓和苹果的)。PhoneGap号称是“唯一开源的手机框架,并且支持7个平台”! 它支持的平台有Android, iOS, Windows Phone7, Web OS, Symbian, 和BADA。
phonegap 简单来说是一个中间件,为移动前端提供访问移动终端设备及资源的接口。采用统一的标准的html、javascript、css等web技术开发。通过不同平台的浏览器访问来实现跨平台。通过javascript脚步代码调用系统资源,以降低开发难度,所以受到广大web开发人员的青睐。
我们需要搞清楚几个概念:Web App,Native App,Hybird App移动平台Application几个概念:
Web App 这个主要是采用统一的标准的HTML,JavaScript。CSS等web技术开发。通过不同平台的浏览器访问来实现跨平台。同时可以通过浏览器支持充分使用HTML5特性,缺点是这些基于浏览器的应用无法调用系统API来实现一些高级功能,也不适合高性能要求的场合。
Native APP 就是所谓的原生应用。指的是用平台特定的开发语言所开发的应用。使用它们的优点是可以完全利用系统的API和平台特性,在性能上也是最好的。缺点是由于开发技术不同,如果你要覆盖多个平台,则要针对每个平台独立开发,无跨平台特性。
Hybird App 则是为了弥补如上两者开发模式的缺陷的产物。分别继承双方的优势。首先它让为数众多的web开发人员可以几乎零成本的转型成移动应用开发者;其次,相同的代码只需针对不同平台进行编译就能实现在多平台的分发,大大提高了多平台开发的效率;而相较于web App,开发者可以通过包装好的接口,调用大部分常用的系统API。
而PhoneGap正是Hybird APP目前框架中集大成者
phonegap优缺点评估
日前,phonegap框架热度如火如荼。一项技术当然会有其优缺点,我们是选用phonegap还是选择Native APP,要先分析两者的利弊,再根据具体应用选择,
1 phonegap优点:
1.1、可跨平台。它的原理如下:PhoneGap通过调用JavaSCript调用API库实现和各个平台的SDK进行无差别的交互。 以达到调用不同平台手机上摄像头,文件系统,重力感应。GPS定位等功能。
1.2 易用性。
1.3 提供硬件访问控制。比起传统的Web程序,PhoneGap提供了一些列的JS 的类,可以直接访问硬件。比如加速,相机,指南针,GPS,文件访问等,可以让你用JS方便地调用系统的硬件。以弥补传统Web程序的一块错误。
1.4 可利用成熟javascript框架。web的发展,诞生了许多javascript框架。著名的有Ext js、jQuery。随着移动应用的需求越来越大,jQuery出现了jQuery mobile版本。它的体积小,为移动应用量身定制。使用javascript框架也降低了开发难度,使得移动应用更美观。
1.5 方便的安装和使用。PhoneGap,只用很简单的配置就可以搭好环境。只用专注写好自己的Web页面,拷贝进去就可以了。
2 phonegap不足之处
2.1 运行速度慢。PhoneGap集成多了个平台。程序的载入和UI界面的反应都比原生的程序慢,UI反应延时——这是个致命伤 。它实际上还是在展示Web页面,所以载入、页面刷新等肯定是需要一定时间的。这在用户体验上来说PhoneGAp依然无法替代原生应用程序。另外,html、javascript、css都运行在各平台内置浏览器webkit之上,受到webkit处理速度影响。目前来说运行速度比较慢,性能较差。
2.2 不适合部分程序。如果你的程序需要3D功能,或者对界面刷新有较高的要求,比如类似于游戏的程序现在来说还只是用原生的语言会比较好。
2.3 调用平台资源差。phonegap应用程序对平台资源的使用依赖于phonegap框架本身,由于phonegap是第三方框架,做不到100%调用平台资源。比如说,现在版本未能支持视频解码与播放等
2.4 内存消耗大。有测试表明,用phonegap于android java开发同一个应用。运行phonegap应用内存消耗远大于原生态android java应用。对于频繁操作,释放内存较慢,从而导致内存消耗量飙升。
2.5 调试难度大。目前phonegap可以在控制台输出简单的JS调试日志,但是并不方便。调试js只能选择firefox firebug调试。
结语
phonegap的目标就是快速开发移动应用实现written once, run everywhere跨平台。phonegap一定程度上降低了移动开发的门槛,特别是ios开发。类似于phonegap这样的框架的出现,并不能取代Native APP原生态应用。phonegap有它的不足之处,运行速度较慢、操作平台资源不灵活、操作移动设备不方便,这些都依赖着phonegap框架本身的升级与发展。
[2] 【selenium】selenium-ide装配及验证
来源: 互联网 发布时间: 2014-02-18
【selenium】selenium-ide安装及验证
selenium安装前提
- 1、安装Firefox浏览器
- 2、到官网http://seleniumhq.org/download/
下载selenium-ide-1.6.0.xpi
selenium-ide安装- 1、下载完成后拖动文件到打开的Firefox窗口,有如下提示
- 2、等待五秒钟后,安装按钮可用,点击安装,安装完成后会提示重启,重新启动浏览器
- 3、重启完成后,可在菜单栏:工具--> 中看到Selenium IDE 菜单项,安装完成
- 1、下载selenium-java-2.16.1.zip
- 2、解压缩至指定路径(E:\rwq个人项目\rwq个人项目软件下载安装\selenium-2.16.1),打开文件夹可看见selenium-java-2.16.1.jar
- 1、Firefox窗口,菜单栏:工具--> Selenium IDE 打开
- 2、打开新的浏览器页面“http://www.google.com.hk/”
- 3、selenium IDE界面“Base URL”输入框输入“http://www.google.com.hk/”,
- 4、确定table标签页无数据,确定selenium IDE界面右上角红色按钮是按下状态
- 5、回到浏览器输入“测试IDE”,点击搜索
- 6、回到selenium IDE界面,点击selenium IDE界面右上角红色按钮,停止记录
- 7、点击左上角“Play entire test suite”,可看见页面再重复之前操作
- 8、选中“type”将“value”对应的“测试IDE”更改为“测试”。点击“Play entire test suite”则浏览器执行时检索词更改为“测试”
- 1、selenium IDE界面菜单栏中 文件-->Export Test Case As...--> JUnit 3(Remote Control),导出为java文件(test.java)
- 2、开始 --> 运行 --> cmd --> java -jar D:\webworksoftware\selenium-2.16.1\selenium-server-standalone-2.16.1.jar
(即:selenium-server-standalone-2.16.1.jar文件所在目录)
- 3、再eclipse新建测试项目,引入刚导出的test.java文件
- 4、工程引用相关的库文件,添加jar包,以及JUnit
- 5、在java文件上右键 Run As --> Junit Test
- 6、当看到firefox自动启动,回放录制的脚本,单元测试运行成功,则环境安装成功
学习网址:http://www.cnblogs.com/hyddd/tag/Selenium/
[3] 雷电战机-附源码
来源: 互联网 发布时间: 2014-02-18
雷电战机---附源码
自己无聊写着玩的,没有注意代码架构和规范阿,大家就当娱乐一下,挺好玩的!我玩了一下午....
package com.example.phonegaptest; import java.util.ArrayList; import java.util.Iterator; import java.util.Random; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Point; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.view.WindowManager; public class MainActivity extends Activity { int planeX = 160; int planeY = 550; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 设置无标题 requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(new MyView(this)); } class MyView extends View { final int BACK_HEIGHT = 1700; private Bitmap back; private Bitmap plane; private Bitmap plane2; ArrayList<Point> bomb = new ArrayList<Point>(); ArrayList<Point> foemanBomb = new ArrayList<Point>(); int foemanBombTimes = 0; Point foeman = new Point(); boolean foemanDied = true; boolean imDied = false; Random random = new Random(); Matrix m = new Matrix(); int count = 0; final int WIDTH = 320; final int HEIGHT = 600; private int startY = BACK_HEIGHT - HEIGHT; public MyView(Context context) { super(context); setFocusable(true); back = BitmapFactory.decodeResource(getResources(), R.drawable.back_img); plane = BitmapFactory.decodeResource(getResources(), R.drawable.plane); m.setRotate(180); plane2 = Bitmap.createBitmap(plane, 0, 0, plane.getWidth(), plane.getHeight(), m, true); final Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 0x123) { startY -= 30; if (startY < 0) { startY = BACK_HEIGHT - HEIGHT; } } invalidate(); } }; new Timer().schedule(new TimerTask() { @Override public void run() { if (foemanDied) { int x = random.nextInt(320 - 34); int y = random.nextInt(600 - 90); foeman.x = x; foeman.y = y; foemanDied = false; } if (foemanBombTimes++ > 10) { foemanBombTimes = 0; Point point = new Point(foeman.x + 17, foeman.y + plane2.getHeight()); foemanBomb.add(point); } handler.sendEmptyMessage(0x123); } }, 0, 100); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_LEFT: planeX -= 30; if (planeX < 0) { planeX = 0; } break; case KeyEvent.KEYCODE_DPAD_RIGHT: planeX += 30; if (planeX > WIDTH - 34) { planeX = WIDTH - 34; } break; case KeyEvent.KEYCODE_DPAD_DOWN: planeY += 30; if (planeY > HEIGHT - 45) { planeY = HEIGHT - 45; } break; case KeyEvent.KEYCODE_DPAD_UP: planeY -= 30; if (planeY < 0) { planeY = 0; } break; case KeyEvent.KEYCODE_DPAD_CENTER: if (!imDied) { Point point = new Point(planeX + 17, planeY); bomb.add(point); } break; case KeyEvent.KEYCODE_BACK: if (imDied) { count = 0; imDied = false; foeman.x = random.nextInt(320 - 34); foeman.y = random.nextInt(600 - 90); } break; } invalidate(); return true; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Bitmap bitmap2 = Bitmap .createBitmap(back, 0, startY, WIDTH, HEIGHT); canvas.drawBitmap(bitmap2, 0, 0, null); if (!imDied) { canvas.drawBitmap(plane, planeX, planeY, null); } Paint paint = new Paint(); Paint paint2 = new Paint(); paint.setColor(Color.RED); paint2.setColor(Color.WHITE); Iterator iterator = bomb.iterator(); if (!foemanDied) { canvas.drawBitmap(plane2, foeman.x, foeman.y, null); Iterator iterator2 = foemanBomb.iterator(); while (iterator2.hasNext()) { Point p = (Point) iterator2.next(); p.y += 20; if (p.y > 595) { iterator2.remove(); } canvas.drawCircle(p.x, p.y, 5, paint2); if (p.x > planeX && p.x < planeX + 34 && p.y > planeY && p.y < planeY + 45) { imDied = true; } } } while (iterator.hasNext()) { Point p = (Point) iterator.next(); p.y -= 10; if (p.y < 0) { iterator.remove(); } canvas.drawCircle(p.x, p.y, 5, paint); if (p.x > foeman.x && p.x < foeman.x + 34 && p.y > foeman.y && p.y < foeman.y + 45) { foemanDied = true; canvas.drawText("nice", foeman.x, foeman.y, paint); count++; } } canvas.drawText("Your score:" + count, 5, 10, paint); if (imDied) { canvas.drawText("Game is over! Press the back key.", planeX, planeY, paint2); } } } }
源码:http://download.csdn.net/detail/h3c4lenovo/4565429
最新技术文章: