Symbian Security Studio

About symbian software programming ,security analysis and other things about symbian.

Tuesday, April 17, 2007

Nokia官方培训(Symbian4300)笔记(六)--Descriptors


Introduction


    描述符(Descriptors)封装了字符串和二进制数据,用于替代C中的以NULL结尾的字符串。它的长度和数据都封装在了描述符中,Symbian API中用的都是描述符。如:


    TPtrC ptr (KHelloWorld);    CEikonEnv::Static()->InfoMsg(ptr);


 Main Types of Descriptors


    主要可以分为以下几类,其中带C的是不可修改的。 



  • Abstract:(TDes、TDesC),其他描述符的基类,不能实例化,一般用作函数的参数。
  • Literal:(TLitC,_LIT()),用于存储literal string,一般使用后者。
  • Buffer:(TBuf,TBufC),数据存储于栈上,大小在编译时确定。
  • Heap:(HBufC),数据存储于堆上,大小在运行时确定。
  • Pointer:(TPtr,TPtrC),引用存储于类之外的数据

Descriptor Modification


    描述符可以是可修改的和不可修改的,通常带C的都是不可修改的,不可修改的是可修改的基类。   



  • Moidfiable:提供了访问和修改数据的API,如TBuf
  • Non-Modifiable:数据只可以被访问,不可修改。但是通过Des()函数可返回一个可修改的指针

Descriptor Width


    在描述符类后加上8或者16影响了存储在描述符中的数据的宽度,默认是16位的,处理二进制或ASCII时采用8位。



  • 8位:(TDesC8),用于二进制数据或者ASCII字符串
  • 16位:(TDesC16),默认,Unicode

下面开始对上述5类描述符进行详细介绍,首先看一下类继承关系



                                            这里显示的是8位的,16位默认的类继承关系与此一致

Abstract Descriptors


    除Literal外的所有描述符的基类,提供了基本的接口和基础功能。他们本身不能实例化,一般用作函数参数。


TDesC:提供了比较、复制、搜索、提取部分字符串的函数。


