当前位置: 编程技术>移动开发
本页文章导读:
▪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
最新技术文章: