11 2011 档案

摘要:一、手机软件测试背景 我国的手机测试技术整体上还是处于刚刚起步阶段,近几年经历了从无到有的过程。现在的水平基本上能满足手机测试的要求,但是同发达国家的先进生产厂商的差距是全方位的,无论是从实现技术上,流程的规范性与合理性,还是从对测试概念的理解上都有相当的距离。又加上手机产业的巨大发展潜力,所以,手机测试技术在我国手机开发行业中必将面临着激烈的竞争和强大的挑战。 测试伴随着整个手机软件开发的各个阶段中。测试的成功与否,测试的覆盖性好坏与测试质量的高低直接关系到手机软件的可用性,友好性,可靠性。直接影响到产品能否如期上市,关系到手机厂商的切身利益与长期的市场竞争力。可以说,测试环节事后及软件.. 阅读全文
posted @ 2011-11-30 09:29 移动应用开发 阅读(264) 评论(0) 推荐(0) 编辑
摘要:经过几个月的时间和大家的努力,手机QQ浏览器(android版)从 2.0 陆续更新到的 2.6。在经历了设计的千回百转和架构的不断尝试后,终于有了个新面貌,使用体验也比之前版本有了较大提升。不过,这也仅仅是万里长征第一步,这里先和大家分享下这第一步背后的设计心得。互联网的一些事 国内局势 互联网的一些事 我们可以先来了解国内局势。目前,浏览器市场可谓战火不断,狼烟四起。姑且不说PC端各大浏览器大牛厂商角力数十年。单看手机端,特别是android平台,似乎早已成为兵家必争之地。Opera,起兵早,国际声誉高,想方设法吞噬国内市场。UC,靠多年的积累,早已成为一方霸主。海豚,后起之秀,... 阅读全文
posted @ 2011-11-29 16:31 移动应用开发 阅读(460) 评论(0) 推荐(0) 编辑
摘要:浏览器测试的规范化:手机浏览器将是未来移动设备的全新整合性平台;3G的到来,将手机b/s应用推上了一个新台阶。手机浏览器处于一个混沌的局面,各大软件开发商都在争取主导这个市场技术层面:规范、安全,兼容,稳定……1、USER层面:操作简便,扩展功能强大……2、质量层面:规范的测试流程,保证质量。3、市场层面:大力推广,及其他营销手段。为什么要做浏览器的规范?当然是为了效率和质量了。规范化是减少问题发生和反复的最有效的手段。那如何做到测试规范化呢?1、首先,制定测试目标。想要得到什么要的结果,做到什么目标,必须心里有底,并且把它制定好。2、其次,要制定测试周期。如果测试周期过长,那效率肯定不高的。 阅读全文
posted @ 2011-11-29 16:16 移动应用开发 阅读(1035) 评论(0) 推荐(0) 编辑
摘要:本文只是介绍如何编写一个基本的Makefile,并不是一个非常完整的参考手册,其中很多类容都没有涉及到1.基本一个简单的Makefile,为了实际说明,我举我写的链表例子man.c, list.c, list.h其中main.c和list.c中包含了list.hmain:main.o list.o gcc -o main main.o list.omain.o:main.c list.h gcc -c -o main.o main.clist.o:list.c list.h gcc -c -o list.o list.cclean: rm main main.o list.oMakefile总 阅读全文
posted @ 2011-11-28 09:48 移动应用开发 阅读(252) 评论(0) 推荐(0) 编辑
摘要:现在我们的按钮还不支持复制,粘贴这些操作,那我们接下来做这些事情。首先我们将剪切和复制两个按钮设置成不可见cutAct->setEnabled(false); copyAct->setEnabled(false);然后加上两个连接connect(textEdit, SIGNAL(copyAvailable(bool)), cutAct,SLOT(setEnabled(bool))); connect(textEdit, SIGNAL(copyAvailable(bool)), copyAct, SLOT(setEnabled(bool)));这两个什么意思呢,当我们用鼠标选择了一段 阅读全文
posted @ 2011-11-25 17:18 移动应用开发 阅读(194) 评论(0) 推荐(0) 编辑
摘要:菜单栏有了,工具栏也有了,连用户可以输入的编辑框也有了,接下来当然是给我们这些按钮添加动作,以完成一个记事本的功能。1.打开文件首先我们在类中定义一个槽,还记得槽是怎么声明的吗,就是在private slots:下声明一个函数。private slots: void loadFile();然后我们在mainwindow.cpp中实现这个函数,其中我们要用到一个变量,mFileName表示当前文本文件的名字,这里定义成QString类型,还是要在类中定义这个变量。QString mFileName;void MainWindow::loadFile(){ QString fileName = . 阅读全文
posted @ 2011-11-25 17:16 移动应用开发 阅读(352) 评论(0) 推荐(0) 编辑
摘要:如何给工具栏上按钮添加图标在Qt Creator中新建一个Qt Resource file在Add下拉菜单中选择Add Prefix,表示添加一个前缀,这里我们将默认的/new/prefix修改为/,然后在Add下拉菜单中选择Add File,表示将图片添加进来,我们可以在工程目录下新建一个目录,比如images,专门用于存放图片。我们在创建QAction的同时就为这个action添加一个图标,例如newAct = new QAction(tr("new"), this);newAct->setIcon(QIcon(":/images/new.png&quo 阅读全文
posted @ 2011-11-25 17:14 移动应用开发 阅读(286) 评论(0) 推荐(0) 编辑
摘要:1.添加菜单栏我们MainWindow类中添加如下成员QMenu *fileMenu;QAction *newAct;QAction *openAct;QAction *saveAct;其中QMenu代表一个菜单,QAction代表菜单中的一个选项,在头文件里还要增加这两个类的前置声明class QMenu;class Qaction;接下来在声明两个私有函数,一个用于我们创建菜单,一个用于创建菜单中的选项。void createActions();void createMenus();然后在mainwindow.cpp中实现这两个方法void MainWindow::createAction 阅读全文
posted @ 2011-11-25 16:51 移动应用开发 阅读(502) 评论(0) 推荐(0) 编辑
摘要:在上一个例子中我们创建了一个非常简单的QMainWindow,接下来我们以实际例子来一步一步(stepby step)的写一个类似于记事本的程序,我们就叫它textedit。首先我们在mainwindow.h中新建一个类MainWindow继承QMainWindow,里面只有一个构造函数MainWindow()。/*mainwindow.h*/#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>class MainWindow : public QMainWindow{ Q_OBJECTpublic: Main 阅读全文
posted @ 2011-11-25 16:49 移动应用开发 阅读(260) 评论(0) 推荐(0) 编辑
摘要:什么是QMainWindow?QmainWindow类继承QWidget类,它是QT提供的一个主应用程序窗口类,它包含菜单栏(MenuBar),工具栏(ToolBar),状态栏(StatusBar)以及提供给用户的工作空间(CentralWidget)等。例子#include <QApplication>#include <QMainWindow>#include <QLabel>int main(int argc, char *argv[]){ QApplication app(argc, argv); QMainWindow window; QLabel 阅读全文
posted @ 2011-11-25 16:45 移动应用开发 阅读(209) 评论(0) 推荐(0) 编辑
摘要:在《发现live555中一个小bug》一文中所修改的代码并不起作用。经测试,RTPSource的Socket检测不到网络出错的情况。而RTCPInstance中的socket可以检测到,所以可以利用RTCPInstance通知RTPSource应停止流传输了。修改如下(//---------------------包含的代码为修改处):void RTCPInstance::incomingReportHandler1() { do { int tcpReadStreamSocketNum = fRTCPInterface.nextTCPReadStreamSocketNum(); u... 阅读全文
posted @ 2011-11-23 16:32 移动应用开发 阅读(362) 评论(0) 推荐(0) 编辑
摘要:今天忽然发现了live555中的openRTSP.exe中的一个小问题。在openRTSP.exe连上服务器后,如果服务器退出而没有发送TEARDOWN,openRTSP.exe不会退出,即使收不到数据,它也会一直等待下去。当然,这也可以不认为是一个bug,因为服务器不辞而别也不对。究其原因,主要是openRTSP.exe中所使用的RTPSource类没有对网络出错进行处理,所以尽管网络出错,收不到数据,接收数据的循环会一直进行下去。从这个解度讲也算是个bug吧。要改正很容易,下面用//---------------标注者即是改正处:void MultiFramedRTPSource::net 阅读全文
posted @ 2011-11-23 14:06 移动应用开发 阅读(296) 评论(0) 推荐(0) 编辑
摘要:在QT编程中,如果遇到多个控件,但是他们的槽大致相同,这个该怎么处理,比如10个button,难道要写10个槽,可以不必这样,QSignalMapper可以帮组我们解决。 QSignalMapper *signalMapper = new QSignalMapper(this); for (i = 0; i < 10; i++) { button = new QPushButton(QObject::tr(buttonName)); signalMapper->set 阅读全文
posted @ 2011-11-21 16:28 移动应用开发 阅读(199) 评论(0) 推荐(0) 编辑
摘要:信号和槽是QT的核心,在其他GUI中大多采用消息和回调函数,比如win32中#include <QApplication>#include <QPushButton>int main(int argc, char *argv[]){ QApplication app(argc, argv); QPushButton button("Quit"); button.show(); QObject::connect(&button, SIGNAL(clicked()), &app, SLOT(quit())); return app.exe 阅读全文
posted @ 2011-11-21 15:48 移动应用开发 阅读(266) 评论(0) 推荐(0) 编辑
摘要:使用new操作符来定义一个对象QVBoxLayout *layout = new QVBoxLayout(&window);另外一种方法QVBoxLayout layout(&window);C++并没有提供内存自动管理机制,通常,需要程序开发人员自己去做这些事情,比如在构造函数中使用了new去申请了一个对象,那么在析构函数中就要显示的调用delete去删除这个对象。但是QT提供了它自己的内存管理,QT的类构造函数都会有个parent参数,用于指明它的父对象,QT提供了这样的机制,当父对象调用delete时,QT会自动的delete所有的子对象。所以在使用new操作符去申请对象 阅读全文
posted @ 2011-11-21 15:42 移动应用开发 阅读(281) 评论(0) 推荐(0) 编辑
摘要:关于布局,布局可以采用绝对定位和布局定位,绝对定位就是直接给出坐标值,但是如果用户改变了窗口大小,比如最大化,如果你自己不做处理,那么窗口上面的这些控件还是在原来位置,并不能随着窗口变化而变化。QT提供了布局管理器,可以避免这种问题出现,常用的有水平布局,垂直布局,网格布局在布局管理器中使用addWidget添加一个控件,使用addLayout添加一个子布局1.水平布局#include <QApplication>#include <QPushButton>#include <QHBoxLayout>int main(int argc, char *argv 阅读全文
posted @ 2011-11-21 15:38 移动应用开发 阅读(316) 评论(0) 推荐(0) 编辑
摘要:为了是我们的QT程序支持如中文等其他语言,通常的做法是在需要翻译的地方显示的用tr标记,所以你在阅读其他人编写的源程序时会看到很多字符串做了tr标记,这样做是有原因的。1.在hello.pro文件中增加TRANSLATIONS = hello_zh_CN.ts2.进入工程目录,运行lupdate hello.pro,生成hello_zh_CN.ts文件3.使用Qt Creator打开这个文件(或者直接用vi或gedit打开都可以),对翻译部分进行翻译,比如<source>hello!</source><translation type="unfinish 阅读全文
posted @ 2011-11-21 15:26 移动应用开发 阅读(183) 评论(0) 推荐(0) 编辑
摘要:qt学习第一个程序hello world!新建一个空的工程hello,然后新建一个文件main.cpp,在main.cpp里面添加内容如下#include <QApplication>#include <QLabel>int main(int argc, char *argv[]){ QApplication app(argc, argv); QLabel label(QObject::tr("Hello, world!")); label.show(); return app.exec();}前面两行包含头文件,在QT 4中,头文件和类名是一致的, 阅读全文
posted @ 2011-11-21 13:57 移动应用开发 阅读(145) 评论(0) 推荐(0) 编辑
摘要:1.静态库和共享库的概念在链接共享库时只是指定了动态链接器和该程序所需要的库文件,并没有真正的做链接,可执行文件中仍然是未定义的符号,需要在运行时做动态链接。而在链接静态库时,链接器会把静态库中的目标文件取出来和可执行文件真正的链接在一起,所以采用静态库的可执行文件一般很大,不需要库文件也能运行,而采用共享库的可执行文件一般比较小,需要库文件才能运行。2.如何制作静态库和共享库(1)静态库制作首先将源文件编译成目标文件,制作静态库采用打包命令ar即可,例如:ar rs libname.a a.o b.o c.o,r表示将后面的文件列表添加到文件包,如果文件包不存在就创建它,如果文件包已有同名文 阅读全文
posted @ 2011-11-20 22:12 移动应用开发 阅读(234) 评论(0) 推荐(0) 编辑
摘要:之前之前用R4,现在一下就跳到用R7了,ANDROID4.0出来过后,应该有不少热机友敢望资疗吧,OK,在网上偶尔浏览的时候,看到有很多初学者希望了解在ANDROID中NDK应用的开发,不知道它是怎么开发与运行的,今天我就简单来图解一个HelloWorld的简单实列吧,以好供初学者做给力的参考,OK,不废话了,直入正题吧:首先,我们得配置环境,当然这是在你本来就有SDK开发环境的情况下,请去官方下个NDK吧:http://www.android.com.,最新版本为android-ndk-r7-linux-x86.tar.bz2,即R7,我一直用的是LINUX,所以我下的是LINUX版本,如果 阅读全文
posted @ 2011-11-20 15:57 移动应用开发 阅读(142) 评论(0) 推荐(0) 编辑
摘要:十三:RTPInterface详解好几天没写blog了。看源码真累啊,还要把理解的写到纸上,还要组织混乱的思想,令人头痛,所以这需要激情。不过,今天激情又来了。大家应该已理解了GroupSocket这个类。理论上讲那些需要操作udp socket 的类应保存GroupSocket的实例。但事实并不是这样,可以看一下RTPSink,RTPSource,RTCPInstance等,它们都没有保存GroupSocket型的变量。那它们通过哪个类进行socket操作呢?是RTPInterface!!这些类接收的GroupSocket指针最后都传给了 RTPInterface 。为什么用RTPInter 阅读全文
posted @ 2011-11-18 13:18 移动应用开发 阅读(298) 评论(0) 推荐(0) 编辑
摘要:近来着眼于ANDROID4.0的关注与研究,第一时间把ANDROID4.0源码下下来了,只是时间问题,所以没能第一时间把过程记录下来,今天算是富裕点时间就给写下来,希望能给灼热于ANDROID继续平台研究而又未及时获得相关资源的热机友们做个简单的参考,好了,废话不多说,我就直接贴图吧,现在很简单,只要你是LINUX系统,一直并使其开发,那就不必要考虑之前JDK环境的问题,直接从基本环境确定下入手吧,首先打开http://www.android.com进入:看到Getting the Source,点击进入,进入页面后,里面有详细的下载描述,不用说,一步步来,很简单的,与之前一样,首先创建目录: 阅读全文
posted @ 2011-11-18 11:23 移动应用开发 阅读(172) 评论(0) 推荐(0) 编辑
摘要:8086CPU有两种地址空间,一是内存地址空间,二是端口地址空间,访问端口只能用in和out指令,分别用于从端口读数据和往端口写数据,CPU最多可以定位64KB个不同的端口,端口地址范围为0~65535。在访问端口时,只能用ax或al来存放从端口读取的数据和往端口写入的数据,8位端口用al,16位端口用ax。在访问端口号为0~255时在指令中直接给出端口号。in al, 20hout 20h, al在访问端口号为256~65535时要将端口号放在dx中。mov dx, 3f8hin al, dxout dx, al 阅读全文
posted @ 2011-11-13 20:53 移动应用开发 阅读(421) 评论(0) 推荐(0) 编辑
摘要:十二 h264 rtp包的时间戳这次我们一起来分析一下live555中是怎样为rtp包打时间戳的.就以h264为例吧.void H264VideoRTPSink::doSpecialFrameHandling(unsigned /*fragmentationOffset*/, unsigned char* /*frameStart*/, unsigned /*numBytesInFrame*/, struct timeval framePresentationTime, unsigned /*numRemainingBytes*/) { // Set the RTP 'M' . 阅读全文
posted @ 2011-11-08 17:08 移动应用开发 阅读(2097) 评论(0) 推荐(0) 编辑
摘要:十一 h264 RTP传输详解(3)书接上回:H264FUAFragmenter又对数据做了什么呢?void H264FUAFragmenter::doGetNextFrame() { if (fNumValidDataBytes == 1) { // We have no NAL unit data currently in the buffer. Read a new one: fInputSource->getNextFrame(&fInputBuffer[1], fInputBufferSize - 1, afterGettingFrame, this, Frame... 阅读全文
posted @ 2011-11-08 11:24 移动应用开发 阅读(339) 评论(0) 推荐(0) 编辑
摘要:这两天又复习了一下RTP协议.看到网上两篇文章说的很通透明白,在此转发一下.RTP协议分析(转自:http://blog.csdn.net/bripengandre/article/details/2238818)分类:Network Security2008-04-01 16:345687人阅读评论(6)收藏举报整理记录版本时间内容整理人V1.02008-03-31RTP协议分析初稿彭令鹏RTP协议分析第1章.RTP概述1.1.RTP是什么RTP全名是Real-time Transport Protocol(实时传输协议)。它是IETF提出的一个标准,对应的RFC文档为RFC3550(RFC 阅读全文
posted @ 2011-11-08 09:53 移动应用开发 阅读(367) 评论(0) 推荐(0) 编辑
摘要:十 h264 RTP传输详解(2)上一章并没有把打开文件分析文件的代码找到,因为发现它隐藏得比较深,而且H264的Source又有多个,形成了连环计。所以此章中就将文件处理与H264的Source们并在一起分析吧。从哪里开始呢?从source开始吧!为什么要从它开始呢?我就想从这里开始,行了吧?FramedSource* H264VideoFileServerMediaSubsession::createNewStreamSource( unsigned /*clientSessionId*/, unsigned& estBitrate) { estBitrate = 500; //. 阅读全文
posted @ 2011-11-04 15:52 移动应用开发 阅读(402) 评论(0) 推荐(0) 编辑
摘要:九 h264 RTP传输详解(1)前几章对Server端的介绍中有个比较重要的问题没有仔细探究:如何打开文件并获得其SDP信息。我们就从这里入手吧。当RTSPServer收到对某个媒体的DESCRIBE请求时,它会找到对应的ServerMediaSession,调用ServerMediaSession::generateSDPDescription()。generateSDPDescription()中会遍历调用ServerMediaSession中所有的调用ServerMediaSubsession,通过subsession->sdpLines()取得每个Subsession的sdp, 阅读全文
posted @ 2011-11-03 11:21 移动应用开发 阅读(330) 评论(0) 推荐(0) 编辑
摘要:八 RTSPClient分析有RTSPServer,当然就要有RTSPClient。如果按照Server端的架构,想一下Client端各部分的组成可能是这样:因为要连接RTSP server,所以RTSPClient要有TCP socket。当获取到server端的DESCRIBE后,应建立一个对应于ServerMediaSession的ClientMediaSession。对应每个Track,ClientMediaSession中应建立ClientMediaSubsession。当建立RTP Session时,应分别为所拥有的Track发送SETUP请求连接,在获取回应后,分别为所有的tra 阅读全文
posted @ 2011-11-02 10:39 移动应用开发 阅读(295) 评论(0) 推荐(0) 编辑
摘要:Android中的两把锁 – WalkLock and KeyguardLock 详细分析 WalkLock – 顾名思义 唤醒锁 点亮屏幕用的 KeyguardLock – 顾名思义 键盘锁 解锁键盘用的 详细介绍: 1: WalkLock 唤醒锁 WalkLock真的能点亮屏幕吗? 答案是肯定的。 可是有时候为什么不点亮屏幕,这个就是参数设置的问题了。java代码:PowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "Gank");Pow.. 阅读全文
posted @ 2011-11-01 11:05 移动应用开发 阅读(1524) 评论(0) 推荐(0) 编辑