TInt TDesCUtil::SumLengths(const TDesc& aDesC1, const TDesc& aDesC2)
{
   return aDesC1.Length() + aDesC2.Length();


TDes:继承自TDesC,添加了许多用于修改数据的函数。其最大长度是描述符被创建时确定的。


TInt TDesCUtil::AppendL(TDesc& aTarget, const TDesc& aDesC)
{
   TInt sumLen = aTarget.Length() + aDesC.Length();
   if (aTarget.MaxLength() < sumLen)
   {
      User::Leave(KErrOverflow);
   }
   aTarget.AppendL(aDesC);


 Literal Descriptors


    提供了一种将字符串放在只读存储空间中的机制(实际存放在程序的数据区,而不是真的在ROM中)。一般不采用TLitC而直接采用_LIT()宏。    _LIT(KHelloWorld, "Hello World!");


    通过()操作符可以得到 const TDesC&。 TInt length = KHelloWorld().Length();


    在函数参数为const TDesC&可以直接使用KHelloWorld。iLabel->SetTextL(KHelloWorld);


 Buffer Descriptors


    将数据作为本身的一部分存储在stack上,他们的最大长度是在编译时确定的。  


TBuf<16> helloWorld = KHelloWorld;
TInt len = KHelloWorld().Length();
helloWorld[len-1]='?'; 


在内存中如下所示: 



TBufC的用法如下:


_LIT(KHelloWorld, "Hello World");
const TInt maxBuf = 32;
TBufC<maxBuf> buf;
TInt currentLen = buf.Length(); // == 0
buf = KHelloWorld;
currentLen = buf.Length(); // == 11
TText ch = buf[2]; // == 'l'


 TBuf的用法如下:


const TInt bufLen = 6;
TUInt8 objType = 1;
TUInt8 objId = 1;
TUInt8 xCoord = 128;
TUInt8 yCoord = 192;
....
TBuf8<bufLen> buf;
buf.Append(objType);
buf.Append(objId);
...
//we can now do something with the buffer such as writting it to a binary file or send via socket.


Pointer Descriptor


    用于引用存储在其他地方的数据,如:


const unsigned char KBuffer[ ] = {0x00, 0x33, 0x66, 0x99, 0xbb, 0xff};
TPtrC8 bufferPtr( KBuffer, sizeof(KBuffer));
iSocket.Write(bufferPtr, iStatus);


在内存中如下所示:



TPtr的用法:


 _LIT(KHelloWorld, "Hello World");
const TInt maxBuf = 32;
TBufC<maxBuf> buf;
buf = KHelloWorld;
TPtr ptr = buf.Des();
ptr[7] = 'a';  ptr[8] = 'l';  ptr[9] = 'e';  ptr[10] = 's';  
CEikonEnv::Static()->InfoMsg(ptr); // "Hello Wales"


 Heap Descriptors


     动态在堆(heap)上分配,通过HBufC的API,数据可以被set和reset,但是不能被修改。如:


HBufC* heapBuf = HBufC::NewL(KHelloWorld().Length());
*heapBuf = KHelloWorld();
delete heapBuf; 


     在内存中的情况如下图所示:



    HBufC通常在以下几种情况下使用: 



  •  在运行时从资源文件中加载字符串
  •  从用户界面中接收用户输入的字符串
  • 从应用程序引擎中接收字符串,如contacts database中的名字 

     对HBufC中的内容进行修改:


_LIT(KHello, "Hello!");
_LIT(KWorld, "World!"); 
HBufC* heapBuf = HBufC::NewL(KHello().Length());
*heapBuf = KHello;    //buf holds "Hello!"


heapBuf = heapBuf->ReAllocL(KHello().Length() + KWorld().Length());
CleanupStack::PushL(heapBuf);


TPtr ptr (heapBuf->Des());  //DON'T use TPtr ptr = heapBuf->Des(); this will set maxlen to 6 but not 12...
ptr[KHello().Length() - 1] = ' ';
ptr += KWorld;
iTopLabel -> SetTextL(ptr);
CleanupStack::PopAndDestroy();
DrawNow();


下面介绍Descriptors的具体用法: 


 Non-Modifying Methods


     Length(),Size(),Left(),Right(),Mid(),Compare(),Locate(),LocateReverse (),Find(),Match()等。以下代码示例描述了如何在一个descriptor中找到<>中的内容,如果不存在,返回整个字符 串:


static const TUint KAddressStartChar = '<'; 
static const TUint KAddressEndChar = '>';


TPtrC ExtractAddressNumber( const TDesC& aAddressString)
{
    TInt addrStart = aAddressString.Locate(KAddressStartChar ) + 1;
    TInt addrEnd  = aAddressString.LocateReverse(KAddressEndChar ) ;
    if ((addrStart == KErrNotFound) || (addrEnd == KErrNotFound) || (addrStart >= addrEnd) )
    {
        addrStart = 0;
        addEnd    = aAddressString.Length();
    }
    return (aAddressString.Mid(addrStart, (addrEnd - addrStart) ) );


 Modifying Methods


     Zero(),Copy(),Num(),Format(),Insert(),Replace(),Delete(),Append(),Trim()等。代码示例:


_LIT(KText, "Hello World!");
_LIT(KNewText, "New Text");
_LIT(KReplaced, "Replaced");


TBuf<16> buf1(KText); 
buf1.Delete(6, 6); // length is now 6, leaving "Hello" in the buffer


TBuf<16> buf2(KNewText);
buf2.Copy(KReplaced); // buf2 now contains "Replaced"
buf2.Append(KNewText);  //buf2 now contains "Replaced New Text"


buf2.Delete(99, 1); //Will Cause a PANIC!!! 


 Descriptors in Method Declarations



  • 在函数参数中尽量使用基类
  • 使用中性的描述符,一般情况下使用TDesC而不是TDesC8或者TDesC16
  • 当描述符内容不应该改变时,使用const修饰符 
  • 经典用法:void SetText(const TDesC& aText);    TPtrC Text() const; 

  Character Conversions   


     CCnvCharacterSetConverter类提供了在Unicode和其他字符集编码之间转换的方法。


ASCII本来就是Unicode的一个子集,无须使用该类。和Unicode之间的转换方法如下所示:


TBuf16<64>  UnicodeBuf;
_LIT8(KAsciiStr, "Hello");
UnicodeBuf.Copy(KAsciiStr);


Unicode和拉丁语系之间的转化可使用如下的代码:


 TBuf8<64> Latin1Buf;
_LIT16(KUnicodeStr1, "hello");
_LIT16(KUnicodeStr2, "I have got 10\x20AC.");  //\x20AC is a euro
Latin1Buf.Copy(KUnicodeStr1); //OK
Latin1Buf.Copy(KUnicdoeStr2); //Not as you wanted.


待补充:Unicode和中文之间的转化 


 读后感


对于初学者来说,一开始这部分是最难接受的,因为都已经习惯了C中的字符串。


但是经过一段时间的适应后,会慢慢熟悉它,这种东西要看好多遍才能领会,这个培训教程确实很好,讲的非常清楚。


多看看Forum Nokia上的例子和如InternetRadio等开源代码,慢慢的,你就适应了。


Symbian,想说爱你并不容易!  呵呵~

Labels:

Nokia官方培训(Symbian4300)笔记(五)--MemoryManagement

Why Memory Management


    SymbianOS本身就是为内存和资源受限的设备开发的,应用程序运行过程中很可能碰到内存用光,或者硬件资源不可用的情况。而这种exceptions是通过修改程序无法解决的,所以遵守以下几条:



  • 尽量不要使用不必要的RAM
  • 尽早释放资源,如文件server等
  • 当你每次申请内存时,都须准备处理out-of-memory错误
  • 当 out-of-memory错误发生时,返回到一个stable的状态,并释放所有期间申请到的资源

 Stack and Heap


    Stack:默认大小8kb,自动删除,如 TInt i = 0;


    Heap :至少0.5Mb,由程序员手动删除,如 CMyObj* obj = new (ELeave) CMyObj;


Leaves


    首先介绍Conventional C++ Memory Management,在Symbian看来,这是非常低效率的。



  • NULL Pointer Checking  if ((myObj = new CMyObj( ) ) == NULL) { //Error Handling }

  • ANSI C++ Exeption Handling   try { //throw an Exception } catch (int e) { //Error Handling }

    在Symbian中推荐采用Leave,如果内存或者资源不能分配到,这个代码就会Leave,沿着Call Stack,直到操作系统或者在某个函数中被Handle掉。


    所有可能Leave的函数最好以L结尾,保证该函数的用户知道这个函数可能Leave。


    Leave的例子:



  • 动态内存分配: return new (ELeave) TUint8[1000];
  • 产生一个Leave:User::Leave(KErrNotFound);
  • 内存不足时Leave:User::LeaveNoMemory();
  • NULL的时候Leave:User::LeaveIfNull(aNotify);
  • 当发生错误时Leave:RFs fs; TInt err = fs.Connect(); User::LeaveIfError(err);

    处理Leave:


    操作系统有默认的处理Leave的方式:



  • 在程序启动过程中:直接关闭应用程序。
  • 应用程序启动后:显示一个错误消息。 

    开发者可以通过trap装置来处理Leave。TRAP(_r, _s)和TRAPD(_r, _s),其中:



  • _r:是一个TInt类型的leave code,默认值为TErrNone。

  • _s:一系列可能Leave的C++ Statements。

        TRAPD(err, DoFunctionL());
        if (err != KErrNone)
        { //Error Handling }
        else
        { //Everything is well }


  The Cleanup Stack


    cleanup stack用于存储在leave发生后需要deallocating的局部变量(指针)。即:当一个函数leave了,所有在cleanup stack上的对象会被全部删除掉。


    Cleanup Stack的使用方法:


CleanupStack::PushL(ptr) :当发生leave时所有内存都会被释放
CleanupClosePushL(handle):当发生leave时这个句柄(handler)会被关闭


CleanupStack::Pop(pointer):第一个元素出栈
CleanupStack::PopAndDestroy(pointer):第一个元素出栈并释放内存


    如果一个函数可能leave,检查一下两种情况:



  • 如果leave了,是否所有在堆(heap)上的元素都在cleanup stack中了
  • 如果没有leave,你是否自己恰当地将他cleanup了

 CMyClass* CMyClass::NewL(TInt aBufSize)
{
   CMyClass* self = new (ELeave) CMyClass;
   CleanupStack::PushL(self);
   self->ConstructL(aBufSize);
   CleanupStack::Pop(self);
   return self;
}


    如果某个函数会在cleanup stack上留下一个对象,那么他必须以C结尾。


Two Phase Construction


    C++构造函数一定不能leave。所有内存和资源的分配应该在第二阶段构造函数ConstructL( )中完成。


编码指南,所有用户定义的C类必须:



  • 定义NewL和NewLC函数为public static
  • 定义ConstructL和C++ Constructor为private

Best Practise


     Construction的规则:



  • 默认的C++构造函数中不能含有可能leave的代码
  • 可能发生leave的函数必须在ConstructL中被调用
  • 如果基类也有ConstructL,必须首先调用,不要忘了explicit scoping

    Destruction的规则:



  • C类必须在析构函数中删除它自己所包含的对象
  • 在删除一个对象后,把它的指针设为NULL
  • 不要删除不是本类所拥有的对象
  • 在reallocation前首先删除对象,并且将其指针设为NULL

    Further Discussion:



  • Preserve Stack Memory:每个进程只有8K,以引用的方式传递参数,大的对象放在堆上
  • Preallocation vs last moment allocation:一般的原则是只在使用前分配资源并且在使用后马上释放。但是                     preallocation的好处是节约处理时间,并且在没有内存的情况下照常运行(资源已经分配到了)
  • where to put trap harness:最基本的情况是依靠GUI应用程序的框架。根据应用的不同,可以自定义粒度。
  • Error Code Returns vs. leaving functions:在执行某个处理前检测是否会出现问题,如下代码:

                                    User::LeaveIfError(fs.Connect()); 


Memory Leaks


    如果你的程序有内存泄露,在模拟器上关闭时会crash。尽早发现并解决你的内存泄露,因为你可以追查到你可能导致内存泄露的代码改动。如果实在找不到,可用下面方法:


    Heap Balance Checking:



  • _UHEAP_MARK
  • _UHEAP_MARKEND

    用上述这两个宏放在你要检查的代码的开头和结尾,如果发生panic,则说明这段代码中发生了内存泄露。可以嵌套使用。 


Panics 


    Panic是一个未经处理的exception,暗示着一个无法解决的错误。


一般程序有以下三类错误:



  • 程序错误:如引用一个超过数组范围的元素
  • 环境错误:内存、磁盘空间不够,或缺少其他资源等
  • 用户错误:输入错误数据
    可以使用trap和cleanup stack技术来解决环境和用户错误,但是对于第一类的程序错误,我们无法恢复,最好是使用User::Panic()函数,它带有两个参数,第一个是string,第二个是Tint。

Labels: ,

Nokia官方培训(Symbian4300)笔记(四)--基本数据类型及命名规范 -- ITDB教程库

Basic Types


在Symbian中,很多C++基本类型都被重新定义了,最好使用Symbian的,理由如下:



  • 所有Symbian API都是用的Symbianc重定义的
  • 将来Symbian OS由32位转为64位时,支持性更好
  • 这本身就是Symbian C++ Coding Standards所要求的

Integers


typedef signed int TInt; C++中的signed int,32位,基本用法类似。


typedef unsigned int TUint; 一般用于计数器(Counter)或者标记(Flags)。


其他Int类型:TInt64, TInt32, TInt16,TInt8; 同时有一份TUint的版本。


Text


text类型在Symbian编程中基本不用,而一般采用描述符(descriptor)。TText默认是16位的。


Boolean


typedef int TBool; 有两个枚举值:ETrue和EFalse。TBool变量最好不要直接和ETure和EFalse比较。如下:


TBool flag = ETrue;
if (flag) // if (!flag)
{
flag = EFalse;
}


Floating Point


对浮点数的支持视处理器而定,如果没有FPU,效率非常低,所以最好是不要用浮点数。 如果一定要用,尽量转化为整数操作。


typedef float TReal32; typedef double TReal64; typedef double TReal;


TAny


typedef void TAny;


TAny一般只用作指针,其他情况下用void比较好。


TAny* MyFunction(); void MyOtherFn();


TAny* 在很多Symbian API中都用到了,如:


static TUint8* Copy( TAny* aTrg, const TAny* aSrc, TInt aLength);


Enumerations


enum TState {EOff, Eon, EInit};


Enumeration类型应该以T开头,而枚举值应该以E开头。


TState state = GetState();
if (state == EOn)
{
//Do something here
}


Coding Conventions


T类:只包含值,而不包含指针以及外部的资源,在栈上分配空间。


TVersion osVersion = User::Version();


C类:所有需要分配内存的类都必须从CBase继承并且以C开头。


class CExample : public CBase
{
private:
CDesCArrayFlat* iArray;
}


CExample* example = new (ELeave) CExample;


R类:包含指向某个资源的handler。


RTimer timer;
timer.CreateLocal();


M类:定义一个接口,一般只包含纯虚函数,不包含成员数据,减少类之间的依赖,用来接受回调消息。


class MEikStatusPaneObserver
{
public:
virtual void HandleStatusPaneSizeChange() = 0;
}


任何实现MEikStatusPaneObserver接口的类都必须实现HandleStatusPaneSizeChange()函数。


Variable Naming Conventions



  • 成员变量以“i”开头
  • 参数以“a”开头
  • 动态变量随便,以小写字母开头
  • 常量以“K”开头
  • 尽量不要使用全局变量,不能使用全局静态变量。

Functions



  • 函数以大写字母开头,如AddFileNameL();
  • 以D结尾表示deletion of an object
  • 以L结尾表示函数可能leave
  • 以C结尾表示一个item被放到cleanup stack

Casting


Casting用于在类(classes)和类型(types)之间作转化,Symbian中仍然可以使用C中语法。


dynamic_cast:不支持,Symbian中没有RTTI。


static_cast:把一个基类转化为一个继承类。


TInt intValue = 0xff;
TUint8 byteValue = static_cast<TUint8>(intValue);


reinterpret_cast:把一个指针类型转化为另外一个指针类型,如integer转化为point类型或者相反。


TUint32 fourBytes = 0;
TUint8* bytePtr = reinterpret_cast<TUint8*> (&fourBytes);
bytePtr++;
*bytePtr = 0xFF;


const_cast:移除一个类的const属性。




读后感


Symbian编程中基础的基础,属于每天都会碰到的东西。


最后部分的casting有点难懂,其他的看习惯了也就好了。

入乡随俗,既然选择了Symbian,就用Symbian的惯例去写程序吧。

Labels: ,

Nokia官方培训(Symbian4300)笔记(三)--Carbide.c++开发环境 -- ITDB教程库


Carbide.C++ IDE


    基于Eclipse的全功能IDE,与CodeWarrior保持一定的兼容性,分三个版本:




  • Express:入门级开发工具,可免费从Forum.nokia网站获得。
  • Developer:提供更多的工具,以及支持On-Target Debugging。

  • Proffesional:为开发Symbian设备以及高性能应用程序开发者提供。

Carbide.c++基本概念 



  • workbench:桌面开发环境,可以认为是Carbide.c++本身。
  • workspace:Symbian工程的存储目录,是文件系统中的一个文件夹,如c:\carbide。
  • Perspectives:在workbench中的view的位置及分布情况,有Debug,Symbian,C++等perspective切换。
  • views:UI组件,提供浏览信息的一种方式:如工程,调试信息,源代码等。
  • editors:编辑器,用于编辑文件。 

 Creating a New Workspace


    workspace是文件系统中的一个目录,保存了所有Carbide.C++创建的项目、文件夹、以及文件。


    File->Switch Workspace... , 名字中间不能有空格,而且必须和SDK在同一个盘,最好都在C盘。


    File -> New -> C++ Application For S60 Project,然后跟着向导一步一步走就可以了。


Importing an S60 Application


   File -> Import... ,一般选择"Symbian MMP File",“Symbian Bld.inf“可以import多个项目。


Editing Project Properties


    Porject -> Properties, 或者在Build Configuration view里面选择右上角那个"i"按钮,即可弹出project properties dialog。


    Carbide.c++不需要MMP文件,它为你保存所有的设置信息,提供project properties dialog进行修改。


Adding a new link library


    这是Symbian开发过程中最常见的操作之一,可以在project properties dialog中选择WINSCW C/C++ Linker的libraries进行添加。


Building a Project


    选中C/C++ Projects中的当前项目,然后Project -> Build All


Running On The Emulator


    选中C/C++ Projects中的当前项目,然后在Run菜单中选择Run As -> Run Symbian OS Application


 Debugging with Carbide


    当采用Debug而非Run的时候,Carbide会自动切换到调试perspective。


设置断点:双击代码边上的空白栏(marker bar)


在Variables中可以直接看到描述符中所包含的字符串,这个比较有用。


Building for Target


    最后是放到真机上测试。在build configurations view中选择GCCE,然后Project -> Build All就可以了。


    如果要对sis进行签名,可以在project properties dialog的Create Sis中加入cer和key文件的地址和默认密码,这样生成过程就会自动帮你把最后生成的sis签名了。




读后感


Carbide.c++的使用操作比我想象中的要简单得多。


开发环境配置也很方便,只要装一个SDK和一个Carbide,比较适合新手。


由于Carbide是Nokia本身提供的,所以个方面的支持应该都是最好的,比如可以直接看到描述符中的内容。

我是不是该放弃VS.NET 2003而改用Carbide.c++呢?做完里面所有的lab,如果感觉还这么好,就换,呵呵!

Labels:

Nokia官方培训(Symbian4300)笔记(二)--SymbianOSBasics


Symbian Ownership


Symbian是一个software licensing公司,由Nokia,sonyericsson/Index.html">索爱,松下,西门子,三星等公司控股,其中nokia股份最高,占到近50%。


Symbian Licensees


Symbian本身不生产手机设备,它只是将license提供给其他手机设备生产厂商,除控股公司外,其他还有如摩托罗拉,联想,三菱,夏普,明基,富士通等等。


Symbian Devices:


2003年的Nokia 6600;2004年的Nokia 6630;2005年的Nokia N70,2006年的Nokia 3250等都是经典手机。


Symbian OS (EPOC)


Symbian是专为移动设备设计的操作系统,具有small memory footprint和low power consumption的特点。


Symbian OS Layers


自上而下一共有6层,每层以及其特点如下所述:



  • UI Layer:用户界面
  • Application Engine Layer:提供对应用程序所需要的数据的访问
  • System Layer:提供系统所有核心功能
  • Kernel Layer:提供内核级服务,如进程和线程
  • Hardware Adaption Layer:硬件接口层,软件的最下层,与硬件相关。
  • Hardware:物理硬件

UI Design Platforms



  • S60:最通用的用户界面层,为市面上大多数手机所采用,为单手操作而设计。
  • UIQ:为UIQ Technology所拥有,采用此界面的有sonyericsson/Index.html">索爱,摩托罗拉,明基,Arima等。
  • S80:为商务用途所设计,Nokia 9系列手机所采用。

  • Nokia 7710:曾被称作S90,唯一一款。
  • FOMA:专为日本的NTT DoCoMo的3G FOMA网络设计,采用此界面的有富士通和三菱。
  • 下图为S60平台的界面示意图:


Symbian platform Evolution



Development Requirements



  • SDK:本教程的实验采用S60第三版的SDK

  • 开发环境:采用Carbide.C++ Express

上述两种工具都可以直接从forum.nokia网站上下载得到,需要先注册成为Forum.nokia的会员。


S60 3rd Edition SDK


关于该SDK的一些重要信息:



  • 文档:<EPOCROOT>\S60Doc
  • 示例程序:<EPOCROOT>\S60Ex

  • 模拟器:<EPOCROOT>\EPOC32\release\winscw\udeb\EPOC.exe
  • API头文件:<EPOCROOT>\EPOC32\include
  • 手机二进制库文件:<EPOCROOT>\EPOC32\release\armv5
  • 模拟器二进制库文件: <EPOCROOT>\EPOC32\release\winscw\udeb

Symbian Projects


一个Symbian工程产生一个二进制文件:或者是exe,或者是dll。


包含以下内容:



  • 头文件:这个不用解释吧。
  • 源代码文件:由编译器生成目标代码,然后通过链接器生成exe或者dll。

  • 资源文件:定义资源的文本文件,生成二进制资源文件。
  • 本地化文件:根据不同语言定义的字符串。

  • 图像文件:同时支持位图(bitmaps)和向量图(scalable vector)。
  • 配置文件:如MMP文件。

读后感


常识性的东西,但是既然做了symbian开发,这些东西都不知道肯定会被人笑话的。


这里介绍的很系统,思路很清楚,我以前也是这儿知道一点,那儿知道一点。

现在应该算是都串起来了,呵呵

Labels:

Symbian OS及通讯技术术语全解

Symbian OS及通讯技术术语全解


Symbian OS和一些相关资料,内容不少,而且有些很专业。刚刚才收集整理了一份 技术术语白皮书,在这儿先放上来,大家共享。

1G
In mobile telephony, first-generation systems were analog, circuit-switched. Voice links were poor, handoff unreliable, capacity low, and security non-existent. 1G systems are not now under active development – indeed, in some areas 1G spectrum is being auctioned for 2G and 3G use.

在移动电话技术中,第一代系统是模拟的电路交换系统。语音连接很差、越区切换不可靠、容量小且不具备安全性。目前,已不再积极开发1G 系统— 实际上,在某些地区,1G 频谱正针对2G 和3G 用途进行拍卖。

2G
In mobile telephony, second-generation protocols use digital encoding and include GSM, D-AMPS (TDMA) and CDMA. 2G networks are in current use around the world. These protocols support high bit rate voice and limited data communications. They offer auxiliary services such as data, fax and SMS. Most 2G protocols offer different levels of encryption.

在移动电话技术中,第二代协议使用数字编码,其中包括GSM、D-AMPS (TDMA) 和CDMA。2G 网络目前正在全世界使用。这些协议支持高比特率语音和有限的数据通信功能。它们提供多种辅助服务,如数据、传真和SMS。大多数2G 协议提供不同级别的加密。

2.5G
In mobile telephony, 2.5G protocols extend 2G systems to provide additional features such as packet-switched connection (GPRS) and enhanced data rates (HSCSD, EDGE).

在移动电话技术中,2.5G 协议将2G 系统扩展到提供诸如分组交换连接(GPRS) 的附加功能和更高的数据传输速率(HSCSD、EDGE)。

3G
In mobile telephony, third-generation protocols support much higher data rates, measured in Mbps, intended for applications other than voice. 3G networks trials started in Japan in 2001. 3G networks are expected to be starting in Europe and part of Asia/Pacific by 2002, and in the US later. 3G will support bandwidth-hungry applications such as full-motion video, video-conferencing and full Internet access.

在移动电话技术中,第三代协议支持更高的数据传输速率(以兆比特/秒计算),它们不仅适合于传送语音,更可支持范围广泛的应用。3G 网络试验2001 年开始于日本。到2002 年,已有部分欧洲和部分亚太地区开始使用3G 网络,以后将在美国使用。3G 将支持占用大量带宽的应用程序,如全动感视频、视频会议和完全的Internet 访问。

AMPS
Advanced Mobile Phone System: a 1G standard which operates in the 800-900MHz-frequency band. It is still widely used in the United States.

高级移动电话系统:工作于800-900MHz 波段下的1G 标准。它仍在美国广泛使用。

Analog
The simple way to transmit speech, which is translated into electronic signals of different frequency and/or amplitude. The first networks for mobile phones, as well as broadcast transmissions, were analog. Due to being longer established in some countries, analog networks may offer better coverage than digital networks, however analog phones are less secure and suffer more from interference where the signal is weak. Analog systems include AMPS, NMT and ETACS.

用于传输语音的简单方法,它们转换为不同频率和/或振幅的电子信号。第一个手机网络和广播传输网络都是模拟的。由于模拟网络在一些国家建立的时间较长,所以它可能比数字网络的覆盖面更宽,然而,模拟手机的安全性较差,且在信号较弱的情况下下更容易受到干扰。模拟系统包括AMPS、NMT 和ETACS。

API
Historically, "application programming interface". Practically, an API is any interface that enables one program to use facilities provided by another, whether by calling that program, or by being called by it. At a higher level still, an API is a set of functionality delivered by a programming system, and as such the mix of APIs in a particular system tells you what that system can do.

在历史上是指“应用程序编程接口”。实际上,API 是指允许一个程序使用另一个程序的功能(通过调用另一个程序或被另一个程序调用)的任何接口。从更高层面上讲,API是一组由编程系统提供的功能,同样,特定系统中的不同API 告诉您该系统可以执行的操作。

Bluetooth
An open specification for seamless wireless short-range communications of data and voice between both mobile and stationary devices. For instance, it specifies how mobile phones, computers and PDAs interconnect with each other, with computers, and with office or home phones. The first generation of Bluetooth permits exchange of data up to a rate of 1 Mbps per second, even in areas with much electromagnetic disturbance. It transmits and receives via a short-range radio link using a globally available frequency band (2.4 GHz ISM band).

在移动设备和固定设备之间短距离传送数据和语音的无线通信的开放式规范。例如,它指定手机、计算机和PDA 之间如何互连、如何与计算机、办公室电话或家庭电话互连。第一代蓝牙允许以最高1Mbps/s 的速率交换数据,即便是在电磁干扰较为厉害的地区。它使用全球可用的波段(2.4 GHz ISM 波段),通过短程无线链路传输和接收数据。

bps
Bits per second: a way of quantifying data transmission throughput. It is the number of pieces of information (bits) transmitted or received per second.

比特/秒:一种量化数据传输吞吐量的方法。它是指每秒传输或接收的信息段的数量(比特)。

C++
An industry standard object-oriented compiled language, formally standardized in 1998, but tracing its history to the early 1980s, with an heritage in C and Simula. C++ is a general-purpose programming language with a bias towards systems programming. C++ runs on most computers from the most powerful supercomputers to the ubiquitous personal computers. Symbian OS is written in C++.

一种工业标准的面向对象的编译语言,于1998 年正式标准化,但是其历史可追溯到二十世纪八十年代早期,它继承了C 和Simula。 C++ 是一种偏向于系统编程的通用编程语言。C++ 可在大多数计算机上运行:从最强大的超级计算机到普遍存在的个人计算机。Symbian 操作系统是用C++ 编写的。

CDMA
Code Division Multiple Access: a digital wireless telephony transmission technique.

1. CDMA allows multiple frequencies to be used simultaneously (Spread Spectrum). The CDMA idea was originally developed for military use over 30 years ago.

2. The CDMA standards used for second-generation mobile telephony are the IS-95 standards championed by QUALCOMM.

"码分多路访问:一种数字无线电话传输技术。
1. CDMA 允许同时使用多个频率(扩展频谱)。CDMA 的概念最初是为军事用途开发的。
2. 用于第二代移动电话技术的CDMA 标准是由QUALCOMM支持的IS-95 标准。"

Cellular radio
The technology that has made large scale mobile telephony possible. Current cellular networks reuse the same radio frequencies by assigning them to cells far enough apart to reduce interference. A cell is the geographical area covered by one radio base station transmitting/receiving in the center. The size of each cell is determined by the terrain, transmission power, and forecasted number of users. Service coverage of a given area is based on an interlocking network of cells, called a cell system.

这项技术已经使大规模移动电话技术成为可能。当前的蜂窝网络通过将相同的无线电频率分配到远远分隔的小室来减少干扰,以重复使用这些频率。小室是由位于中心的无线电基站传输/接收所覆盖的地理区域。每个小室的大小由地形、发射功率和预测的用户数来确定。给定地区的服务覆盖范围基于小室的联锁网络(名为小室系统)。

Circuit-Switching
Means of creating a connection by setting up a dedicated end-to-end circuit, which remains open for the duration of the communication.

建立连接的方法— 通过设置一个在通信期间保持开放的专用的端对端电路。

CLDC
J2ME Connected Limited Device Configuration. The CLDC serves the market consisting of personal, mobile, connected information devices. This configuration includes some new classes designed specifically to fit the needs of small-footprint devices.

J2ME 连接有限设备配置。CLDC 为由个人移动连接信息设备组成的市场提供服务。这种配置包括一些专为满足小型设备的需求而设计的新类别。

Content Provider
A company that provides services to mobile phone users or network operators. These services could be shopping, web surfing, chat rooms, playing games, accessing data such as music and books through a server.

用来向手机用户或网络运营商提供服务的公司。这些服务可以是购物、网络冲浪、聊天室、玩游戏、通过服务器访问数据(如音乐和图书)。

D-AMPS
Digital AMPS (Digital-Advanced Mobile Phone Service) is the digital wireless standard widely used throughout the Americas, Asia Pacific and other areas. D-AMPS uses digital TDMA on the one hand, and is required to be compatible with installed AMPS base station networks on the other. D-AMPS operates on the 800 and 1900 MHz bands.

数字AMPS(数字— 高级手机服务)是广泛用于美国、亚太地区和其他地区的数字无线标准。一方面,D-AMPS 使用数字TDMA,另一方面,D-AMPS 必须与已安装的AMPS基站网络兼容。D-AMPS 使用800 和1900MHz 波段。

DCS 1800
Digital Communications System: another name for GSM working on a radio frequency of 1800 MHz. Also known as GSM1800 or PCN, this digital network operates in Europe and Asia Pacific.

数字通信系统:在1800MHz 无线电频率下工作的GSM 的另一个名称。也称作GSM 1800 或PCN,该数字网络在欧洲和亚太地区使用。

Dual band
Dual band mobile phones can work on networks that operate on different frequency bands. This is useful if you move between areas covered by different networks. Some networks operate on two bands, for instance GSM-1800 in town centers and GSM-900 in the rest of the country.

双频手机可以在不同波段的网络中使用。如果您在由不同网络覆盖的地区之间漫游,则这非常有用。一些网络使用两个波段,例如,GSM-1800 在城市中心使用,而GSM-900 在国家的其余地区使用。

Dual mode
Dual mode mobile phones have more than one air interface and hence can work on more than one network. One example is phones that operate on both digital and analog networks. They are quite useful if you want the advantages of a digital phone, but regularly visit areas where analog is the only service available.

双模式手机有多个空中接口,因此可以在多个网络下工作。既可以在数字网中工作、又可以在模拟网络中工作的手机就是一个例子。如果您希望利用数字手机,但是经常访问只提供模拟服务的地区,则这样的手机相当有用。

EDGE
Enhanced Data Rates for GSM Evolution. An enhanced modulation technique designed to increase network capacity and data rates in GSM networks. EDGE should provide data rates up to 384 Kbps. EDGE will let operators without a 3G license to compete with 3G networks offering similar data services. EDGE is not expected before 2001 at the earliest.

从GSM 演变来的增强的数据速率。它是一种增强的调制技术,旨在增加GSM 网络的容量和数据速率。EDGE 应当提供高达384Kbps 的数据速率。EDGE 将允许没有3G 许可证的运营商与提供类似数据服务的3G 网络进行竞争。预计EDGE 最早不会早于2001 年。

GPRS
General Packet Radio Service: a radio technology for GSM networks that adds packet-switching protocols, shorter set-up time for ISP connections, and offer the possibility to charge by amount of data sent rather than connect time. GPRS promises to support flexible data transmission rates typically up to 20 or 30 Kbps (with a theoretical maximum of 171.2 Kbps), as well as continuous connection to the network. A 2.5G enhancement to GSM, GPRS is the most significant step towards 3G, needing similar business model, and service and network architectures. GPRS started to appear in some networks during 2000.

通用分组无线业务:一种GSM 网络技术,其中增加了分组交换协议,缩短了ISP 连接的设置时间。并实现了按发送的数据量(而非连接时间)收费的可能性。GPRS 承诺支持通常高达20 或30Kbps(最大理论值为171.2Kbps)的灵活的数据传输速率,以及与网络的不间断连接。GPRS 是对GSM 的2.5G 增强,它是面向3G 的最重要的步骤,它需要类似的业务模型以及服务和网络结构。GPRS 于2000 年开始出现在某些网络中。
GSM
Global System for Mobile communications, the most widely used digital mobile phone system and the de facto wireless telephone standard in Europe. Originally defined as a pan-European open standard for a digital cellular telephone network to support voice, data, text messaging and cross-border roaming. GSM is now one of the world's main 2G digital wireless standards. GSM is present in more than 160 countries and according to the GSM Association, accounts for approximately 70 percent of the total digital cellular wireless market. GSM is a time division multiplex (TDM) system. Implemented on 800, 900, 1800 and 1900 MHz frequency bands.

全球移动通信系统,使用最广泛的数字手机系统和欧洲事实上的无线电话标准。最初定义为数字蜂窝电话网络的泛欧洲开放式标准,用来支持语音、数据、文本消息和过境漫游。GSM 现在是世界上主要的2G 数字无线标准之一。GSM 存在于160 多个国家中,按照GSM 协会的数字,它约占整个数字蜂窝无线市场的70%。GSM 是一种时分多址(TDM) 系统。它在800、900、1800 和1900MHz 波段实现。

IrDA
1. A suite of protocols for infrared (IR) exchange of data between two devices, up to 1 or 2 meters apart (20 to 30 cm for low-power devices). IrDA devices typically have throughput of up to either 115.2 Kbps or 4 Mbps. IrDA protocols are implemented in Symbian OS phones, many PDAs, printers and laptop computers.

2. The Infrared Data Association, the industry body that specifies IrDA protocols, originally founded by Hewlett-Packard and others.

"1. 一套用来在距离达到1 或2 米(对于低功率设备为20 到30 厘米)的两个设备之间交换数据的红外(IR) 协议。IrDA设备的吞吐率通常可以达到115.2Kbps 或4Mbps。IrDA 协议由Symbian 操作系统手机、许多PDA、打印机和膝上型计算机实现。
2. 红外数据同盟,用来指定IrDA 协议的业内机构,最初是由Hewlett-Packard 和其他公司成立的。"

Java
Industry standard object-oriented language and virtual machine, invented by Sun Microsystems and formally released in 1996. Java is an ideal language for network applications and applets. Sun's Java specifications include many Java APIs and platforms, including the JavaPhone API and PersonalJava platform, which are included in Symbian OS.

"业内标准的面向对象的语言和虚拟机, 由SunMicrosystems 发明,于1996 年正式发布。Java 是网络应用程序和小程序的理想语言。Sun 的Java 规范包括许多Java API 和平台,其中包含Symbian 操作系统中包括的JavaPhone API 和PersonalJava 平台。"

J2ME
Java 2 Platform, Micro Edition (J2ME): The edition of the Java platform that is targeted at small, standalone or connectable consumer and embedded devices. The J2ME technology consists of a virtual machine and a set of APIs suitable for tailored runtime environments for these devices. The J2ME technology has two primary kinds of components – configurations and profiles.

Java 2 平台,Micro Edition (J2ME):该版本的Java 平台面向小型的独立或可连接的消费者和嵌入设备。J2ME 技术由虚拟机和一组适用于为这些设备定制的运行时环境的API组成。J2ME 技术有两种主要类型的组件:配置和配置文件。

JavaPhone
A Java API specification controlling contacts, power management, call control, and phonebook management, intended specifically for the programmability requirements of mobile phones.

一种用来控制联系人、电源管理、呼叫控制和电话簿管理的Java API 规范,它专门满足手机的可编程能力要求。

Kernel
Core of an operating system, a kernel manages the machine’s hardware resources (including the processor and the memory), and provides and controls the way any other software component can access these resources. The kernel runs with a higher privilege than other programs (so-called user-mode programs). The power and robustness of an OS's kernel play a major role in shaping overall system design and reliability.

在移动设备和固定设备之间短距离传送数据和语音的无线通信的开放式规范。例如,它指定手机、计算机和PDA 之间如何互连、如何与计算机、办公室电话或家庭电话互连。第一代蓝牙允许以最高1Mbps/s 的速率交换数据,即便是在电磁干扰较为厉害的地区。它使用全球可用的波段(2.4 GHz ISM 波段),通过短程无线链路传输和接收数据。

OS
Operating System: historically, the minimal set of software needed to manage a device's hardware capability and share it between application programs. Practically, "OS" is now used to mean all software including kernel, device drivers, comms, graphics, data management, GUI framework, system shell application, and utility applications. This would define Windows, Palm OS and MacOS as operating systems. Symbian provides an operating system – Symbian OS – tailored for data-enabled mobile phones.

操作系统:在历史上,是指管理设备能力并在应用程序之间共享该能力所必需的一组最少的软件。实际上,“OS”目前用来表示所有软件,其中包括内核、设备驱动程序、通信、图形、数据管理、GUI 框架、系统shell 应用程序和实用程序。这将把Windows、Palm OS 和MacOS 定义为操作系统。Symbian 提供了一个操作系统Symbian 操作系统,该操作系统是为允许使用数据的手机定制的。

Packet-Switching
Technique whereby the information (voice or data) to be sent is broken up into packets, of at most a few KB each, which are then routed by the network between different destinations based on addressing data within each packet. Use of network resources is optimized, as the resources are needed only during the handling of each packet. This is an ideal model for ad hoc data communication, and works well also for voice, video and other streamed data. Mobile phones with packet-switched communication appear to be "always connected" to the data network, whereas in the case of circuit-switched connections, setup time takes around 30 seconds to connect from a mobile phone to an ISP. Use of packet-switched network can be charged according to the volume of data transferred and not to any notion of time spent online.

该技术将所发送的信息(语音或数据)分成多个数据包,每个数据包最多有几个KB,这些数据包随后由网络基于每个数据包中的寻址数据在不同目标之间发送。由于只在处理每个数据包期间才需要资源,所以优化了网络资源的利用。这对于特别的数据通信是理想模型,且还适用于语音、视频和其他流化数据。具有分组交换通信功能的手机似乎“始终连接”到数据网络,但是,对于电路交换连接,设置时间大约需要30 秒才能将手机连接到ISP。在使用分组交换网络时,可以按照传输的数据量(而非在线时间)收费。

Platform
A set of technology, which acts as a foundation for real-world applications, or higher-level platforms. Symbian OS includes C++ APIs, a leading Java implementation, an application suite and integration with wireless and other communications protocols.

一组技术,它们充当现实应用程序或更高级平台的基础。Symbian 操作系统包括C++API、领先的Java 实现、应用程序套件以及与无线和其他通信协议的集成。

SIM
Subscriber Identity Module. The SIM card is the smart card inserted inside all GSM phones. It identifies the user account to the network, handles authentication and provides data storage for basic user data and network information. It may also contain some applications that run on a compatible phone (SIM Application Toolkit).

用户标识模块。SIM 卡是插到所有GSM 手机中的智能卡。它向网络标识用户帐户,处理身份验证,并为基本用户数据和网络信息提供数据存储。它还可以包含一些可在兼容的手机(SIM 应用程序工具包)上运行的应用程序。

Smartphone
A generic name for voice centric mobile phones with information capability. The Ericsson R380 Smartphone is an example of such a Symbian OS phone.

以语音为中心的具有信息功能的手机的通用名。爱立信R380 Smartphone 就是这样的Symbian 操作系统手机的例子。

SMS
Short Message Service: available on digital GSM networks allowing text messages of up to 160 characters to be sent and received via the network operator's message center to your mobile phone, or from the Internet, using a so-called "SMS gateway" website. If the phone is powered off or out of range, messages are stored in the network and are delivered at the next opportunity.

短消息服务:用在数字GSM 网络上,允许手机通过网络运营商的消息中心或者从Internet 上使用所谓的“短消息网关”网站收发最多160 个字符的短消息。如果手机处于关机状态或者不在服务区,短消息会存储在网络中,并在手机下次开机或者重新回到服务区时发送。

Symbian OS
Symbian’s advanced open standard operating system for data enabled mobile phones. It includes a multi-tasking multithreaded core, a user interface framework, data services enablers, application engines and integrated PIM functionality and wireless communications.

Symbian 的高级开放式标准操作系统,面向允许使用数据的手机。它包括一个管理多任务的多线程核心、一个应用界面框架、数据服务启用程序、应用程序引擎以及集成的PIM 功能和无线通信功能。

TDMA
1. Time Division Multiple Access: a digital wireless telephony transmission technique. TDMA allocates each user a different time slot on a given frequency. GSM, D-AMPS, PDC and DECT use TDMA in one form or another.

2. A name generally used for D-AMPS. TDMA networks are operated in the US, Latin America, New Zealand, parts of Russia and Asia Pacific.

"1. 时分多址:一种数字无线电话传输技术。TDMA 在给定频率为每个用户分配不同的时隙。GSM、D-AMPS、PDC 和DECT 分别以某种形式使用TDMA。
2. 通常用于D-AMPS 的名称。TDMA 网络在美国、拉丁美洲、新西兰、俄罗斯部分地区和亚太地区使用。"

Unicode
A 16-bit character encoding scheme allowing characters from Western European, Eastern European, Cyrillic, Greek, Arabic, Hebrew, Chinese, Japanese, Korean, Thai, Urdu, Hindi and all other major world languages, living and dead, to be encoded in a single character set. The Unicode specification also includes standard compression schemes and a wide range of typesetting information required for worldwide locale support. Symbian OS fully implements Unicode.

一种16 位的字符编码方案,允许用单个字符集对以下字符进行编码:西欧、东欧、西里尔文、希腊、阿拉伯文、希伯来文、中文、日文、韩文、泰文、乌尔都语、北印度语和所有其他世界主要语言(现存的和已消亡的)。Unicode 规范还包括用来支持世界区域设置的标准的压缩方案和广泛的排版信息。Symbian 操作系统完全实现了Unicode。

vCard
Standard defining the format of an electronic business card. All devices supporting vCard can exchange information such as phone numbers and addresses. For instance a user with a vCard-aware phonebook application on a handheld computer can easily transfer names and phone numbers to a vCard-aware mobile phone.

用来定义电子名片格式的标准。所有支持vCard 的设备都可以交换诸如手机号和地址的信息。例如,如果用户的手提电脑上有能够识别vCard 的电话簿应用程序,则他或她可以方便地将姓名和手机号传送到能够识别vCard 的手机上。

WAP
1. Wireless Application Protocol: a set of communication protocol standards to make accessing online services from a mobile phone simple.

2. WAP was conceived by four companies: Ericsson, Motorola, Nokia, and Unwired Planet (today called Phone.com). The WAP Forum is an industry association with over 200 members. Symbian is a full member of the WAP Forum.

"1. 无线应用协议:一组通信协议标准,用来简化手机中的联机访问服务。
2. WAP 由爱立信、摩托罗拉、诺基亚和Unwired Planet(现在称为Phone.com)等四家公司发明。WAP 论坛是包括200 多个成员的行业协会。Symbian 是WAP 论坛的正式成员。"

Labels:

Symbian代码签名证书申请和使用指南



本指南根据VeriSign网站和Symbian网站有关内容整理翻译,请同时参考:移动代码签名证书(ACS)常见问题A guide to Symbian Signed 。如果您要申请 Symbian Signed 认证,请同时参考:Symbian Signed认证常见问题问答


VeriSign Authenticated Content Signing (ACS) for Symbian(Symbian 代码签名证书)使得软件开发商能安全地开发基于Symbian操作系统的应用软件,并安全地运行在Symbian操作系统的移动终端上。VeriSign ACS让您能数字签名您的应用软件,并安全地、Web方式实时签名您的文件和管理您的签名帐户,严格的软件开发商身份验证保护了软件开发商的合法权益。


第1步 在线申请 Step 1 - Enroll for your ACS Publisher ID

WoTrust会给用户一个申请网址让用户自己在线填写有关申请信息,提交申请成功后,请告诉WoTrust定单号即可。申请过程中请注意以下几点:
(1) 公司名称只能填写英文名称,如果申请单位只能提交中文名称的营业执照,则英文名称只能是通用英文单词的直译。公司商号只能是拼音。VeriSign认可WoTrust审核过的中文名称营业执照作为证明文件;
(2) 填写单位联系人(Organization Contact)时必须填写提交的电话费单上能联系到的联系人;
(3) 在证书申请过程中需要用户填写管理密码(Challenge Phrase),请一定牢记此密码,查询证书申请状态、修改联系人信息和取回证书都要用到此密码;
(4) 电子邮件只能用企业邮局,不得用公用邮箱(如:Hotmail、Gmail等等);
(5) 申请到最后的付款(Payment)阶段,请选择“Token”(代用币)付款方式,输入WoTrust告诉用户的Token Number即可。如下图1所示:


(6) 紧接者就是填写填写付款联系人(Billing Contact Information)时,请填写: First Name: Billing, Last Name: WoTrust, Title: Manager, Company: Wotone Communications Ltd., Address1: Fangda Building, Suite 1803, Hi-Tech Industrial Park, City: Shenzhen, State/Province: Guangdong, Country: 选 China, Telephone: +86-755-6131 3000,



  1. On the ACS for Symbian page, select the starter pack (ACS Publisher ID without Smartcard) and click Buy Now.
  2. Complete and submit the enrollment form. You will receive an automated e-mail acknowledgement - you don't need to do anything with this. VeriSign Customer Support will process your order. If necessary, VeriSign may contact you to confirm your order information and/or for additional documentation such as Proof of Right (POR) documents. Note that the Organization Contact listed on your enrolment will be contacted by telephone for verifying your details. Please alert this person in order to expedite your certificate processing.

第2步 取回您的Symbian代码签名证书 Step 2 - Pick up your ACS Publisher ID

您提交申请后,WoTrust会把您的证明文件翻译整理后提交给VeriSign,VeriSign会电话联系您填写的单位联系人进行定单确认, 一旦完成验证则会发一个Email给用户,如下图2所示:



用户只要点击邮件中的链接到VeriSign网站上取回证书即可,如下图3所示,需要输入邮件中的PIN码和在证书申请过程中填写的管理密码(Challenge Phrase),再点击“Continue”即可完成证书安装:




  1. Once your order is approved, you will receive an approval e-mail with instructions on how to pick up your ACS Publisher ID.
    Important: Save this e-mail for future reference.
  2. Go to the VeriSign Web site provided in your approval e-mail to pick up and install your Publisher ID.

第3步 导出证书和转换证书格式 Step 3 - Download and use Symbian Key Export Utility

(1) 请打开IE浏览器,在“工具” — “ Internet 选项”中选“内容”,再点击“证书”就可以看到您的签名证书,此签名证书将用于登录Symbian签名管理系统(ACS Signing Account Manager)的身份认证,同时也用于签名Symbian SIS文件。但是,Symbian的签名工具需要双证书文件(.pvk和.cer)来签名SIS文件,所以用户需要把已经安装到IE中的证书导出为.PFX格式;


(2) 下载 证书格式转换工具,把导出的.pfx格式证书和转换工具放在同一目录下,在DOS状态下输入以下命令转换证书文件:


vs_pkcs -p12 pfxFile -passwd pfxPassword -key mykey.key -cer mycert.cer


其中:pfxfile就是导出的.pfx文件名,pfxPassword就是导出.pfx格式证书时设置的密码,mykey.key就是转换后的私钥文件,mycert.cer就是转换后的证书公钥文件。



  1. The private key and certificate embedded on your IE browser key store need to be converted into a format that the Symbian MakeSIS tool can use. The Symbian Key Export Utility available here will enable this conversion.
  2. Please read and accept the click through software license.
  3. Download and run Symbian Key Export Utility to do this conversion.

    Follow instructions below to do the key export :



    1. Once you have downloaded the 'Symbian Key Export Tool'(vs_pkcs.zip), extract the contents and copy the vs_pkcs.exe executable and ReadMe.txt files to any folder.


    1. From your IE browser, select your ACS publisherID cert. Tools -> Internet Options -> Content -> Certificates .
    2. With the cert selected, click on 'Export' and follow the steps in the Certificate Export Wizard. Make sure you choose 'Yes, export the private key' option when asked 'Do you want to export the private key with the certificate?'
    3. You can choose to enter a password to protect the private key or you can leave it blank.
    4. Once you have exported successfully to a .pfx file, copy the file to the folder containing the downloaded vs_pkcs.exe executable and follow the instructions in the ReadMe.txt to create a .key and .cer file for use with the Symbian MakeSIS tool.

第4步 签名SIS文件,并把签名后的SIS文件提交给VeriSign重签名或提交给Symbian测试 Step 4 - Sign your SIS files and send to Symbian testing lab

(1) 使用Symbian MakeSIS tool来签名SIS文件,需要用户导入签名证书文件:mykey.key 和 mycert.cer;


(2) 如果您要申请Symbian Signed认证,则直接把已经签名的SIS文件发给Symbian testing lab,通过 Symbian 测试后Symbian会重签名后发给用户。请注意:直接提交给Symbian是不计签名事件的;


(3) 如果不申请Symbian Signed认证,则需要访问VeriSign SAM网站,点击“Click here to access your account”要求您选择已经安装在您电脑中的VeriSign 签名证书作为身份认证而登录到Symbian签名管理系统(ACS Account Manager),如下图4所示,提交已经签名的SIS文件后,即刻就可以取回已经重签名的 SIS文件(Pick Up Signed Files),就可以安全地让用户下载使用了。请注意:您只购买了10个签名事件,每签名一个SIS文件就会少一个签名事件,用完后,您可以点击“Purchase Contect IDs”购买新的签名事件。




  1. Use Symbian MakeSIS tool to sign your SIS files with your ACS Publisher ID. Make sure you sign the version of your application that you are sending to the Symbian testing lab. Note that if you make any changes to the signed file, it will be break the signature and you will need to sign it again with the ACS Publisher ID.
  2. Follow Symbian instructions to send your signed SIS files to the Symbian testing lab.
  3. Symbian testing lab will verify your signature and test them per Symbian testing and certification procedures. (Please contact Symbian directly for any questions on the testing or certification procedures).
  4. Once the application passes the test requirements, Symbian testing lab will access the VeriSign Signing Account Manager portal and will re-sign your application using a single use ACS Content IDs that chains up to the Symbian Testing Based Root CA - the trust point embedded in Symbian-based devices.
  5. The application is now certified and will be sent back to you by the Symbian testing lab.

    Important:

    • You can access the ACS Signing Account Manager only if you have a valid ACS Publisher ID. However, at this time, you will not be able to access the Symbian Testing Based Root signing service since this is restricted per Symbian requirements to the Symbian testing partner. You will get a message that tells you that you are not presently authorized to sign applications for this platform.
    • Steps 1 -2 are one-time only until renewal after 1 year.

Labels:

S60常见问题

什么是S60,什么是os6/7/8/9,什么是J2ME,什么是MIDP
据人机界面的不同Symbian操作系统分为S60、S80、S90和UIQ,发展不同用户界面的目的是为了让手机厂商有更多的选择以投入Symbian手机的开发。S60用户界面(UI)专门为简便、单手使用而设计。S60平台提供了基于Symbian C++的,开放的,标准的开发平台,是针对一般智能电话的主流操作系统。同时也支持J2ME的开发。
特点: 摇杆/软键/滚轮+传统数字操作+单手操作
屏幕:208x176
J2ME是Java 2 Micro Edition 的缩写,J2ME包括虚拟机、针对设备的API库、针对设备的配置和框架定义(Configuration & Profile)等。简单的讲是Sun公司为了把Java应用于移动通讯设备、嵌入式设备或消费性电器而推出的一项技术。(一般在个人电脑上的应用为J2SE-Java 2 Standard Edition; 在企业中的应用为J2EE-Java 2 Enterprise Edition)
MIDP是移动信息设备描述(Mobile Information Device Profile)的简称,他属于J2ME的一部分,用于支持小型信息设备(手机、PDA等)的编程。是一套Java应用编程接口(Application Programmer's Inte***ces (APIs).它们与有限连接设备配置(Connected Limited Device Configuration ,CLDC)一起向诸如蜂窝电话等移动信息设备提供了一个完整的Java应用运行环境.
OS为operation system的缩写,即是操作系统,有OS5.x/6.x/7.x/8.x/9.x等操作系统
OS5.x ~ 1999开始使用,拥有640x240的屏幕
. . (第一款 Symbian OS 手机是爱立信Ericsson R380)

OS6.x ~ 2000在Symbian OS v5的基础上实现了完全的革命性变化
. . (Sendo X2、Siemens SX1、Nokia 7650、Nokia 3650、Nokia N-Gage、Nokia N-Gage QD、Nokia 9210…etc)

OS7.x ~ 新增3G网络支持、Bluetooth PAN…etc
. . (Nokia 6600、Nokia 6670、Nokia 6260、Nokia 7610、Nokia 7710(S90)、Panasonic X800、Panasonic X800、Sony Ericsson P系列(UIQ)…etc)

OS8.x ~ 新增Unicode支持、Bluetooth v1.2、USB v2.0 Full Speed…etc
. . (Nokia 6680、Nokia 6681、Nokia 6682、Nokia 6630、Nokia N70、Nokia N90…etc)

OS9.x ~ 新增A2DP、USB Mass Storage、DRM…etc
. . (Nokia N91…etc)
其中OS7.x以后机器支持MIDP2.0,向下兼容MIDP1.1,而OS6.x只支持MI**1.1

3、怎样格式化手机?

答:格机一般来说有三种方法(记得格机前一定先备份好自己要的数据资料等):
1.软件格式化:利用*siloc公司的软件sTools,进行格式化手机,锁码为12345,这个方法不会丢失线路2
   2、软格:在手机上输入 *#7370# 之后要求你输入锁码,初始密码是:12345,如果你更改过手机密码,那就是更改后的密码(不是SIM卡密码),之后出现白屏,只显示NOKIA字样,2~3分钟后格机完成,重新输入时间;可能丢失线路2
   3、硬格:先关机,再开机的时候按住拨号键、“*”键、“3”键,打开电源直到“NOKIA”字样出现(此过程不能松开任何一个按键)。稍稍等几秒直至出现“Formating……/”字样,这时方可松开以上按键。过几分钟,系统格式化完成,手机自动重启并进入待机画面。会丢失线路2
   以上格机需要注意:保持电量绝对充足,格机途中不能企图关机,不能插充电器等。一般以软格为先。

4、线路2是做什么用的,格式化手机如何才能保留线路2,丢失了的如何恢复?

答:线路2是用来支持一卡双号的,对绝大部分朋友来说是无关紧要的,但是不少朋友还是想保留它,这时可以采用软件格式化法,不会丢失,如果需要硬格 ,可以在关机后将SIM卡和存储卡全部取出,然后同时按住“拨号键”加“*键”加“3键”再开启手机,屏幕亮了以后松开开机键,稍稍等几秒直至出现“Formating……/ 格式化 ……”字样,这时方可松开那三个按键。过几分钟,系统格式化完成,手机自动重启并进入待机画面。再次关机将SIM卡和存储卡装入手机,开机后按住“#”就会发现依然可以正常切换线路。
恢复线路2
一般来说需要刷机恢复

5.如何备份手机名片和短信等资料

答:备份的方法有很多,一般来说重要资料建议多种备份方法一起使用,最容易的方法是利用PC套件本身的备份,甚至可以方便的备份日历等项目,还可以在手机上使用名片备份软件(smart vcard或contacts manager),信息备份软件(message storer或message saver)进行备份,确保万无一失.另外PC软件玩转手机也是备份好手
6、什么是飞行模式?如何开启?

答:飞行模式也叫航空模式。简单的说就是在飞机飞行时使用的模式.在飞机飞行时如果使用手机会有干扰信号,对航空安全造成危害!所以有关航空管理规定在飞机上是严禁使用手机的.但是如果手机开启了飞行模式就可以关闭所有网络功能,这样就不会产生信号干扰.
由于开启飞行模式可以关闭所有网络功能,让手机可以获得更大的运行空间,在需要运行一些大的程序(如某些游戏)时使用飞行模式可以让程序正常运行.(一般手机没有SIM卡就无法进行任何操作)。
S60中os6手机可以用sTools开启飞行模式.进入sTools,选择开启飞行模式,关闭手机,取出sim卡,开启手机就可以进入飞行模式。
Os7手机无法开启
Os8以后手机自带离线模式,等同于飞行模式.

转自:易虎论坛
  
7、我新买的存储卡,怎么显示只有490M,而不是512M呢?

答:如果是全新的512MB存储卡,无论在手机上还是PC上显示都是490MB左右,这个是因为我们计算机里的单位转换是1MB=1024KB,1GB=1024MB,而制作存储卡的厂商一般为了简化计算,都以1MB=1000KB,1GB=1000MB计算的,所以到最后就显示是490MB了,490x1024x1024=512

8、怎么安装软件和游戏啊?还有怎么删除呢?

答:安装软件或游戏可以通过四种方法安装:
  (1)用数据线或者蓝牙或者红外配合PC套件安装。连接好手机和电脑,打开PC套件,选择界面里的安装软件,或直接通过手机浏览器复制安装文件到手机里,然后用手机的文件管理软件打开再安装也可以;
  (2)通过蓝牙适配器安装。连接好蓝牙适配器,搜索到手机,从PC上传送SIS或者jar的安装文件到手机上,在消息里打开就可以直接安装了,安装完毕后将消息里的蓝牙消息就可以删除了;
  (3)通过读卡器安装。关机后取出RS-MMC存储卡(支持热插拔的可不关机,但是需要先删除硬件),将安装文件复制到存储卡上,然后装卡后直接打开就可以自动安装了;
  (4)通过邮件提取法安装,先将安装文件通过邮箱发送到手机设置的那个邮箱里去,到7610里的信息——信箱里接收邮件,然后提取附件,最后还是安装就可以了。
删除软件或游戏一般在“程序管理”里删除,找到这个软件或游戏后按C键即可删除,如果在程序管理里的安装记录被误删除了(一般这个安装记录软件在C或E的system——install文件夹里),就得通过第三方文件管理软件来删除了,如SeleQ软件,在SeleQ里就得到此软件安装目录下的system——apps里找到后删除,不过建议先尽量在程序管理里删除。

9、我的手机发完消息或收到消息的时候总是显示“MCE 程序关闭”是什么意思?

答:Mce报错一般是NOKIA智能手机常见的短信报错现象,一般简单的解决方法是:
   1、删除所有信息,以及收件箱、发件箱里所有的消息;
   2、将短信存储位置尽量保存在手机存储中;
   3、慢速操作可减少mce报错几率;
   4、格机后可暂时长时间解决mce报错。

10、NOKIA怎样连接蓝牙耳机?

答:首先打开手机连接选项里的蓝牙开关,之后打开蓝牙耳机的电源开关,在手机的蓝牙界面里按方向键向右,然后在里面搜索新设备,这时候按住蓝牙耳机上的信号发射键(一般有的蓝牙耳机是音量大小键,有的是接、挂机键,看蓝牙耳机情况而定),之后便可搜索到蓝牙耳机,这时候手机要求输入通行码,一般得看蓝牙耳机说明书上写的通行码,我用的大多通行码都是0000,最后将其设置为授权设备就可以正常使用了。

11、手机有没有必要安装手机杀毒软件?

答:目前病毒种类还比较少,比如卡比尔病毒、骷髅病毒等,卡比尔病毒可以占用大量内存资源,造成系统当机,而且是自动运行,骷髅病毒是中后屏幕的运行图标都变成了骷髅标志,很是恐怖,这类病毒仅仅是依靠蓝牙为通道发送和传播的,想不中很简单,只要平时不开蓝牙就可以了,需要通过蓝牙传文件再打开,使用蓝牙耳机的可以在配对后隐藏蓝牙可见性,平常如果要一直开着蓝牙,即使收到不明的蓝牙消息可以直接拒绝接受即可,这样可以说怎么也不会中病毒的,杀毒软件的作用不大,个人觉得安装的必要不大。

12、一般都有哪些存储卡类型,那个存储卡的适配器是干什么用的?


答:S60手机一般使用的是MMC/RS-MMC/MMC MOBILE卡,卡类型向下兼容,也就是说使用MMC卡的可以使用RS-MMC卡,使用RS-MMC卡的也使用双电压的MMC MOBILE卡,价格也相应贵些。
一般RS-MMC卡几乎只有普通MMC卡的一半大小,加上那个适配器就和普通MMC卡一样大了,可以使用在能使用MMC卡的手机上或读卡器上读取信息,实质上是一样的,购买机器带的RS-MMC卡里一般就有附带这个适配器,还有新买RS-MMC卡里一般也带这个小东西。

13、我的英汉双向词典无法打开,提示说词典内容不存在,要怎么弄呀?还有如果想删除在哪删除?

答:原因是可能没放存储卡或不小心将存储卡上的字典词库误删除了,你可以到网上下载一个英汉双向词典字库,共5MB多点,是一个dictionary文件夹,内有11个文件,建议通过读卡器将dictionary文件夹复制到存储卡的system\apps文件夹里面就可以了,至于英汉双向词典是无法删除的,出厂时这个软件是被固化在手机的Z盘里的,其词库储存在E盘里。
BWO词库下载:
http://bbs.dospy.com/read-h-tid-6650-keyword-%B4%CA%B5%E4.html底楼

14.怎样才能看到手机和卡的system文件夹?

答:如果需要在手机查看,可以安装SeleQ或者Fileman等文件管理软件,直接可以进入,如果需要在电脑上看,则可以用读卡器直接查看卡上的system文件夹。在PC上显示这个system是隐藏文件夹,要先打开PC的显示所有隐含文件和文件夹才能看的到,方法是打开“我的电脑——工具——文件夹选项——查看——隐藏文件和文件夹,在显示所有文件和文件夹前打钩”,如果需要在电脑看手机上的system文件夹,可以通过玩转手机软件,PC套件是看不到的,对system进行了保护,但是实际是存在的,有时候可以进行强行复制粘贴。

15、怎样才能看到手机里的C、D、E、Z盘符啊?

答:通过安装第三方软件,如SeleQ或FileMan软件来实现,用这些软件可以随意查看手机存储或存储卡存储,以及手机本身的资源情况,打开后会有C:、D:、E:、和Z:的盘符,就和你的电脑硬盘分区意思是一样的,其中C:是手机本机闪存(可以使用),共8MB,D:是缓存(不可使用),E:是存储卡(可以使用),视使用者更换存储卡情况而定了,Z:是本机系统ROM(不可使用),一般D:和Z:盘不是用户可支配的。

16、CMNET和CMWAP两种接入点有什么区别啊?CMWAP能上WWW网么?为什么中国移动客服说不可以呢?我没有包月,该使用哪种接入方式?

答:在国际上,通常只有一种GPRS接入方式,但在中国的GPRS却有CMNET和CMWAP两种接入点,其实上CMWAP和CMNET只是中国移动人为划分的两个GPRS接入方式。前者是为手机WAP上网而设立的,后者则主要是为PC、笔记本电脑、PDA等利用GPRS上网服务。它们在实现方式上并没有任何差别,但因为定位不同,所以和CMNET相比,CMWAP便有了部分限制,cmwap接入方式是中国移动特有的,中国移动对cmwap作了一定的限制,主要表现在cmwap接入时只能访问GPRS网络内的IP(10.*.*.*),而无法通过路由访问Internet。我们通过WAP网关协议或它提供的HTTP代理服务实现软件的接入。而CMNET接入的却可以直接浏览和PC上网一样的WWW网站,还有在线电视等,所以包月一般是在200元以上,甚至不提供包月服务,部分地区提供cmwap包月服务,包月只有2、30元。
通过第三方软件,我们可以方便地利用CMWAP的代理服务上到WWW网站,至于客服一口咬定无法上到,那是因为这样一来就违背了移动的初衷,增大了流量,针对此情况,移动已经取消了很多地区的CMWAP包月,足见移动的真实意图。
由于cmwap是通过代理服务器实现的,会产生一些不必要的流量,且速度不如cmnet,不包月的cmwap和cmnet都是0.03元/K,所以建议使用cmnet接入方式,可以获得最大的速度和最小的流量

18.mp3如何才能设置为铃声?

mp3一般放在E:\Sounds\Digital\里,方便直接在情景模式 设置为铃声 ,
也可以在播放MP3的时候停止,在选项里选择 设置为铃声 即可。

19、怎样更改网标Logo?怎样恢复原始网标Logo呢?

答:所谓的网标就是网络运营商标志,也叫做Logo,就是打开手机时显示“中国移动”或“中国联通”的标志,Logo可以通过第三方软件来更改
(1):设置LOGO
  a.用SeleQ更换LOGO
  首先将LOGO图片(97*25像素)传至手机并保存.打开手机中的“SeleQ”,按选项(Options)--文件(File)--设置operator logo(Set as operator logo),按下后他会提示你将要重新启动手机,确定后,手机重新启动,启动后你会看到你的Logo已更换完毕!
  b.用sTools 更换LOGO
打开sTools,选择“制作服务商标志”这时你会看到你在手机内所储存的图片,选择后他会提醒你“电话需要重新启动应用设置,是否马上重新启动?”选择“确认”,电话重新启动后LOGO以更换完成。
  c.用logoman等其它软件完成 
(2):恢复默认的LOGO
  打开SeleQ等文件管理软件进入 C:\system\Apps,找到phone文件夹,按C键删掉该文件,重启手机后,logo即可恢复默认。如果之前没有改过Logo,在apps文件夹是没有phone这个文件夹的。

20、怎样设置邮箱和收发彩信啊?

答:邮箱设置:先开通GPRS,在消息里——选项——设置——电子邮件——信箱——定义,第一个选择你用的邮箱,是163的就写163邮箱,sina的就写sina邮箱
接入点:移动梦网GPRS,邮箱地址写上自己邮箱的地址就行了(如xxxxx@163.com)
邮件发送服务器:smtp.163(你是什么邮箱就写什么的).com
发送信息:立即发送
副本:否
签名:否
用户名:xxxxxx(你自己邮箱的)
密码:XXXX(你自己的)
接收服务器:pop.163.com
邮箱类型:pop3
安全保护:关
安全登陆:开(邮箱的接收和发送服务器可以要到这个邮箱的网站上去查)。
彩信设置:行货不用设置,先拨打1860开通GPRS,在信息——选项——设置——彩信,使用的接入点中国移动彩信,彩信接收始终打开,当收到信息时立即提取,再进功能能表——工具——设置——连接设置——接入点——中国移动彩信,连接名称:中国移动彩信(GPRS);数据承载方式: GPRS;接入点名称:CMWAP;用户名:无;提示输入密码:否;密码:(不用设置);鉴定:普通;主页:http://mmsc.monternet.com/;以下是高级选项:代理服务器:10.0.0.172;端口:80 。
或者进入诺基亚官方网站进行空中设置
http://www.nokia.com.cn/cn/support/setup/setting.shtml
还可以利用Ucmail进行收发邮件,支持CMWAP

来自:易虎论坛

21、为什么很多视频不能直接在手机上播放?

答:一般来说直接从网上或电脑上未经处理过的视频文件传到手机上播放都不会是很正常的,需要经过在PC上通过一些转换软件制作成手机支持的规格的影片再传到手机上通过播放器播放就可以了;原机带的有RealPlayer播放器,能播放RM和3GP格式的影片,需要分辨率为176*144,第三方软件如Smartmovie/DVDPlayer可以全屏播放avi格式的影片,分辨率208*176,PVplayer全屏播放mp4和3gp格式的影片,Mobiclip全屏播放mo格式的影片等。

22、什么是单声道?我的手机是不是单声道,如何才能变成立体声?

单声道是比较原始的声音复制形式,当通过两个扬声器回放单声道信息的时候,我们可以明显感觉到声音是从两个音箱中间传递到我们耳朵里的。这种声音回放技术缺乏位置感。单声道缺乏对声音的位置定位,而立体声技术则彻底改变了这一状况。声音在录制过程中被分配到两个独立的声道,从而达到了很好的声音定位效果。这种技术在音乐欣赏中显得尤为有用,听众可以清晰地分辨出各种乐器来自的方向,从而使音乐更富想象力,更加接近于临场感受。
S60手机中NG/6630/6680/6681/N70等是立体声的,其他都为单声道,软件解码。如果需要听立体声mp3,可以通过I tech系列蓝牙耳机实现。
有FM的S60手机,FM为立体声。

23、我的电脑为什么无法安装PC套件啊?

答:PC的操作系统要求必须是Win2000带SP3或以上,WinXP带SP1或以上补丁的才可以安装PC套件,其他操作系统或不带SP补丁的均无法安装。

24、可以用以前的NOKIA充电器充电吗?

答:大部分是可以的,只要充电器的接口相符合就可以了,以前的充电器型号有ACP-7、ACP-8等,仅仅是充电器电流不同,电压范围都是差不多的,ACP-7C是335毫安,ACP-8应该是600毫安左右吧,ACP-12是800毫安的,充电时间大大缩短了,用ACP-8的一般得用4~5个小时,而用ACP-12的一般仅要用2个小时左右就可以充满了。

来自:易虎论坛

25、为什么我的来电不能显示人名呢?

答:很多NOKIA的S60机器有一个设计,需要将SIM卡中的电话簿全部复制到手机存储的名片夹中,才能在来电时正常显示人名的,复制SIM卡电话簿的方法是:打开名片夹——选项——SIM卡电话簿——选项——标记全部,然后复制到名片夹即可。
如果还不显示某个人名,估计是有重复人名了

26、NOKIA智能手机怎样打开后台运行软件?

答:在待机画面下按住功能键2秒以上会出现后台运行的程序,按C键可将其关闭,也可安装第三方软件AppMan/Sysman强制关闭某个正在运行的程序。

27、我的手机里的日历容量越来越大,有什么解决方法?

答:日历只要使用就会有垃圾文件产生,而且越用越大,打开SeleQ软件,C:——system——data——calendar,按C键删即可,日历正常情况下容量是365B,还有名片夹只要修改也会自动变大的。

28、新买的手机第一次充电要充满12个小时吗?

答:一般来说新电池充12个小时的说法,对于现在来说已经无所谓了,新买的机器,电池在之前存放有一段时间了,其化学成分部分进入“睡眠”状态,需要若干次的充电来对其电池效应激活,其实激不激活都可以的,因为和以前的镍氢电池不一样了,没有电池记忆效应,现在大多都应该是锂离子电池,如果放置长时间不用的话,会有锂离子睡眠的现象,需要通过激活来释放全部的锂离子,不过只要一但使用就可以激活的,新电池和普通电池一样边用边充也是可以慢慢激活的,所以大可不必听别人所说的头三次充满12个小时的说法,正常使用就可以了。

来自:易虎论坛

29、S60手机有哪些内部指令么?

答:
*#7370925538#电子钱包初始化
*#7780 #恢复手机出厂设置 (原始密码12345)
*#7370# 格式化手机(原始密码12345)
*#0000#看软件版本号
*#06#看手机IMEI号
*#2820#蓝牙设备序列号
*#92702689# 6630/6681/6680/6682等Symbian OS 8.0a以上机器
30、为什么SIS,JAR的后缀文件无法用蓝牙发送啊?

答:很多NOKIA的S60机器通过蓝牙发送SIS格式等文件时因为NOKIA的版权保护政策,SIS、Jar、MIDI等文件格式将无法随意发送,只有通过文件管理器软件将之改名后才能通过蓝牙发送出去,如FileMan软件更改其后缀格式后发送出去,收到后再改回来即可正常使用了。

31、为什么我在彩信中插入不了铃声,应该怎么设置啊?

答:彩信插入格式只能支持AMR格式的,也是因为NOKIA的版权保护政策。

32、那个笔形键是干什么用的啊?

答:(1)在写消息或文档编辑时,笔型键可以切换输入法;
  (2)按住笔型键不放,用方向键把某段文字拖成蓝色,再按左功能键可以复制文字,再到别的地方按住笔型键再按右功能键可以粘贴文字;
  (3)还有安装了某些第三方软件后,按住笔型键可以完成别的功能,如截图等;
  (4)在批量有选择删除短信、名片或其他文件时,按住笔型键再按方向键可以标记文件。
(5)在打开信息时,笔形键+C键可以直接把信息保存到记事本

来自:易虎论坛

33、我装了某个软件,打开都是口口口口这是怎么回事啊?

答:因为这个软件调用的字体并不存在于你的手机,需要字库的支持,所以你可以根据自己的手机型号,搜索适合自己的字库安装即可

34、NG游戏的安装和删除方法是怎样的啊?

答:安装方法 :
(1)BLZ版
  ① 先要安装一个软件安装破解程序(blzinstapp.SIS)
  ② 将得到的游戏文件 *.BLZ 放在你的MMC卡根目录上 如 (E:
gage_blz_Puzzle Bobble VS)
  ③ 然后用已安装好的blzinstapp软件安装游戏。
④ 有些文件比较大安装时比较慢,安装完后就可以玩了。
现在BLZ版本的NG游戏已经很少了。
  (2)复制版
直接复制system文件夹到卡的根目录即可
(3)部分NG游戏已经打包为sis文件,直接安装即可
删除方法:
N-GAGE游戏安装以后,习惯了sis游戏有反安装程序的朋友不知道该如何正确删除机器中的N-GAGE游戏,其实复制版本的游戏要删除都不难,对应复制过来的内容,删除对应的文件夹即可,N-GAGE游戏会在system\apps下和system\libs下有文件存在,一般来说删除apps下的文件夹即可,libs下的文件比较多,有的游戏没有文件在此文件夹,而有很多是共享的,要注意其他游戏是否需要才能删除,或者不用删除此文件夹的文件都可以,因为文件本身也不大。
\libs\GAMECOMMS.DLL
\libs\GAMEUTILS.DLL
这两个文件是比较基本的共享文件,很多游戏都需要,千万不要删除!
删除N-GAGE游戏请用读卡器,使用手机删除很大的游戏会导致手机假死现象。
sis安装版等同于一般sis游戏,可在程序管理删除

来自:易虎论坛

35、谁能教教我*.jad的游戏怎么装啊?

答:Java游戏可能会有两个文件,就是*.jar和*.jad,其中*.jad文件是对*.jar的描述引导文件,在S40的机器上必须将jar和jad都安装才可以运行的,而在S60上安装就不要jad了,只要安装*.jar文件就可以了,*.jad这个文件可以直接删除不要。

36、怎么才可以让手机支持JAR的游戏啊?虽然手机本身支持,可是装了JAR的游戏却不能玩的?

答:(1)可能是MIDP2.0的java软件,在MIDP1.0手机上无法运行
(2)可能是你使用了中文名称的安装文件,请使用纯英文作为安装文件名,再次安装即可

Labels:

Symbian OS内存管理介绍


Symbian OS内存管理介绍


在Symbain OS中内存管理的主要任务是:如何为程序分配内存以及如何在程序的内部分配内存。
Symbian OS 程序最根本和基础的东西就是内存,作为一个有限的资源,必须小心细致地处理,特别是当有错误或异常发生的时候。正是由于这样的原因,在支持清理机制的API中,异常处理和内存管理几乎是绑在一起的。
Uikon核心框架使用这些支持清理机制的API来管理内存,使GUI程序的基础架构具有良好的性能和表现。GUI程序还支持异常情况下内存清理,以及调试模式下的内存泄露检测。

一、Symbian OS的清理机制(cleanup)
清理机制是Symbain OS 程序对于程序异常处理的一种特有方式。当异常发生时,清理机制将清理错误的内存区域。Symbian OS的清理策略和它所有类的基类CBase类有着密切关系。要了解Symbian OS清理机制就必须清楚以下三个概念:异常处理(exception handling)、清理栈(cleanup stack)以及通用清理项(general cleanup item)。

1、异常处理 (Exception Handling)
Symbian OS没有使用C++的try…catch异常处理方式,而是使用了它自己所特有的方式:leave。在Symbian OS中,异常以 leave 的形式出现,trap harness可以在程序中设置一个点,使程序发生leave时回跳到这个点上,宏TRAP和TRAPD 可以在程序中设置这个点。调用系统API User 类的一些静态函数可以触发Leave ,例如 User::Leave()方法,这就相当于主动地抛出异常,当然某些系统函数或是用户代码,也有可能发生leave。

2、清理栈(Cleanup Stack)
当 leave 发生时,任何分配了资源的heap内存,例如通过new()方法创建的对象,他们将被孤立,因为leave一旦发生已指向他们的指针就不存在了,这样就导致了内存泄漏。为了防止内存泄漏发生,程序就有要记录那些已经被创建的对象,如果程序运行发生leave,那么系统可以自动找到并清理他们所占用的内存。这些工作可以通过清理栈来完成。CleanupStack类是支持清理栈的一个类。GUI应用程序拥有一个由应用程序框架所提供的清理栈,其他的应用程序必须用CTrapCleanup 类自己构建一个清理栈。

3、通用清理项(General Cleanup Item)
在默认情况下,清理栈只处理那些 CBase-based 类(也就是它所处理的类必须是由 CBase类继承下来的)和那些untyped 类型对象(用一个简单的内存释放语句就可以释放的对象)。通用清理项(General Cleanup Item)使其他类型的对象也可以放到清理栈中。TCleanupItem类是支持通用清理项的一个类。

二、Symbian OS的内存分配
内存分配管理的目的在于 能够使Symbian OS 进程通过底层函数访问和操纵内存区域。绝大多数的客户端程序不需要直接使用这些函数,那些在进程间共享内存区域以及在一个进程的线程间共享内存区域的程序会使用这些底层函数来管理内存。这里有两个概念需要了解 chunk(块) 和 heap(堆)。
1、Chunk(块)
chunk 是一组线性相邻的内存地址在RAM 中的映射。进程创建以后,它的地址空间包括1到3个chunk:
(1)stack/heap chunk:这里包括了进程的主线程所要使用的stack 和 heap。所以这个chunk 通常是进程所必须的。
(2)code chunk:这个chunk 只有当进程被加载到RAM时才出现。
(3)data chunk:只有当进程拥有静态数据的时候才会有这个chunk。

当然,程序可以还创建额外的chunk。 一个全局的chunk可以被其他进程访问,这样就实现了大量内存的共享。RChunk 类提供了对chunk的支持。TFindChunk 类可以用来查找其他进程创建的全局chunk。

2、Heap(堆)
heap 通常用于显式的动态内存分配 。Symbian OS定义了C++中new操作符创建对象到当前线程的heap中。Heap的功能可以是:
•监控内存泄漏:对于一个GUI程序来说,这个是经常发生的。
•在同一进程的线程间进行共享。
•在单元一级上进行访问和操作。
RHeap类提供了对heap的支持。如果heap 是当前线程的 heap,那么使用等价系统静态方法API 的User 类 将更加方便。这些系统静态方法API 同样也提供了宏来管理内存,以防止内存泄漏。

三、进程和地址空间
Symbian OS 的程序可以包含若干进程,每个进程包含若干在概念上并发执行的线程。每一个用户进程都有他自己私有的地址空间。一个用户进程不可以直接访问另外一个用户进程的地址空间。进程包括若干线程,他们运行在进程的特权级。
Kernel 进程是一个比较特殊的进程,它的线程运行在超级访问者级别,这个进程通常包括两个线程。
Kernel server 线程:是一个原始的进程,在系统启动时就已经存在。它可以在heap执行核心函数请求的内存分配或重新分配。
null 线程:当系统中没有其他可运行的线程时这个线程就开始运行,null 线程使处理器处于空闲状态,减少耗电

线程的地址空间包括若干chunk,在刚创建的时候,进程只有一个线程和1到3个chunk。如果进程创建了新的线程,那么一个新的chunk将被创建被分配给这个线程。每一个chunk都包括一个了stack,如果线程没有共享当前heap,那么在chunk中也将包括heap。

四、Chunks(块)
Chunk 把RAM映射到一个连续的虚拟地址。一个chunk中包括了一个保留区(reserved region)和和委托区(committed region)。保留区是一个连续的虚地址区域,它的大小可能是整个chunk的大小。在委托区中存放了真正映射到RAM的地址。chunk的大小是可以被动态修改的,允许委托区也可以修改大小,他的范围是从0一直到保留区大小,是处理器页面大小的整数倍。这样,就允许进程获得更多的内存空间。通常,委托区起始地址位于保留区底部。另外还可以创建 double-ended chunk ,那么委托区将是保留区的任意连续子集,他的大小也是处理器页面大小的整数倍,这种Chunk的委托区可以有两个顶端和底端,并且它们的大小也是可变的。
在chunk创建时可以指定chunk的最大空间,保留区大小应该小于这个最大值。.尽管这样,如果保留区请求比当前chunk更大的空间,那么chunk可以被重新分配空间,以允许保留区扩大。保留区可以扩大到撑满整个chunk.。

Local chunks(本地 chunk)
如果一个chunk对于创建它的进程是私有的,不允许被其他用户进程访问,那么那么这个chunk就是本地chunk,本地chunk是没有名字的。

Global chunks(全局chunk)
如果一个chunk可以被其他进程访问,那么这个chunk就是全局chunk。全局chunk是有名字的,这样,进程可以根据chunk的名字来访问他们。当进程打开一个全局chunk的时候,他把chunk映射到自己的地址空间,这样就可以对chunk进行直接访问和数据共享了。如果已经知道了chunk的名称,那么使用 RChunk::OpenGlobal() 可以直接打开chunk.。如果只知道了chunk的部分名字,那么可以使用带 TFindChunk 型参数的 RChunk::Open()方法来打开chunk.。

五、Heaps(堆)

Each thread has a chunk which contains that thread's program stack. For the main thread of a process, this chunk also contains the thread's heap. A program's request for memory is allocated from this heap. For example, a code fragment such as:

每一个线程都有一个包含了自身程序栈(program stack)的chunk。.对于进程的主线程来说,这个chunk中同样也包含了线程heap。程序对于内存的请求都是从这个heap的地址空间来分配的,例如有以下代码:

CArrayFixFlat<...>* fixflat;
...
fixflat = new (ELeave) CArrayFixFlat<...>(3);

程序请求了heap中部分的内存地址,并把地址返回给调用者。请求heap中的内存必须是显式的,同样,释放这些内存时也必须进行显式调用。

Structure of a heap(heap 结构)
heap包括两个单元列表。一个是已经分配的内存单元列表,一个是还未分配的内存单元列表。两个列表都在heap对象上。内存单元由单元头和单元体组成,单元体实际上就是一个内存区。单元头是在e32std.h 中定义的 RHeap::SCell 结构体,他是RHeap类的一部分。

如何共享heap
heap通常被同一个进程的线程所共享当一个线程创建时:
•它可以和父线程使用同一个heap。
•父线程同时为新线程创建一个新的heap。
•新线程使用系统为它创建的heap。
这里,只有第一和第二中情况可以认为是heap的共享。

Labels:

Symbian概述


Introduction


描述符(Descriptors)封装了字符串和二进制数据,用于替代C中的以NULL结尾的字符串。它的长度和数据都封装在了描述符中,Symbian API中用的都是描述符。如:


TPtrC ptr (KHelloWorld); CEikonEnv::Static()->InfoMsg(ptr);


Main Types of Descriptors


主要可以分为以下几类,其中带C的是不可修改的。



  • Abstract:(TDes、TDesC),其他描述符的基类,不能实例化,一般用作函数的参数。
  • Literal:(TLitC,_LIT()),用于存储literal string,一般使用后者。
  • Buffer:(TBuf,TBufC),数据存储于栈上,大小在编译时确定。
  • Heap:(HBufC),数据存储于堆上,大小在运行时确定。
  • Pointer:(TPtr,TPtrC),引用存储于类之外的数据

Descriptor Modification


描述符可以是可修改的和不可修改的,通常带C的都是不可修改的,不可修改的是可修改的基类。



  • Moidfiable:提供了访问和修改数据的API,如TBuf
  • Non-Modifiable:数据只可以被访问,不可修改。但是通过Des()函数可返回一个可修改的指针

Descriptor Width


在描述符类后加上8或者16影响了存储在描述符中的数据的宽度,默认是16位的,处理二进制或ASCII时采用8位。



  • 8位:(TDesC8),用于二进制数据或者ASCII字符串
  • 16位:(TDesC16),默认,Unicode

下面开始对上述5类描述符进行详细介绍,首先看一下类继承关系



这里显示的是8位的,16位默认的类继承关系与此一致

Abstract Descriptors


除Literal外的所有描述符的基类,提供了基本的接口和基础功能。他们本身不能实例化,一般用作函数参数。


TDesC:提供了比较、复制、搜索、提取部分字符串的函数。


TInt TDesCUtil::SumLengths(const TDesc& aDesC1, const TDesc& aDesC2)
{
return aDesC1.Length() + aDesC2.Length();
}


TDes:继承自TDesC,添加了许多用于修改数据的函数。其最大长度是描述符被创建时确定的。


TInt TDesCUtil::AppendL(TDesc& aTarget, const TDesc& aDesC)
{
TInt sumLen = aTarget.Length() + aDesC.Length();
if (aTarget.MaxLength() < sumLen)
{
User::Leave(KErrOverflow);
}
aTarget.AppendL(aDesC);
}


Literal Descriptors


提供了一种将字符串放在只读存储空间中的机制(实际存放在程序的数据区,而不是真的在ROM中)。一般不采用TLitC而直接采用_LIT()宏。 _LIT(KHelloWorld, "Hello World!");


通过()操作符可以得到 const TDesC&。 TInt length = KHelloWorld().Length();


在函数参数为const TDesC&可以直接使用KHelloWorld。iLabel->SetTextL(KHelloWorld);


Buffer Descriptors


将数据作为本身的一部分存储在stack上,他们的最大长度是在编译时确定的。


TBuf<16> helloWorld = KHelloWorld;
TInt len = KHelloWorld().Length();
helloWorld[len-1]='?';


在内存中如下所示:



TBufC的用法如下:


_LIT(KHelloWorld, "Hello World");
const TInt maxBuf = 32;
TBufC<maxBuf> buf;
TInt currentLen = buf.Length(); // == 0
buf = KHelloWorld;
currentLen = buf.Length(); // == 11
TText ch = buf[2]; // == 'l'


TBuf的用法如下:


const TInt bufLen = 6;
TUInt8 objType = 1;
TUInt8 objId = 1;
TUInt8 xCoord = 128;
TUInt8 yCoord = 192;
....
TBuf8<bufLen> buf;
buf.Append(objType);
buf.Append(objId);
...
//we can now do something with the buffer such as writting it to a binary file or send via socket.


Pointer Descriptor


用于引用存储在其他地方的数据,如:


const unsigned char KBuffer[ ] = {0x00, 0x33, 0x66, 0x99, 0xbb, 0xff};
TPtrC8 bufferPtr( KBuffer, sizeof(KBuffer));
iSocket.Write(bufferPtr, iStatus);


在内存中如下所示:



TPtr的用法:


_LIT(KHelloWorld, "Hello World");
const TInt maxBuf = 32;
TBufC<maxBuf> buf;
buf = KHelloWorld;
TPtr ptr = buf.Des();
ptr[7] = 'a'; ptr[8] = 'l'; ptr[9] = 'e'; ptr[10] = 's';
CEikonEnv::Static()->InfoMsg(ptr); // "Hello Wales"


Heap Descriptors


动态在堆(heap)上分配,通过HBufC的API,数据可以被set和reset,但是不能被修改。如:


HBufC* heapBuf = HBufC::NewL(KHelloWorld().Length());
*heapBuf = KHelloWorld();
delete heapBuf;


在内存中的情况如下图所示:



HBufC通常在以下几种情况下使用:



  • 在运行时从资源文件中加载字符串
  • 从用户界面中接收用户输入的字符串
  • 从应用程序引擎中接收字符串,如contacts database中的名字

对HBufC中的内容进行修改:


_LIT(KHello, "Hello!");
_LIT(KWorld, "World!");
HBufC* heapBuf = HBufC::NewL(KHello().Length());
*heapBuf = KHello; //buf holds "Hello!"


heapBuf = heapBuf->ReAllocL(KHello().Length() + KWorld().Length());
CleanupStack::PushL(heapBuf);


TPtr ptr (heapBuf->Des()); //DON'T use TPtr ptr = heapBuf->Des(); this will set maxlen to 6 but not 12...
ptr[KHello().Length() - 1] = ' ';
ptr += KWorld;
iTopLabel -> SetTextL(ptr);
CleanupStack::PopAndDestroy();
DrawNow();


下面介绍Descriptors的具体用法:


Non-Modifying Methods


Length(),Size(),Left(),Right(),Mid(),Compare(),Locate(),LocateReverse (),Find(),Match()等。以下代码示例描述了如何在一个descriptor中找到<>中的内容,如果不存在,返回整个字符 串:


static const TUint KAddressStartChar = '<';
static const TUint KAddressEndChar = '>';


TPtrC ExtractAddressNumber( const TDesC& aAddressString)
{
TInt addrStart = aAddressString.Locate(KAddressStartChar ) + 1;
TInt addrEnd = aAddressString.LocateReverse(KAddressEndChar ) ;
if ((addrStart == KErrNotFound) (addrEnd == KErrNotFound) (addrStart >= addrEnd) )
{
addrStart = 0;
addEnd = aAddressString.Length();
}
return (aAddressString.Mid(addrStart, (addrEnd - addrStart) ) );
}


Modifying Methods


Zero(),Copy(),Num(),Format(),Insert(),Replace(),Delete(),Append(),Trim()等。代码示例:


_LIT(KText, "Hello World!");
_LIT(KNewText, "New Text");
_LIT(KReplaced, "Replaced");


TBuf<16> buf1(KText);
buf1.Delete(6, 6); // length is now 6, leaving "Hello" in the buffer


TBuf<16> buf2(KNewText);
buf2.Copy(KReplaced); // buf2 now contains "Replaced"
buf2.Append(KNewText); //buf2 now contains "Replaced New Text"


buf2.Delete(99, 1); //Will Cause a PANIC!!!


Descriptors in Method Declarations



  • 在函数参数中尽量使用基类
  • 使用中性的描述符,一般情况下使用TDesC而不是TDesC8或者TDesC16
  • 当描述符内容不应该改变时,使用const修饰符
  • 经典用法:void SetText(const TDesC& aText); TPtrC Text() const;

Character Conversions


CCnvCharacterSetConverter类提供了在Unicode和其他字符集编码之间转换的方法。


ASCII本来就是Unicode的一个子集,无须使用该类。和Unicode之间的转换方法如下所示:


TBuf16<64> UnicodeBuf;
_LIT8(KAsciiStr, "Hello");
UnicodeBuf.Copy(KAsciiStr);


Unicode和拉丁语系之间的转化可使用如下的代码:


TBuf8<64> Latin1Buf;
_LIT16(KUnicodeStr1, "hello");
_LIT16(KUnicodeStr2, "I have got 10\x20AC."); //\x20AC is a euro
Latin1Buf.Copy(KUnicodeStr1); //OK
Latin1Buf.Copy(KUnicdoeStr2); //Not as you wanted.

Labels:

Symbian 基本数据类型及命名规范


Basic Types
在Symbian中,很多C++基本类型都被重新定义了,最好使用Symbian的,理由如下:

所有Symbian API都是用的Symbianc重定义的
将来Symbian OS由32位转为64位时,支持性更好
这本身就是Symbian C++ Coding Standards所要求的

Integers
typedef signed int TInt; C++中的signed int,32位,基本用法类似。


typedef unsigned int TUint; 一般用于计数器(Counter)或者标记(Flags)。

其他Int类型:TInt64, TInt32, TInt16,TInt8; 同时有一份TUint的版本。

Text
text类型在Symbian编程中基本不用,而一般采用描述符(descriptor)。TText默认是16位的。

Boolean
typedef int TBool; 有两个枚举值:ETrue和EFalse。TBool变量最好不要直接和ETure和EFalse比较。如下:

TBool flag = ETrue;
if (flag) // if (!flag)
{
flag = EFalse;
}


Floating Point
对浮点数的支持视处理器而定,如果没有FPU,效率非常低,所以最好是不要用浮点数。 如果一定要用,尽量转化为整数操作。


typedef float TReal32; typedef double TReal64; typedef double TReal;

TAny
typedef void TAny;

TAny一般只用作指针,其他情况下用void比较好。


TAny* MyFunction(); void MyOtherFn();

TAny* 在很多Symbian API中都用到了,如:

static TUint8* Copy( TAny* aTrg, const TAny* aSrc, TInt aLength);

Enumerations
enum TState {EOff, Eon, EInit};

Enumeration类型应该以T开头,而枚举值应该以E开头。


TState state = GetState();
if (state == EOn)
{
//Do something here
}

Coding Conventions

T类:只包含值,而不包含指针以及外部的资源,在栈上分配空间。

TVersion osVersion = User::Version();


C类:所有需要分配内存的类都必须从CBase继承并且以C开头。

class CExample : public CBase
{
private:
CDesCArrayFlat* iArray;
}

CExample* example = new (ELeave) CExample;

R类:包含指向某个资源的handler。

RTimer timer;
timer.CreateLocal();

M类:定义一个接口,一般只包含纯虚函数,不包含成员数据,减少类之间的依赖,用来接受回调消息。

class MEikStatusPaneObserver
{
public:
virtual void HandleStatusPaneSizeChange() = 0;
}

任何实现MEikStatusPaneObserver接口的类都必须实现HandleStatusPaneSizeChange()函数。

Variable Naming Conventions
成员变量以“i”开头
参数以“a”开头
动态变量随便,以小写字母开头
常量以“K”开头
尽量不要使用全局变量,不能使用全局静态变量。
Functions
函数以大写字母开头,如AddFileNameL();
以D结尾表示deletion of an object
以L结尾表示函数可能leave
以C结尾表示一个item被放到cleanup stack
Casting
Casting用于在类(classes)和类型(types)之间作转化,Symbian中仍然可以使用C中语法。


dynamic_cast:不支持,Symbian中没有RTTI。

static_cast:把一个基类转化为一个继承类。

TInt intValue = 0xff;
TUint8 byteValue = static_cast(intValue);

reinterpret_cast:把一个指针类型转化为另外一个指针类型,如integer转化为point类型或者相反。

TUint32 fourBytes = 0;
TUint8* bytePtr = reinterpret_cast (&fourBytes);
bytePtr++;
*bytePtr = 0xFF;

const_cast:移除

Labels:

Symbian开发学习笔记之一


Symbian中的应用程序通常分为两个部分,engine和UI,如此的划分增加了可维护性和灵活性,engine就好象是程序的核心,它主要处理运算和数据,而UI(应该是User Interface)主要处理数据的显示和所有行为(操作行为应该是)。

engine不谈,它是程序起作用的灵魂,这个是因程序而异的,我们来看应用程序外观,它可以分为三种体系结构:
一、传统的symbianOS控制体系结构
二、基于对话框的体系结构
三、视图体系结构

看看好象跟MFC搞的似的,也有个View和Dialog,不过也是Symbian就是用C++写的,面向对象特性非常好。

运用什么样的界面取决于程序和界面布局的需要,就不多说了。只是不管你使用哪种,都是从一个基类继承而来的,就好象是CView一样。

[传统SymbianOS应用程序的体系结构]
传统意义上,SymbianOS应用程序是在CCoeControl类的基础上派生出我们自己的view controls,这些都存放在应用程序的control stack中,也就是我们应用程序的视图。这些controls会根据应用程序的需要来创建释放或显示隐藏,以产生相应的操作。

[Dialog体系结构]
如果主体应用是对话框,那我们更应该使用这样的体系结构,使用dialogs的好处是我们光可以靠改变resource文件来修改内容和布局,而不需要重新编译那c++代码。

注意,如果不小心规划,那嵌套的对话框将耗去大量的堆栈空间。

另外,如果dialog体系结构被用于主要视图,那建议讲其设计为非模态对话框。(它不垄断用户的输入,用户打开非模态对话框后,仍然可以与其它界面进行交互。)如果你要生成一个主界面对话框,要求是满屏,并提供多页设计,那应该包括如下features:
RESOURCE DIALOG r_dlgapp_main_dialog
{
flags = EEikDialogFlagNoDrag | EEikDialogFlagNoTitleBar |
EEikDialogFlagFillAppClientRect |
EEikDialogFlagCbaButtons | EEikDialogFlagModelss;

buttons = r_dlgapp_softkeys_options_home;
pages = r_dlgapp_main_pages;
}

如果要创建一个对话框应该如下:
void CDlgappAppUi::ConstructL()
{
BaseConstructL();
iAppView = new(ELeave) CDlgAppMainView;
iAppView->ExecuteLD(R_DLGAPP_MAIN_DIALOG);
AddToStackL(iAppView);
}

ExecuteLD()在调用后立即返回,并且对话框必须要加到control stack中——使用AddToStack函数,因为非模态对话框不会自己处理这些。

[View体系结构]
使用view的应用程序每次只能有一个活动的view,当另一个view要激活时,当前的view就要被释放。当一个view被释放后,所以的菜单,对话框以及包含的应用都将被关闭。
每个view都被当作一个应用UI对待,它必须提供一个Id()函数以便为系统所标识,它也要重载DoActivateL(),DoDeactivate(),HandleForegroundEventL(),HandlCommandL()和HandleStatusPaneSizeChange()函数以处理各种事件。

下面一个个的看
DoActivateL()
当客户端要求你的view激活时,它就要被调用。client可能发送消息参数给你的view,如果你的view已经是激活了,那只有当client明确要求再次激活时才被调用,所以你的DoActivateL()实现得应付这种情况,ie已经激活了view。如果你不打算显示view或者你的view不想处理任何消息,那一个简单的检查和return即可。

DoDeactive()
这个函数当你的view被注销时调用,view被注销时通常有两种情况:一是你的应用程序要退出了,二是相同程序里另一个view要被激活。这个函数很重要,咱们可不能忘记了:)

HandleForegroundEventL()
这个函数主要是在你的view被激活时调用(即在DoActivateL()和DoDeactivate()之间被调用)。当你的view在前台时,它将是HanleForegroundEvent(ETrue),当你的view移出前台时,它将为HandleForegroundEvent(EFalse),只有当前台状态确实改变时这个函数才会被调用。

HandleCommandL()
当view菜单产生一个命令后本函数将被调用。

HandleStatusPaneSizeChange()
当client的尺寸由于status pane而改变时,本函数被调用了就。

下面是一个view在接受事件的典型调用顺序
1.DoActivateL()
2.HandleForegroundEventL(ETrue)
3.HandleForegroundEventL(EFalse)
4.DoDeactivate()

其中一对HandleForegrounEventL在view被激活的过程中会发生多次调用。

而DoActivateL()在DoDeactivate()被调用前可能会被多次调用。

View Resources
如果你要使用view来显示pages,那唯一的途径是创建出自己的AVKON_VIEW资源,里面有自己的CBA和菜单,把这个资源的id传递给view的BaseContructL()函数即可。

RESOURCE AVKON_VIEW r_viewapp_view1
{
hotkeys = r_viewapp_hotkeys;
menubar = r_viewapp_view1_menubar;
cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
}
注意如果没有给定的menubar资源,那就会使用确省的系统menubar

Construction
下面这个例程是用的AppUI object's ConstructL来构造出view的,使用了AddView来登记,最后把第一个创建的view做为缺省的view了:

void CMyViewArchAppUi::ConstructL()
{
BaseConstructL();

CMyViewArchAppView1* view1 = new(ELeave) CMyViewArchAppView1;
CleanupStack::PushL(view1);
view1->ConstructL();
AddViewL(view1); //Add view1 to CAknAppUi; transfers ownership
CleanupStack::Pop();

CMyViewArchAppView2* view2 = new(ELeave) CMyViewArchAppView2;
AddViewL(View2); // transfer ownership to CAknAppUi
CleanupStack::Pop();

CMyViewArchAppView3* view3 = new(ELeave) CMyViewArchAppView3;
AddViewL(View2); // transfer ownership to CAknAppUi
CleanupStack::Pop();

SetDefaultViewL(*view1);

.......(more code)

要让view发挥作用(注意,一个view自身是没有绘图能力的),它必须拥有得到一个从CCoeControl派生的containers,譬如
class CMyViewArchAppView1Container: public CCoeControl, MCoeControlObserver

下面这个例程将展现编程者自己的CAknView派生类
class CMyViewArchAppView1: public CAknVIew
{
.....
private:
CMyViewArchAppView1Container* iVIew;
}

大家可以看出App里产生了View,View类中有我们必须的Container.

当前激活的view在HandleCommandL()处理命令,这些是自定义功能键和菜单所生成的命令。

void CMyAppView1::HandleCommandL(TInt aCommand)
{
switch (aCommand)
{
case EMyAppCmdSwitchView:
AppUi()->ActivateLocalViewL(KView2Id);
break;
case EAknSoftKeyOk:
{
......
break;
}
case EAknSoftKeyBack:
{
((MEikCommandObserver*)AppUi())->ProcessCommandL(EEikCmdExit);
break;
}
default:
AppUi()->HandleCommandL(aCommand);
break;
}
}

Local View Switching
如果你要切换view,你得提供view的UID
//Now switch the view to view2
iAvkonViewAppUi->ActivateLocalViewL(TUid::Uid(2));
事实上,每个view都有自己的菜单系统,如果你要使用它,应当在AVKON_VIEW资源结构中设置,前面已经讲过了。

而且不管怎么说,如果要使用系统菜单,它的内容在切换之前是一定要更新一次的。
//Switch to a new menu system for the new view
iEikonEnv->AppUiFactory()->MenuBar()->SetMenuTitleResourceId(R_MY_VIEW_ARCH_APP_VIEW2_MENU);
//Now swtich the view to view2

如果要进行远程的视图切换,那就要调用CCoeAppUi::ActivateViewL()函数,并传递了一个包含目标应用程序UID和目标视图UID的TVwsViewId

Leave recovery
Avkon视图体系结构在DoActivateL()退出时会有个自动的回复机制。系统会调用DoDeactivate()在当前view离去时,回复前一个view,并把用户带到之前他们所在的地方。如果程序并没有前一个view的存在,那它就会退出,如果程序前个view就是当前的view(也就是说他们是重激活的),则应用程序会试图恢复缺省的view.

说了这么多,那我们在什么情况下采用合适的体系结构那?下面的内容将会有所帮助。

使用传统的SymbianOS体系结构,你要花费大量的时间研究代码是怎么工作的,但大部分交互和错误处理的引擎代码都是现成,可以降低你的开发难度。

Do you have an acyclic graph shaped navigation structure?
如果你视图程序中的navigation能够as an acyclic gragh,那最好使用dialog体系结构。

Are all the application screens dialog like?
如果你的应用程序想使用对话框,那建议你使用dialog体系结构,注意如果要有一个选择列表,那最好写成包含在dialog中的选择列表。

Does the application have multiple views or modes, which deal with different sorts of data at the top level?
如果是这样,那最好使用传统或view体系结构。

Do external applications need to switch to different views of your application?
如果是采用view体系结构写的程序,那它一定支持多个不同的view,而且是外部程序能访问的。如果你从头开始写一个应用程序,那建议你使用view体系结构,

否则给我看看有没有现成的代码可利用,不要一味的傻写呵呵。注意,如果一个外部程序使用的显示页面是你的程序所提供的,那你应该在DLL中处理这个显示页,这个DLL应该是外部程序所能访问的。

Can all of the applications views be exited without loosing user data?
使用view体系的程序必须有能力处理因外部程序而引起的views的释放。如果程序不能自动的释放这些view,那就要考虑其他两种体系了,要么使用view体系as a message passing system,要么让app UI在传统体系中管理view。

Do external applications need complex interactions with the data in your app?
如果外部程序和你的程序有大量的数据交互,那你最好选择client/server系统。它将减小view的使用量。大量现有的复杂应用,如短信,web以及通讯录都使用这样的机制,这是个很好的构想,总比要重写他们要好:)

Is there only a single complex main view in the app?
如果是这种情况,那还是使用传统的体系。

<一些例子>
这里给出一些假象例子的解决方案。

App launcher
这种程序可以单独运行并且能切换到其他程序,它只有一个view ,并且不接受外部程序的访问,如果这样会中断它。这样的程序不需要消息的传递或外部程序需要的views.

Fast swap window
一个在运行时刻的弹出窗口,这是一个睡眠的弹出对话框其实,它没有状态。

Email app
电子邮件程序可以读或写电子邮件。这个程序有外部使用views,内部可切换的views,并能做中断操作。Notifier信息能告知程序显示一个新的信息给用户,所以该程序要有处理此请求的机制,即使在做其他事情时。编辑框可以做为其他程序的view显示,使用DLL形式,我们就可以做到外部程序的调用自如。SymbianOS的messaging程序就是一个client/server机制可以在其他程序中被调用。当然要实现内嵌在外部程序中有许多工作要做的。当你在写邮件时,很可能又收到新邮件的同志,这个时候新邮件是做为一个嵌套的对话框似的组件显示在里面的,注意,做这个工作时要特别依赖inter-application interaction model。

Contacts app
通讯录程序允许进行通讯录的显示、编辑和选择。选择后的结果可以做为其他程序所用。注意它不能因外部view的切换而中断。

通过一个外部程序可访问的dll,通讯录就可以被外部程序所访问。程序本身并不需要views,所以最好使用传统的体系结构编写,而用dialog应付所有的编辑窗口。

web browser
web浏览器可以做为单一的web上网工具,也可以内嵌在其他的文档中。web浏览器可以通过外部程序可以访问的dll来提供一个UI control,但并不给外部提供可用的全屏应用。它必须能够应付外界的访问,譬如说应付在点击mail连接后撰写电子邮件的过程。
主体程序主要是用传统的体系结构,也可以采用view体系来应付访问页面的需求。

Settings
我们要关心的是全局设置和特定应用程序的设置。他们不是一回事情。经管他们可能共享一个库,实际上他们互不相干。

设置程序并不需要为外部的访问做什么处理提供什么界面,因此他的编写很简单,用传统的或者基于dialog的体系都可以。而局部设置要注意必须小心对待外部可能出现的中断,并且他有可能做为一个模态dialog而处理。

Telephony app
电话号码簿程序并不提供外部view,但他必须要处理外部资源的请求。有时候直接用传统的体系去写即可,大部分的外部交互可以通过ETEL Server.

[应用程序的启动]
从CEikApplication派生的类CAknApplication,他有几个必须重载的函数:
PreDocContructL()
OpenIniFileLC(RFs& aFs)

PreDocConstructL,主要是处理已经构造好的应用程序实体是否正确准备好了。如果已经准备好了,那应用程序可以切换到实体上。注意,这个函数只检查非内嵌程序。

通常,ini文件并不被series60所支持,如果要处理,那就要强制性的调用CEikApplication::OpenIniFileC

[BASE CLASSES]

CAknDocument
这个类是做为应用程序文档的基类准备的。用这个函数访问文档可以不用初始化。这个是访问Avkon应用程序的比较好的途径。

CAknAppUi
所有的Avkon应用程序必须从这个类派生。
这个类支持下面几个特定应用函数:
KeySound support
Accessories for CBA and StatusPane
TextResolver-Avkon-specific error reporting from CAknAppUI::HandleError()
Avkon view architectrue integration
Control dumping - Debug feature

CAknViewAppUi
所有的视图结构必须由此派生。

Labels:

Symbian系统

Symbian是一个实时性、多任务的纯32位操作系统,具有功耗低、内存占用少等特点,非常适合手机等移动设备使用,经过不断完善,可以支持GPRS、蓝芽、SyncML、以及3G技术。最重要的是它是一个标准化的开放式平台,任何人都可以为支持Symbian的设备开发软件。与微软产品不同的是,Symbian将移动设备的通用技术,也就是操作系统的内核,与图形用户界面技术分开,能很好的适应不同方式输入的平台,也可以使厂商可以为自己的产品制作更加友好的操作界面,符合个性化的潮流,这也是用户能见到不同样子的symbian系统的主要原因。现在为这个平台开发的java程序已经开始在互联网上盛行。用户可以通过安装这些软件,扩展手机功能。
在Symbian发展阶段,出现了三个分支:分别是Crystal、Pearl和Quarz。前两个主要针对通讯器市场,也是出现在手机上最多的,是今后智能手机操作系统的主力军。第一款基于Symabian系统的手机是2000年上市的某款爱立信手机。而真正较为成熟的同时引起人们注意的则是2001年上市的诺基亚9210,它采用了Crystal分支的系统。而2002年推出的诺基亚7650与3650则是Symbian Pearl分系的机型,其中7650是第一款基于2.5G网的智能手机产品,他们都属于Symbian的6.0版本。索尼爱立信推出的一款机型也使用了Symbian的Pearl分支,版本已经发展到7.0,是专为3G网络而开发的,可以说代表了当今最强大的手机操作系统。此外,Symbian从6.0版本就开始支持外接存储设备,如MMC,CF卡等,这让它强大的扩展能力得以充分发挥,使存放更多的软件以及各种大容量的多媒体文件成为了可能。
Symbian按版本来分,继2005年二月Symbian推出一款新的手机操作系统软件OSv9.0,到目前为止已先后有了6.0、6.1、7.0、7.0s、8.0、9.0几种版本。1999年3月Symbian推出了Symbian5.0操作系统,它的主要内核集合了网络,无线文字,电子邮件,名片薄以及个人信息助理,同时还具有支持标准网络页面的浏览器,配合java语言的支持,使得Symbian可以运行小型的应用程序。不过这个版本采用的机型甚少,基本上与EPOC没有太多的差别。
Symbian 6.0则在5.0的基础上增加了,GPRS、WAP1.2浏览器以及蓝牙技术的支持,用户可以运行第三方基于C++和J2ME开发的程序。而Symbian 6.1则是和Symbian 6.0相比主要增加了对USB的支持。Symbian 6.0的主要特点是: 支持语音通话和数据通信 ,支持Bluetooth和WAP ,配备安全性功能(SSL,HTTPS,WTLS) ,采用16bit Unicode,支持多语言显示 ,采用“PersonalJava 3.0”和“JavaPhone 1.0” 。
Symbian 7.0则支持多模式和3G手机(专区),可以让制造商们可以面向全世界推出可以运行于所有网络之上的Symbian OS手机,而且可以不对代码进行重大改动的情况下就可以重新使用许多目前已有的软件应用。7.0包含一些新的通讯、消息、联网和应用开发技术,并对一些与安全和认证相关的功能进行了改进。Symbian OS 7.0的其他功能包括:支持灵活的用户界面,例如Nokia的Series 60;支持几种音频/图像格式和许多面向游戏开发人员的API;全力的加密和认证管理,基于安全通讯协议(包括HTTPS、WTLS和SSL)及认证的应用安装;和Over-the-air(OTA)SyncML同步支持。
2004年2月,Symbian在授权LG等公司的时候,发布了Symbian8 .0版本。该版本改善了实时系统性能,提高了原有操作系统的兼容能力。此外,Symbian OS 8.0的软件工具改进了远程接入控制系统功能,运用调节装置消除手机用户使用增值服务时会受到的干扰。这个系统包含了绝对现代化的多媒体和Java设备,支持多种标准,其中包括JSR118, CLDC1.1 (JSR139),MobileMedia (JSR135),3D图像数据(JSR184), JTWI 1.0 c(JSR185)。最后,新版OS还支持SDIO。
2005年二月,英国著名手机软件制造商Symbian推出一款新的手机操作系统软件OSv9.0,它支持更高像素数码相机与三维游戏动画。该操作系统软件对运行环境要求较高,目前运行在由英国芯片开发商ARM提供的快速处理器芯片,并且需要相关设计与其它工具的支持来帮助手机生产商在开发其它版本时能够节约时间和降低成本。该软件可以处理200万像素的数字图片,甚至能够向无线耳机传送立体声音乐,更可喜的是,它不需要同步软件就能够从PC上导出MP3文件。
Series60是智能手机中应用最广泛的系统版本。Series60系统还分为6.0 OS、7.0 OS和8.0 OS三个版本。区别Series60的最直观因素在于屏幕的分辨率,Series60支持的分辨率为176*208像素,但以后S60还会支持240*320像素、352*416像素等。S60是拥有最多第三方软件或游戏的界面。
识别Series80界面最简单的办法就是看手机是否支持全键盘,例如诺基亚高端系列的9210、9300甚至9500,都采用全键盘的。识别Series90的最简便方法是:会采用触摸屏幕,分辨率也高达640*320像素。Series90应该是手机游戏、娱乐的最强平台,但因为采用Series90界面的手机型号太少,第三方软件的支持很少,所以S60依旧是玩家首选。
S40或S60是指诺基亚手机的上层平台。S60都是智能手机,所用底层操作系统是Symbian。诺基亚128*128屏幕都是S40 1.0。而128*160是S40 2.0。
另外S40中,3100支持java MIDP 1.0,所以最大支持64KB的java;6230支持java MIDP 2.0,所以最大支持128KB的java40和60,包括90,还有以前的30,都是针对与nokia不同的操作系统而言40,是nokia自行研制的手机操作系统,面对于中低端客户,支持kjava的开发,其处理器效率不高,内存偏低,屏幕大小128*128。
S60,是基于Symbian 操作系统,也就是以前的epoc,其处理器为arm9,处理效率很高,内存颇大,屏幕大小为208*176同时支持kjava和C++的开发90,属于手持式设备,也是Symbian 操作系统但是功能强劲,等同于一个PDA了。
其实技术来上说,S40跟S60是区别在系统平台上,就好像WIN98跟WIN2000,但手机不像PC,屏幕大小的确是个关口,以致于平台不容易做到向下兼容,但有的游戏也同样做出不同版本来的。
当然啦,S40比S60不单单是屏幕上的差距,更大的是性能上的差距,一般来说,S60开发出来的游戏质量都比S40高好多,但可惜,S60比S40的机子又贵上了很多啊。

Labels: