发新话题
打印

[教程] [集中整理,手机入门,操作技巧,问题排除]NOKIA极限教程完美版

本主题由 zuklwz 于 2008-8-17 11:33 打开
2.3  控制台应用程序
通常,在系统组件、通信模块、应用程序引擎和其他独立功能单元的开发期间,可能需要一个简单的测试应用程序。这种“测试装置”允许在开发代码时运行并测试它们。
GUI应用程序通常并不是用于这种目的的最佳选择;如果只是进行测试,特别是只进行回归测试(可重复实现的功能测试),则使用GUI应用程序就显得大材小用。控制台应用程序通常是更好的选择,它们具有一个关键性的优点。它们是.exe文件而不是.app文件,因此不需要GUI库,从而模拟器和应用程序可以更快速地启动。
控制台应用程序在以下方面区别于GUI应用程序:
•        它们只提供文本输出—没有菜单、图标和对话框等。
•        控制台应用程序并不适合于部署到终端用户设备上—一般无法定位或启动它们。
•        它们必须提供自己的基本运行库对象,例如清除栈(Cleanup Stack)和活动规划器(Active Scheduler)—UI应用程序则必须通过派生这些对象的框架类获得它们。注意,通过检验控制台应用程序示例(HelloWorldCon)中的代码,可以了解如何创建这些对象。
•        控制台应用程序也没有应用程序信息文件(.aif)或资源文件(.rsc)。
因此,如果像许多开发人员一样更喜欢逐步创建并测试代码,则控制台应用程序的快速启动速度是一个重要的考虑因素。
控制台应用程序的关键缺点(除了简单的文本界面外)是在模拟器中一次只可以运行一个应用程序。这是因为,基于PC的Series 60模拟器(epoc.exe)是单一的进程,并且Symbian OS的.exe应用程序必须在自己的进程中运行。因此,控制台的.exe应用程序和eexe.obj链接在一起,这就会启动模拟器并将应用程序作为主进程运行。
2.3.1  Hello World控制台应用程序
本节中提供了一个示例控制台应用程序HelloWorldCon,在生成这个应用程序时,它由一个具有.exe文件扩展名的可执行文件组成。在Symbian OS中,这种可执行文件用于两个主要目的:作为没有任何用户界面的服务器;或者作为简单的测试装置,这种测试装置具有非常简单的、基于文本的界面。
注意,.HelloWorldCon.cpp文件中的项目代码非常简短,并且相对简单。它实现一个名叫doExampleL()的简单函数,从callExampleL()中调用该函数。在头文件CommonFramework.h中定义callExampleL()函数。作为Series 60 SDK的一部分提供这个头文件,这个头文件适合作为在一般性开发工作过程中使用、基于控制台的其他任何测试装置的基础。
.exe程序的主入口点是E32Main()。该函数建立内存泄漏宏、清除栈和捕获装置,用于处理callExample()函数中发生的任何异常。该函数创建一个文本控制台以及从CConsoleBase中派生而来的控制台类对象,并且调用doExampleL()。应该在doExampleL()函数中放置或调用测试代码。第3章中将解释TRAP装置和清除栈等概念。
2.3.2  生成和运行控制台应用程序
打开一个命令提示符,定位到SDK根目录中包含项目代码的文件夹(例如,\EMCCSoft\HelloWorldCon)。这个文件夹将包含3个文件:
•        HelloWorldCon.cpp                        —源文件
•        HelloWorldCon.mmp                        —项目定义文件
•        bld.inf                                        —组件描述文件
这个项目也需要和SDK一起提供的CommonFramework.h头文件。根据的SDK,该头文件将位于类似于如下文件夹中:

…\Epoc32Ex\Base\CommonFramework
或者

…\Epoc32Ex\Basics\CommonFramework
可以从命令提示符或IDE中生成并运行这个示例。为了创建abld.bat,可以输入:

bldmake bldfiles
为了编译和链接用于调试模拟器的项目,输入:

abld build wins udeb                                —对于Visual C++
abld build winsb udeb                                —对于Borland C++
abld build winscw udeb                        —对于CodeWarrior
然后,为了运行HelloWorldCon应用程序,定位到包含它的文件夹(例如…\Epoc32\release\
wins\udeb),并且在命令提示符中输入:

HelloWorldCon
另一种方式是,创建IDE项目文件(已经在第1章中介绍过),并且在IDE中加载和生成这个项目。为了运行控制台应用程序,可能必须指定可执行文件为HelloWorldCon.exe。Series 60模拟器启动,并且应用程序将立刻显示,如图2-4所示。
注意,只有在应用程序可用时,HelloWorldCon才会启动。它显示“Hello World”并且只是等待用户在PC上按下任意键。按下任意键将完成应用程序并关闭模拟器。
2.3.3  HelloWorldCon.mmp
控制台应用程序的项目定义文件(.mmp)具有一些和等价GUI应用程序相区别的关键之处。归纳如下:

TARGET                                HelloWorldCon.exe
TARGETTYPE                        exe
UID                                        0

SOURCEPATH                        .
SOURCE                                HelloWorldCon.cpp

USERINCLUDE                        .
USERINCLUDE                        \Epoc32ex\Basics\CommonFramework
SYSTEMINCLUDE                        \Epoc32\include

LIBRARY                                euser.lib
注意,在TARGET语句中将应用程序可执行文件的名称以及(特别是)它的扩展名(.exe)指定为HelloWorldCon.exe。TARGETTYPE是exe,并且UID行被设置为0,因为.exe应用程序不需要UID。UID行上的零值将取消显示生成工具的警告。然而,在安装时提供非零的UID具有另一个非常重要的效果—它防止.exe应用程序取代前面已经安装的另一个也具有UID零值的.exe应用程序。参阅本章后面标题为“.pkg文件格式”部分,从中了解更多相关细节。
LIBRARY语句中不需要任何GUI库;在这个非常简单的示例中只需要euser.lib。
2.3.4  HelloWorldCon模拟器可执行文件
在Series 60模拟器下,HelloWorldCon控制台应用程序由一个可执行文件组成:HelloWorldCon.exe。使用调试模拟器生成时,在\epoc32\release\wins\udeb文件夹中创建该文件,使用发布生成时,在\epoc32\release\wins\urel文件夹中创建该文件(实践中很少创建模拟器发布生成)。在模拟器下,这些位置是正确执行.exe文件的必要条件。
2.3.5  HelloWorldCon目标可执行文件
针对目标硬件设备生成的HelloWorldCon控制台应用程序由一个可执行文件组成:HelloWorldCon.exe。在PC上,针对armi发布生成,在\epoc32\release\armi\urel中创建该文件(若对于thumb发布生成,则在\epoc32\release\thumb\urel中创建该文件)。第1章已经解释了针对目标设备的ARM生成选项。
在目标设备上,.exe可执行文件按照约定位于\system\programs文件夹下面,但和.app程序不同的是,从理论上讲,可以从任何位置运行.exe可执行文件。问题在于,将.exe文件放到一个设备上,然后在Series 60设备上定位并运行这种类型的应用程序,这样做可能并不直观。在大多数系统上,目标设备的Messaging收件箱将识别到达消息附件中的Symbian OS可执行文件格式(.exe),并且可能出于安全原因而拒绝打开消息及其附件。
一般不会为终端用户提供用于安装的.exe应用程序,但作为开发人员,可能出于合理的理由而希望做这项工作。可以在.sis文件中提供.exe应用程序,但Series 60不会自动识别并显示.exe应用程序的图标,因此在运行控制台应用程序时仍然会遇到问题。有两种选择:
•        安装可执行文件,通过特殊的实用程序选择并运行该文件。
•        安装可执行文件,在安装过程中自动运行该文件。
在第一种选择中,提供了名叫Exelauncher的GUI实用程序来帮助解决这个问题。作为在线提供的示例材料的一部分提供这个应用程序,参见“前言”中的说明。
应该在安装文件(.sis)中将HelloWorldCon.exe应用程序打包,然后通过红外线或蓝牙将该应用程序从PC传送到设备,同时传送Exelauncher实用程序的.sis文件。读取这两条消息并安装这两个应用程序。找到Exelauncher图标并运行它。然后,将出现一些选项,用于选择并运行HelloWorldCon应用程序。为了让Exelauncher可以找到HelloWorldCon.exe文件,必须将其安装在目标设备上的c:\EMCC\Exes\中。
第二种选择具有一个缺点:它是一次性的操作,必须在每次运行应用程序时重复安装过程。安装过程期间运行应用程序的必要条件是,在.pkg安装包文件中的应用程序文件(.exe)名后面指定一个额外的参数(FR)。本章后面的“在安装期间运行可执行文件”部分演示了这一过程,而下一节将详细描述.sis文件的组成部分和使用。
我们提供了生成和运行HelloWorldCon项目所需的所有内容;包括所有的源代码、安装系统文件和实用程序Exelauncher。

   版权没有         盗版自由         任意传播        欢迎交流

TOP

2.4  Symbian安装系统
Symbian安装系统(SIS)提供了一种简单而一致的方法,将应用程序、数据或配置信息安装到基于Symbian OS的设备上。这个系统不是为模拟器上的软件安装而设计的。开发人员和终端用户安装打包在(.sis)文件中的组件,如果该文件来自于PC,则使用安装程序进行安装;如果该文件来自于Series 60设备,则使用实用程序Application Controller进行安装。
通过使用数字证书,Symbian安装系统允许用户在安装软件前标识软件供应商,从而可以验证安装文件自从创建以来有没有被篡改过。在某种环境中可以很容易地访问大量免费可下载软件,此时该功能特别重要,因为软件可能会感染病毒。证书生成器(makekeys.exe)可以创建公钥/私钥对。然后,可以选择通过文件生生成器(makesis.exe)创建具有数字签名的安装文件。SDK文档中详细描述了这个过程。请参阅“工具和实用程序”一节,并且参考“安装指南”和“安装参考”部分。
安装文件可以集成其他嵌入的安装文件。这种特性可用于将文件打包到可以作为完整集合安装和删除的逻辑组件中。例如,可以将共享库从使用它的应用程序中分离出来,放在单独的安装文件中。
大量选项可以提供给用户,从而在安装期间系统将根据用户的选择执行不同的动作。在安装和删除应用程序期间,可以安装不同的文件集、显示文本或运行自定义程序。这种工具一般用于在安装期间显示许可协议。用户也可以获得有关安装选项的提示,例如在何处安装组件,在何处接受用于验证创建者的安全证书,或者在何处选择特定的语言。
安装过程完成后,设备上还留有一个较小的“存根”.sis文件,用于根据需要控制应用程序的卸载。
对于本章中的示例和本书中的大多数项目,我们提供了相应的示例安装项目文件,用于在Series 60设备上安装示例应用程序。
2.4.1  SIS文件生成工具
和Series 60 SDK一起提供了两个工具,用于允许开发人员生成安装文件:
•        安装文件生成器(makesis.exe)根据包源文件(.pkg)中提供的规范创建安装文件。.pkg文件是文本文件,它包含应用程序或文件的安装信息。这是用于本章中描述的所有示例GUI应用程序的选项。
•        另一种选择是,使用和Series 60 SDK一起提供的sisar工具产生.sis文件。sisar将所有的应用程序文件打包到一个.sis文件中,从而易于在目标硬件上进行安装。该工具在具有.sisar文件扩展名的文件中存储安装项目的细节。可以将手工创建的.pkg文件导入到sisar实用程序中,但不可以将它们再次导出。此外,sisar可以导入由前面描述的aifbuilder工具生成的.aifb文件。

技巧:
对于创建简单的.sis文件,sisar是方便、易于使用的工具。然而,直到编写本书之时,使用.pkg源文件和makesis.exe实用程序更为灵活。最为重要的是,makesis方法允许使用Series 60平台UID码(本章后面将解释这一点),而sisar当前无法实现这一点。Makesis也允许对安装选项和过程进行细微的调整。
另一个SDK工具证书生成器(makesys.exe)可以创建私钥/公钥对,通过安装文件生成器(Installation File Generator)(makesis.exe),可以有选择地使用相应的密钥对安装文件进行数字签名。在安装期间,用户将得到即将安装未签名应用程序的警告。
可以从命令行中运行makesis和makesys,也可以在sisar中调用它们。也可以在命令中调用sisar生成.sis文件。
文本源文件(.pkg)指定可执行代码文件以及在设备上安装应用程序所需要的其他资源。一般使用文本编辑(或者在IDE中)手工创建必需的.pkg文件,然后使用makesis工具生成.sis文件。
使用sisar工具基本上无需解释即可明白,但它有自己的帮助机制,并且单独归档在Series 60 SDK中。注意,sisar依赖于JavaTM 2运行库,可以从
http://java.sun.com中获取该运行库。
2.4.2  .pkg文件的格式
HelloWorldCon示例项目有另一个版本,名叫HelloWorldLoc,这是本地化的另一个版本,用于显示如何提供适合于一些不同地区的应用程序安装包。安装期间将使用资源文件、标题文件、甚至是应用程序信息文件的适当语言版本。因此,可以定制应用程序的所有文本、应用程序名称甚至图标,用于满足每个支持地区的需求。这一小节首先介绍非本地化.pkg文件的语法,然后指出本地化版本中的主要区别。

;  Languages - Only English so the next line is optional
&EN

; Name/caption needed for each language,  caption file used if
supplied
; Name,  the app UID,  version,  minor version,  build & package
type
#{"HelloWorld"}, (0x101F6148) ,1,0,0,TYPE=SISAPP

;  Platform UID code required for recognition by a compatible
;  device at installation time
(0x101F6F88) ,0,0,0,  {"Series60ProductID"}

;  Four files to install
"\Epoc32\release\armi\urel\HelloWorld.aif"
"!: \system\apps\HelloWorld\HelloWorld. aif"

"\Epoc32 \release\armi\urel\HelloWorld. r01"
"!: \system\apps\HelloWorld\HelloWorld. rsc"

"\Epoc32\release\armi\urel\HelloWorld_caption.r01"  -
"! :\systemkapps\HelloWorld\HelloWorld_caption.rsc"
"\Epoc32 \release\armi\urel\HelloWorld.app"  -
"!: \systemkapps\HelloWorld\HelloWorld.app"

;  End of File
HelloWorld示例只有英语版本。如果希望支持其他的语言,必须在文件的顶部指定每一种语言。然后,剩余文件的语法必须提供针对每种语言/地区的选项—后面将使用HelloWorldLoc示例说明这一点。

;  Languages - Only English so the next line is optional
&EN        
包的头文件包含组件名(在这个示例中是应用程序名)、应用程序或组件的UID、主版本号和次版本号、生成号和包选项(SISAPP)—是否为应用程序安装、升级、补丁、系统选项等。

#{"HelloWorld"}, (0x101F6148),l,0,0,TYPE=SISAPP

技巧:
注意,.exe应用程序在它们的.mmp文件和.pkg文件中不需要包含应用程序UID(UID3)的值—对于用作测试和实验的.exe应用程序,相应的应用程序UID一般设置为0。然而,如果将要发布一个.exe(假设作为服务器),就需要提供一个UID值,从而拥有真正的惟一性。如果两个不同的.pkg文件中指定了相同的应用程序UID(0),则在安装新的.exe时将删除前面安装的.exe。
注意,在包文件中,需要按照如下方式包括Series 60平台标识码:

(0x101F6F88),0,0,0,  {"Series60ProductID"}
如果用户尝试在Series 60设备上安装不兼容的软件,则平台标识码(平台UID)将启用内置的系统机制发出警告。平台UID是分配好的32位数字,用于标识Series 60的特定版本或特殊设备—它与3个UID没有任何关系,这些UID与可执行文件或应用程序文档直接关联。
为了顺利安装软件,Series 60应用程序的安装包应该带有序列。如果没有找到平台UID序列,或者UID引用比终端中更新的平台版本,则用户将获得有关潜在冲突的通知。根据不同的产品,安装过程可能自动异常中止。如果允许安装过程继续,则很明显存在应用程序功能失效的风险。
基于Series 60平台第一个版本(0.9)的应用程序标识符是0x101F6F88(例如,早期的Nokia 7650设备就是基于Series 60的第一个版本)。指定这个值的应用程序安装包与Series 60平台0.9兼容,并且也有可能与Series 60平台后面的版本兼容。
针对Series 60 2.0引入了新的Series 60平台UID,也就是0x101f7960。应该在依赖于Series 60 2.0特性和API的应用程序中使用这个平台UID。早期版本的平台UID仍然可以获得支持,并且必须在计划运行于Series 60平台0.9、1.x、2.x等版本上的应用程序中使用它们。
可以在一个.pkg文件中定义多个Series 60平台UID,用于表示应用程序能够在其上运行的所有平台和设备。

参见:
参阅本章后面的“高级应用程序部署和生成指南”一节,了解平台UID更为完整的列表。
最后,列出了安装的每个应用程序组件。在本例中,这些组件为HelloWorld.aif、HelloWorld.r01、HelloWorld_caption.rsc和HelloWorld.app。注意,每一行的格式如下:首先是源文件名,后面跟上目标文件的位置和名称。
同样需要注意的是,在用作开发的PC上,应用程序组件(生成过程产生的结果)的文件位置将根据所使用Series 60平台版本的变化而改变。
SDK的1.x版本将.app文件和所有其他文件放在如下相对位置中:\Epoc32\release\armi\urel。
2.x版本的SDK生成(以及所有CodeWarrior生成)只将.app文件放在上面的位置中;其他所有文件(.r01、.aif、.mbm)放在如下相对位置中:\Epoc32\data\z\system\apps\appname。
使用AnsPhone示例项目作为说明,1.x版本的.pkg文件将是:

   版权没有         盗版自由         任意传播        欢迎交流

TOP

文章接上!!

"\epoc32 \release\armi\urel\AnsPhone.aif" -
"!: \ system\ apps \AnsPhone \AnsPhone. ai f"
"\epoc32 \ release\ armi \urel \AnsPhone. app" -
"!: \ sys t em\ apps \Aris Phone \Ans Phone. app"
"\epoc32 \release\armi\urel\AnsPhone. r01" -
"!: \system\apps\AnsPhone\AnsPhone. rsc"
" \ epoc32 \ release\armi \urel \AnsPhone. mbm" -
"!: \system\apps\AnsPhone\AnsPhone.mbm"
2.x版本(或CodeWarrior)的等价.pkg文件将包含:

"\epoc32 \data \ z \ system\ adps \AnsPhone \AnsPhone. ai f"  -
"!: \systemlapps\AnsPhone\AnsPhone.aif"
"\epoc32\release\armi\urel\AnsPhone.app"  -
"!: \system\apps\AnsPhone\AnsPhone.app"
"\ epoc 32 \ data \ z \ system\ apps \AnsPhone \Ans Phone. r 01"
"!: \system\apps\AnsPhone\AnsPhone, rsc"
"\ epoc 32 \ data \ z \ system\ apps \AnsPhone \Ans Phone. mbm"
"!: \system\apps\AnsPhone\AnsPhone .mbm"
注意,.pkg文件的1.x版本和2.x版本之间需要改变平台UID。
同样需要注意的是,在.pkg脚本中,源文件和目标文件的文件扩展名并不总是相同的。原因在于,可能存在可选的源文件,这一节后面的HelloWorldLoc本地化示例项目中说明了这一点。
为了允许用户选择在设备上的任意驱动器中安装应用程序(例如,在可移动存储卡上安装,而不选择在闪存上安装),通过一个“!”字符来指定驱动器名,这里给出的示例中说明了这一点。在安装期间,提示用户获得存储应用程序的可选驱动器列表。

技巧:
为了确保应用程序总是显示正确的图标,请按照提供示例中所显示的方式排列文件的顺序。特别需要注意的是,将.aif文件的名称放在.app文件的前面。
1.在安装期间运行可执行文件
为了使HelloWorld GUI应用程序可以在安装过程期间运行,需要在应用程序文件名和后面添加一个额外的参数,如下所示:

"\Epoc32 \release\armi\urel\HelloWorld.app" -
"!: \system\apps\HelloWorld\HelloWorld.app",  FR
或者,在HelloWorldCon控制台应用程序的情况中:

"\Epoc32 \release\ thumb\urel \HelloWorldCon ~ exe"
-" c: \EMCC\Exes \HelloWorldCon.exe",  FR
确保在安装.pkg文件中的应用程序之前安装其他所有的应用程序组件文件。
“FR”参数表示“文件运行(File Run)”。在安装过程期间,不要错误地认为应用程序已经再次关闭—应用程序仍然保持运行。安装过程启动应用程序,然后任务返回到自身,以完成剩余的安装过程,仅此而已。为每个示例项目提供了示例“文件运行”安装包文件(.pkg)。它们位于主项目文件夹下面的\install文件夹中,并且带有以FR结尾的文件名—例如,HelloWorldConFR.pkg。
2.多地区安装
示例应用程序的HelloWorldLoc版本支持3种可选地区:英国、法国和德国。将在\EMCCSoft\HelloWorldLoc\目录下面找到该项目(相对于Series 60 SDK的根目录)。
下面是HelloWorldLoc.pkg文件中和应用程序安装本地化相关的部分代码:

;  Languages - English,  French and German
&EN, FR, GE
注意这里如何指定支持的语言—指定为EN、FR和GE,这不同于在项目.MMP文件的LANG语句中使用的方法—指定为01、02和03。标识支持语言的这种差异似乎只是由于传统的习惯。.pkg文件的其他语言码在SDK文档中进行了说明,位于“包文件格式”下面。
包的头文件必须包含每种支持语言中的组件名。

; Name/caption for each language,  caption file is used if
supplied
# { "HelloWorldLoc" , "BonjourMondeLoc'' , "HalloWeltLoc" }, (0x101F614
9) , 1,0,0, TYPE=SISAPP
包文件(.pkg)的语法强制要求针对每种语言重复输入Series60ProductID字符串:

(0x101F6F88), 0, 0, 0,
{ "Series60ProductID", "Series60ProductID", "Series60ProductID" )
接下来,提供了3个地区特有的.aif文件列表,只安装其中一个.aif文件:

{
"\Epoc32\release\armi\urel\HelloWorldLoc .a01"
"\Epoc32\release\armi\urel\HelloWorldLoc.a02"
"\Epoc32\release\armi\urel\HelloWorldLoc.a03"
} -" !: \ system\apps\HelloWorldLockHelloWorldLoc.aif"
现在指定将要安装的应用程序名称。其他的应用程序组件可以有它们自己的代码行,或者使用嵌入的安装文件(.sis)来安装组件。查看后面的“多组件安装”了解更多细节。

"\Epoc32\release\armi\urel\HelloWorldLoc, app"
,, !: \system\apps\HelloWorldLoc\HelloWorldLoc ~ app"
接下来,提供了3个地区特有的资源文件列表,只安装其中一个资源文件:

{
"\Epoc32 \release\armi\urel\HelloWorldLoc. r01"
"\Epoc32\release\armi\urel\HelloWorldLoc. r02"
"\Epoc32 \releaselarmi\urel\Hel loWorldLoc, r03"
}-" !: \system\apps\HelloWorldLoc\HelloWorldLoc. rsc"
最后,提供了3个地区特有的标题资源文件列表,同样,将只安装其中一个标题资源文件:

{
"\Epoc32\release\armi\urel\HelloWorldLoc_caption.r01"
"\Epoc32\release\armi\urel\HelloWorldLoc_caption. r02"
"\Epoc32 \release\armi\urel\HelloWorldLoc_caption. r03"
}-" !: \system\apps\HelloWorldLoc\HelloWorldLoc_caption.rsc"
;  End of File
3.多组件安装
有时,使用嵌入的安装文件(.sis)处理应用程序所需的组件安装可能会更好。通过如下的方式很容易实现这一点:

;  Embedded SIS file for components e.g.  DLLs
@"- -\- .\Engine\group\Engine.sis",  (0x101F6150)
@". -\..\Controls\group\Emccctrls.sis",  (0x101F6151)
注意,指定嵌入.sis文件名称的每一行都以@开头。相对于当前的应用程序位置,在引号中提供了.sis文件的路径和文件名。文件名和路径后面是应用程序或组件的UID3,作为主安装包的一部分包括这些应用程序或组件。
每个组件或是一个单独的项目,或者是组成主项目的一部分。每个组件都需要自己的.pkg(或.sisar)文件,用于生成对应的嵌入.sis文件。如果指定一个或多个嵌入.sis文件作为应用程序安装的一部分包括进来,则在删除嵌入组件的应用程序或组件时,这些嵌入的组件也将被删除(假设没有其他的组件与这些嵌入的组件相关)。
4.有条件的组件安装
有时必须决定在安装过程自身中需要哪些组件,或者决定哪些组件适合。在安装脚本中集成条件语句,本章后面将说明如何做这项工作,请参阅“高级部署和生成指南”一节中的“安装时的设备标识”小节。
2.4.3  生成SIS文件
为了生成HelloWorld.sis文件,打开命令提示符,定位到HelloWorld项目所在的文件夹,按照如下方式生成项目:

bldmake bldfiles
abld build armi urel
然后,改变到\install文件夹。输入如下命令生成.sis文件:

makesis HelloWorld.pkg
或者,为了生成自动运行的版本,使用如下命令:

makesis HelloWorldfr.pkg
注意,如果在项目中包括适当的.pkg文件,则Borland C++ BuilderX IDE可以在生成过程期间创建.sis文件。选择“项目 | 属性”菜单项,然后选择“Symbian设置”选项卡。将平台设置为适当的目标设备,将生成设置为urel,并且在生成项目时得到.sis文件。
为了在目标设备上运行应用程序,使用红外线或蓝牙连接将.sis文件传送到设备上。

   版权没有         盗版自由         任意传播        欢迎交流

TOP

2.5  额外的开发工具
Symbian OS SDK包括大量工具和实用程序;Series 60 SDK则提供了更多的工具。EMCC 软件公司也为公众提供了许多免费的额外工具和实用程序。这里列出的额外工具都是经常使用、非常有帮助、非常重要的工具,或者是在其他地方找不到很好的文档说明。本节也提供了如何获得这些额外工具的参考。
2.5.1  多位图和位图转换器Bmconv
位图提供了图片、图标和遮罩的像素模式,同时提供了用于填充显示区域的小画面以及画刷样式。为了优化位图性能,Symbian OS使用以Symbian OS的高度压缩格式包含多个位图的文件。作为和Series 60 SDK一起提供的工具,bmconv.exe接受一个或多个Windows位图(.bmp)文件作为输入,并且产生一个Symbian OS多位图文件(.mbm),针对有效的运行时加载进行了优化。

技巧:
如果需要查看bmconv命令的语法和选项,可以在命令提示符中输入bmconv。
针对文件中的每个位图,bmconv工具也产生一个带有符号定义(标识符)的头文件(.mbg)。这个产生的头文件位于SDK的\epoc32\include文件夹中。将这个头文件包含(#include)在C++代码中,这样就可以引用任何所需的任何位图。
存在两种类型的.mbm文件:加载到RAM中的文件存储位图文件和访问时不使用任何RAM的ROM映像位图文件—只有系统开发人员一般才会创建基于ROM的.mbm文件。
在转换过程期间,可以为转换的位图指定每像素的位数,并且可以指定这些位图是否应该是彩色或灰度。该程序也可以将Symbian OS多位图文件(.mbm)以Windows位图格式(.bmp)重新划分为组件位图文件。
并不总是需要直接使用bmconv工具产生专门用于特殊应用程序的位图文件。可以作为标准abld项目生成过程的一部分来执行所需位图的生成。可以在项目定义文件(.mmp)中指定.bmp文件列表。下一节将介绍项目定义文件(.mmp)语法中START BITMAP语句的示例。查看Series 60 SDK文档查以了解START BITMAP语法的更多细节。
多位图文件、颜色和调色板支持
在不同的产品之间,Series 60设备的硬件色彩功能可能存在区别。一般情况下,对于Series 60 1.x,显示屏能够产生最低4 096色(12位);对于Series 60 2.x,显示屏可以产生最高64K色(16位)。所有这些色彩位数可用于提供尽可能最佳的再现效果,例如,显示全色的JPEG照片。
一般在应用程序的.mmp文件中指定Symbian OS多位图(.mbm)文件的生成并设置目标色彩方案,如下所示:

START BITMAP myapp.mbm
HEADER
TARGETPATH        \system\ apps \MyApp
SOURCEPATH        . . \Data
SOURCE c8        MyPict.bmp                //256色
SOURCE c8        MyOtherPict.bmp         //256色
SOURCE 1        MyOtherPict_Mask.bmp        //黑白遮罩
END
完全重新生成项目时(一般从命令提示符中完成),bmconv将产生.mbm文件。可以根据喜好而直接从命令行中调用该文件。
可以指定12位色(4096或Color4k)或16位色(Color64k),不过,存在一个调色板,它带有256种(8位)颜色项,用于绘制用户界面图形,例如图标和窗口边界。使用这种调色板可以节省内存空间,同时确保不同产品之间一致的图形外观。
对于Series 60 SDK,bmconv实用程序已经做了改动,从而调用者可以有选择地指定用于转换中的目标调色板文件为参数。目标色彩模式不是Color256的位图不会受到影响。对于目标色彩模式为Color256的位图,则使用Series 60调色板进行转换—换句话说,颜色立方体中有216种色彩,同时有10种灰影(gray shade)。可以在SDK的根目录下面找到用作bmconv参数的调色板文件,具体位置是:\epoc32\include\ThirdPartyBitmap.pal。
该调色板中的色彩索引划分为下面几部分:
•        静态色彩(static color)—这部分包含通常称为Web安全色的216种色彩,同时带有另外10种灰色,共计226个索引。这些色彩是固定的,因此无论使用什么色彩方案,它们都保持相同。
•        方案色彩(scheme color)—保留有23个索引用于色彩方案。可以转换调色板这一部分中的RGB值,从而用户可以改变整体UI色彩方案,例如,从蓝色改变到绿色。这些索引用于应该遵循色彩方案的UI图形部分中。
•        通知色彩(notification color)—包括4种色彩,分别用于不同的注释(确认、信息、警告和错误注释)。
•        Series 60特有的编码标识色彩—用于识别计划与Series 60色彩调色板一起使用并支持色彩方案特性的位图。通过检查某些调色板索引的RGB值可以实现这一点。如果图像的值匹配预先定义值,则该图像被标识为Series 60特有的图像,并且产品中的调色板索引值将用于渲染该图像,而不是使用图像自身的调色板值。如果标识色彩索引的调色板项不匹配(或者使用的位图格式不同于索引的未压缩Windows位图),则使用图像的RGB值。
•        遮罩色(masking color)—保留一个索引(255)专门用于遮罩色。在遮罩中,这种索引值的像素将被渲染为透明色。
2.5.2  Series 60应用程序向导
本书中提供了大量示例项目,这些示例项目可用作任何新项目或应用程序的基础。
作为选择,可以使用各种IDE提供的向导工具来创建用于基本Series 60应用程序的项目。
1.Microsoft Visual C++ 6.0
如果正在使用Microsoft Visual C++ 6.0作为IDE,可以使用作为SDK一部分而提供的Series 60应用程序向导来创建新项目。它提供了一个简单而方便的方法,用于从Visual C++ IDE中生成基础应用程序框架。该向导将根据3种可选UI显示设计中的一种创建项目:基于对话框、Avkon视图切换、或传统的Symbian OS控件式应用程序体系结构。它将创建:
•        与大多数Symbian OS应用程序关联的4个基本类(App、AppUI、Document和View)的骨架代码和声明。
•        生成项目所需的所有生成文件和项目文件。
•        简单的资源文件和用作默认应用程序图标的位图。
•        在设备上安装应用程序所需的文件。
使用该向导非常简单,在Series 60 SDK中对它进行了很好的说明,因此这里不会对它的使用进行详细介绍。然而,它确实提供了一些选项来创建符合3种基本应用程序设计之一的项目。第4章将介绍这3种基本应用程序设计,因此推荐在使用向导之前阅读第4章。
2.Borland C++ BuilderX
如同第1章中所描述,通过将项目的bld.inf文件导入到IDE中,可以打开已有的Series 60项目。通过Object Gallery完成这一点。从菜单中选择“File | New”命令,然后选择“Import Symbian C++ Project”选项,以此来调用Object Gallery。在编写本书时,其他可以选择的选项是:
•        新Symbian GUI应用程序
•        新Symbian空项目
•        新Symbian DLL
•        新Symbian C++文件
•        新Symbian .H文件
•        新Symbian资源文件
•        新Symbian AIF向导
选择“新Symbian GUI应用程序”选项将创建Symbian项目的基本框架。不过,这一般是基于Uikon CEik-基类,而不是Series 60 GUI应用程序所需的CAkn-基类。
3.Metrowerks CodeWarrior
CodeWarrior可以根据提供的模板项目(称为stationery)创建新的项目。使用这种模板的方法是,选择“File | New…”命令,再从“Project”选项卡中选择“Symbian Stationery Wizard”。提供项目的名称并设置它的位置—使用“Set”选项进行浏览。选择开发商和正在使用的特定SDK版本。按下“Next”按钮并从C++复选框下面的下拉树型结构中选择需要的特定项目类型。然后,该向导将创建带有源文件和头文件的基本Series 60项目。
可以创建自己的stationery。同时一些获得许可的开发商也可能提供设备特有的stationery,作为获许可开发商的开发工具包和SDK的一部分。
2.5.3  其他SDK工具
Series 60 SDK为了方便开发者进行工作而提供了大量额外的工具和实用程序。查看SDK根目录下面的\Series60Tools文件夹,查找最新的可用工具和实用程序、它们的安装细节以及正确用法。
1.EPOCSwitch
EpocSwitch位于PC系统托盘中,通过它可以选择希望使用的SDK(通过右键点击该图标)。也可以双击图标或者从菜单中选择命令提示符,从而获得一个正确设置了环境的命令提示符。遗憾的是,这种方法与Symbian OS 7.0采用的SDK配置管理新方法不兼容(参见EnvironmentSwitch)。
2.EnvironmentSwitch
可以从Series 60 2.0中获得EnvironmentSwitch。它取代EpocSwitch,提供与其相同的功能,但是与最新的SDK和较早的版本完全兼容。和EpocSwitch一样,它位于系统托盘中,通过右键点击就可以激活它。
3.EPOC**
该工具可以激活使用Symbian OS特有的工具栏—但只在Microsoft Visual C++ IDE中起作用。通过该工具栏中的6个图标可以访问6个方便的实用程序。
4.MBMViewer
该工具允许便捷地浏览嵌入PC上Symbian OS .mbm文件中的位图/图标。
5.MMPClick
该工具允许在.mmp文件上右键点击,并且从上下文菜单中选择希望针性进行生成的目标平台(armi urel,wins udeb,wins urel),否则创建Microsoft Visual C++工作区和项目文件。
6.SMS Inbox
这是一个模拟器应用程序,可以在测试从应用程序中发送/接收SMS消息的过程中在后台保持运行。发送SMS时,将消息复制到\smsout文件夹,将接收的SMS消息复制到\smsin文件夹中。通常的SMS浏览器和编辑器都可以用于编辑SMS消息。
2.5.4  更多的工具和实用程序
1.自定义Microsoft Visual C++—语法突出显示
使用文件usertype.dat可以启用Symbian OS和其他用户自定义关键字的语法突出显示。可以将用户自定义关键字设置为不同于C++关键字的颜色,从而更容易定位Symbian OS关键字。它作用于Visual C++ 6.0—参见下面的clindex,了解如何不断更新关键字文件。可以从http://www.emccsoft.com中获取usertype.dat以及如何使用它的说明。
2.自定义Microsoft Visual C++—Symbian OS变量扩展
在调试阶段,能够在观察窗口中浏览变量的内容非常有用。不过,Visual C++并不总是能够显示用户自定义类型。但可以使用文件autoexp.dat自定义Visual C++,借此在观察窗口和datatip中正确扩展复杂新数据类型。从http://www.emccsoft.com可以获得autoexp.dat及其使用指南。
3.Clindex
为了找出哪个库提供了哪些对象(从而可以列在.mmp文件中),可以检查SDK文档或使用来自于EMCC软件公司的实用程序clindex。检查Microsoft Visual C++ SDK安装,它产生了所有对象的最新有序列表和它们对应的库。此外,clindex有一个选项,用于将所有找到的类名合并到usertype.dat文件中。可以从http://www.emccsoft.com中获取clindex以及如何使用它的指南。

   版权没有         盗版自由         任意传播        欢迎交流

TOP

2.6  Series 60 SDK和IDE的安装技巧
从Series 60平台2.0开始,通过专门的包管理器应用程序来管理SDK安装。通过使用新工具,多个SDK的安装和使用更为简单。根据默认的设备设置和任何指定的覆盖值来自动设置EPOCROOT。为了保持向下兼容性,用户可以手工设置EPOCROOT,并且它将不会被device命令覆盖。
2.6.1  Microsoft Visual Studio .NET
微软不再支持Visual C++ 6.0 IDE。如果希望使用带有Series 60 SDK的Microsoft Visual Studio .NET,为了正确进行设置,可参阅Symbian Developer Network Knowledge Base(http://www3.symbian.com/faq.nsf)上的FAQ-0835(使用搜索选项,并输入FAQ-0835作为搜索主题)。
2.6.2  模拟器配置
Series 60模拟器用于测试处于开发中的应用程序,同时也用于在Series 60环境中进行应用程序数据和其他内容的交互。该模拟器提供了PC环境中Series 60的功能和一般性的外观,从而可以在开发软件的同时,更容易地执行应用程序逻辑、行为和完整用户体验的测试,而不需要具有真正的Series 60物理设备。
该模拟器提供了完全的目标环境,该环境在PC上的Microsoft Windows下面运行。实现的平台称为WINS(WINdows Single process)平台。在PC模拟器下,应用程序作为单个进程内的单独线程运行,而在目标硬件上,每个应用程序都在自己的进程中运行,一般通过内存管理硬件互相保护。
该模拟器基本上能够基于PC完成开发。它具有优秀的调试支持;当线程出现严重错误时,调试器提供有关该错误的充分信息。只有最后的开发阶段才关注目标硬件。一般不遵循这种规则的例外情况为低级编程,此时必须直接访问目标硬件,例如物理设备驱动器的编程工作;并且,在这种编程工作中,只通过模拟器无法满足连通性/通信的需求。
该模拟器非常灵活,并且具有高度可配置性。但是,其中可选项根据所使用的平台版本而有细微的变化。表2-4中总结了各种选项。第二栏中列出的信息资源请参见表后的内容。
资源

【此处插入表2-4】

搜索SDK文档(.chm文件)时,字面值搜索意味着将搜索字符串放在引号中,按照指定的内容进行精确搜索。根据具有的SDK文档版本,搜索字符串可能具有细微的区别。
为了查找在Symbian Developer Network Knowledge Base中引用的信息,使用Knowledge Base搜索工具中的FAQ号(可以在http://www3.symbian.com/faq.nsf中找到该工具)。
SDK01—Series 60 SDK文档:用关键字“Emulator Guide”进行精确搜索。
SDK02—Series 60 SDK文档:用关键字“Configuring the Emulator”或“Emulator configuration”进行精确搜索。
SDK03—Series 60 SDK文档:用关键字“Comms settings syntax”进行精确搜索。
SDK04—Series 60 SDK文档:用关键字“Enabling RAS for the emulator”进行精确搜索。
SDK05—Series 60 SDK文档:用关键字“CommDb Overview”进行精确搜索。
FN01—“诺基亚论坛”站点Series 60部分中的“Series 60模拟器配置”。
SDN01—Symbian Developer Network Knowledge Base FAQ-0893。
SDN02—Symbian Developer Network Knowledge Base FAQ-0867。
SDN03—Symbian Developer Network Knowledge Base FAQ-0713。
2.6.3  模拟器中的应用程序严重错误
Symbian OS使用术语“严重错误”表示应用程序和系统线程的异常中断。当发生不可恢复的错误时,系统或应用程序自身可能产生严重错误。从Series 60 SDK 1.2开始,当应用程序发生严重错误时,模拟器只显示消息“Program closed(程序已关闭)”,而不显示一般的严重错误号和信息文本。为了显示严重错误号和文本上下文消息(按照较早平台版本上那样),需要在文件夹\epoc32\wins\c\system\bootdata中创建名字为ErrRd的空文件。如果这样做,将以正常的方法处理发生的任何严重错误。

5.jpg (137.64 KB)
2007-11-23 23:36


6.jpg (96.19 KB)
2007-11-23 23:36


7.jpg (21.61 KB)
2007-11-23 23:36

   版权没有         盗版自由         任意传播        欢迎交流

TOP

2.7  高级应用程序部署和生成指南
下面将提供一些更高级的应用程序部署和生成指南。其中一些指南介绍如何使用模拟器,一些指南则针对目标设备(包括模拟器和目标硬件之间的关键区别)。一些信息则与软件安装和分布更为相关。
2.7.1  平台UID
平台UID是Symbian安装系统(.sis)包文件(.pkg)定义的基本部分—必须在应用程序准备对外发布之前包含它们。表2-5提供了当前平台UID的列表,可以在.pkg文件中使用这些平台UID指定与应用程序兼容的目标Series 60平台。

【此处插入表2-5】

一般倾向于使用Series 60平台UID(而不使用目标设备特有的平台UID),除非应用程序只是针对特定的手机。
可以在一个.pkg文件中定义多个平台UID,用于表示应用程序可以运行的所有平台和设备。使用最广泛的可用平台UID号,从而获得最大兼容性,但需要考虑周到。不要使用Series 60 2.x平台UID,除非使用Series 60 2.x SDK进行生成。
如果需要了解以述要求的完整解释和最新实现细节,请访问http://www.forum.nokia.com,参阅标题为“Series 60平台标识码”的相关文档。
2.7.2  设备标识UID
所有的Series 60设备都可以返回由制造商分配的唯一标识符UID。注意,这不同于平台UID。
在安装过程期间或运行时,标识符UID有时可用于确定安装应用程序的设备确切身份。可以实现这两种要求,下面两节将分别加以描述。
表2-6提供了设备UID的部分列表;不过,可能需要咨询授权获得商了解特定设备的UID。

【此处插入表2-6】

1.安装时的设备标识
在过程期间确定安装应用程序所用设备的确切身份具有许多潜在的优点。例如,它允许判定特定的设备需要哪些不同的特殊组件或文件。下面是摘自一个假想安装包脚本文件(.pkg)的示例部分,显示如何完成这种有条件的安装过程。

IF MachineUID=0xl01F4FC3;  install Nokia 7650 specific files
"\Epoc32 \release\armi\urel \N7650. dar"  -
"!: \system\apps\ExampleApp\N7650. dat"

ELSEIF MachineUID=0x101F466A ;  install Nokia 3650 specific
files
"\Epoc32 \release\armi \urel \N3650. dar"  -
"!: \system\apps\ExampleApp\N3650. dat"

ELSEIF MachineUID=0xl01FB3DD ;  install Nokia 6600 specific
files
"\Epoc32 \release\armi\urel\N6600 .dat"
"!: \system\apps\ExampleApp\N6600. dar"

ELSE ;  install option for all other devices
"\Epoc32 \release\armi \urel \Default. dar"  -
"!: \system\apps\ExampleApp\Default. dar"
ENDIF
2.执行时的设备标识
这种设备标识可用于获得运行时应用程序所处设备的确切身份—一般情况下,可能希望在应用程序初始化的早期就进行这项工作。可以做到这一点,并且Symbian OS实用程序API可以提供设备UID—请查看第12章和标题为“硬件抽象层”一节,了解一些相关的示例代码。
2.7.3  资源文件版本和压缩
Symbian OS 7.0引入了一种资源文件压缩算法,一般的Symbian OS 6.1中并没有提供这种算法。然而,版本2.0之前的Series 60版本实现了自己的资源文件压缩方案—与Symbian OS 7.0s中的方案不同。
Series 60 2.x压缩资源文件与Series 60 1.x不存在向后兼容关系。
然而,为了维持一定程度的向前兼容性,Series 60 1.x资源、.aif、.sis和位图文件(.bmp)可以和基于Series 60 2.x的设备一起使用。
2.7.4  针对ARM目标的生成
一般情况下,ARM生成将比模拟器(WINS)生成更为困难,并且通常在第一次尝试时gcc会产生额外编译器错误和警告。这是因为gcc在一般情况下比Microsoft编译器等更为严格,同时它有一些细微的区别,这些区别将在第一次尝试ARM生成时显现出来。下面介绍了一些最为常见的错误。
函数输出
当涉及指定输出函数时,gcc工具链比WINS生成更为严格。从DLL中输出函数的正确方法如下:
在头文件(.h)中:

class CMyClass  :  public CBase
   {
IMPORT_C void Function();
   }
然后在源文件(.cpp)中:

EXPORT_C void CMyClass: :Function()
   {
   }
WINS工具链不会提醒CPP文件中是否没有包含EXPORT_C;它无论如何都会输出函数。然后,gcc工具栏需要IMPORT_C和EXPORT_C之间的完全匹配。如果不匹配,则不会从DLL中输出函数,在尝试链接到这个DLL时,这将最终导致产生“Cannot Find Function”(无法找到函数)这样的错误。
1.DLL中可写入的静态数据
其他编译区别包括一些错误,例如由生成工具petran产生的“The MyDll.DLL has(un)initialized data”(MyDll.DLL具有(未)初始化数据)错误。petran工具去除与ARM目标无关的符号信息的PE格式文件(Win32可移植可执行文件格式);因此使DLL小得多。所以,ARM目标只支持按照顺序的链接。Petran也负责将UID信息添加到可执行文件的头文件中。
Symbian OS体系结构不允许DLL具有数据段(静态数据,或初始化或未初始化)。以下基本问题决定是否应该使用数据段:
•        是否所有的DLL用户都共享数据段?
•        是否应该针对DLL附加的每个进程都复制数据段?
•        在实现任何可能的方案时,都有显著的运行时系统开销。
然而,因为WINS模拟器使用对应的Windows DLL机制,它可以使用“即写即复制”方式提供每个进程的DLL数据。这就是直到生成基于ARM的Symbian OS设备的代码时才检测到问题的原因。
在生成过程期间生成的相关.map文件包含帮助追踪所涉及的源文件的信息。查看..\epoc32\release\armi\urel\dllname.map,并且搜索“.data”或“.bss”。查看诺基亚论坛中Series 60部分的“Series 60编码习惯”,了解有关该主题的更多细节。
2.生成和冻结DLL
加载DLL时,它提供一个地址表,一个地址对应于每个输出的符号,另一个地址则对应于每个输出函数的入口点。这是DLL的公共接口,并且DLL应该在发布前冻结它们的输出,从而确保库的新版本的向后兼容性。这在术语上称为维持二进制兼容性(BC,maintaining binary compatibility)。而且每个输出的索引应该在不同版本之间保持不变。
开发DLL时,可以在项目的.mmp文件中使用EXPORTUNFROZEN关键字,用于告诉生成过程还没有冻结输出。准备进行冻结时,必须从.mmp文件中移除EXPORTUNFROZEN关键字,并且提供一个列出输出的.def文件。
Symbian OS使用输出定义文件(.def)管理这种需求。每个输出的符号列在该文件的输出部分中,同时带有一个序号,序号的基数为1。
第一次完成生成时,可能会生成一个警告,声明冻结的.def文件并不存在。一旦完成项目,并且已经按照它的发布形式进行了生成,就可以使用下面的代码运用abld冻结该项目:

abld freeze
这种方法将创建冻结的.def文件,该文件包含项目的输出函数。然后,为了根据最近冻结的接口生成应用程序,输入下面的命令:

abld build wins udeb                                 —用于Visual C++
abld build winsb udeb                                —用于Borland C++
abld build winscw udeb                        —用于CodeWarrior
为了维持BC,必须在新版本中定义较早版本中已经定义的每个输出。在新版本中引入的新输出的任何序数必须跟在较早版本中定义的输出的序数后面。
对于DLL生成,命令行工具自动在指定目标的生成树中创建.def文件。一旦针对生成创建了这些文件,可以将它们和项目源一起归档,并且用于将来的生成,根据改动冻结相应的输出。通过如下方式完成这一点:将.def文件复制到默认位置,并且在项目的.mmp文件中包括如下代码:

DEFFILE projectname.def
通常,只有命令行生成应该发布。注意,一些IDE现在也支持输出的冻结。在项目以后的任何命令行生成中,可以保证输出与当前的版本兼容。
如果添加新输出,则应该从生成目录中复制新的.def文件,并且将这些文件和新的版本一起归档。
注意,所有的ARM平台共享一个公共.def文件,但是WINS/ WINSCW/WINSB具有不同的.def文件。


8.jpg (38.67 KB)
2007-11-23 23:37


9.jpg (30.72 KB)
2007-11-23 23:37

   版权没有         盗版自由         任意传播        欢迎交流

TOP

2.8  小结
本章详细介绍了如何选择并使用特定的SDK,以及如何以某种方式指定Series 60项目,允许针对模拟器或目标设备进行项目生成。本章详细讲解了使用项目文件使之能够运用各种IDE进行开发的过程。同时,本章也介绍了如何针对模拟器和目标硬件从命令提示符中生成项目。
本章详细描述了组成一般项目的源文件和其他文件(作为生成工具的输入),同时也描述了组成该过程输出的文件。使用GUI应用程序、本地化的GUI应用程序以及控制台应用程序示例演示了生成过程和输出文件。本章也定义了应用程序资源,同时介绍了定义和生成本地化应用程序的过程。
通过详细介绍Symbian安装系统(包括介绍如何在安装时启动应用程序),描述了在Series 60设备上部署应用程序。
到现在为止,读者应该对Series 60开发期间经常使用的主要生成工具和部署工具有了很好的了解。此外,我们介绍了一些和Series 60 SDK一起提供的非常见工具,以及大量可用于Series 60模拟器的配置选项。

   版权没有         盗版自由         任意传播        欢迎交流

TOP

各楼层目录:
1楼:怎样下载安装软件&游戏?
         怎样安装N-GAGE游戏
                程序的卸载
         桌面整理
         C: D: E: Z:都代表什么?
         怎样破解或汉化软件
         关于SmartMovie的设置
         如何查看手机版本和序列号?
         如何格式化手机?
         一个避免格机的方法
         恢复原厂设置与格式化手机的区别
                忘记MMC密码怎么办?
         什么是飞行模式?
         为什么进不了飞行模式?
         怎样使用gif动画桌面?
         如何全屏查看图片?
         与电脑同步时间
                删除手机中顽固文件的方法
2楼:避免错误 诺基亚格机误区解决方法
3楼:S40平台介绍
4楼:诺基亚智能手机系统简介
6楼:手机电池真假鉴别
7楼:蓝牙连接,读卡器连接,软件游戏的安装与卸载初步,对存储卡的认识,文件管理和铃声初步,

            如何配置GPRS,键盘秘籍
8楼:如何让手机省电,减少手机机身内存占用存储空间的方法,相关游戏安装简介,REALone的播放记录如何删除
9楼:机友买前必看,买后应了解
10楼:关于程序文件的详解,关于两种程序的安装方法,还要提一下S60系统以上手机的一个新功能—主题模式
            关于安装程序,关于捷径的概念,在seleQ中建立文件夹的方式比较另类,和电脑不同,关于自己制作mp3铃声的问题
11楼:应该引起高度重视的问题
13楼:一些有用的提示和技巧
14楼:关于SmartMovie的一些注意事项
15楼:SeleQ基本说明(同样很重要,很基础的常识,工具很有用,以后经常会用到)

16楼:关于手机屏幕大小 待机图和LOGO以及如何修改的介绍
17楼:电池及充电基础
19楼:电脑与手机连接硬件初步
20楼:NG是智能电话
21楼:文件管理和铃声初步
23楼:键盘秘籍: (适用于NOKIA多款手机)
24楼:如何让手机省电
25楼:减少手机机身内存占用存储空间的方法
26楼:格机简明教程
28楼:尽显个性,来电随机铃声实现方法

29楼:关于如何把信息里面的文件存储到存储卡的问题
30楼:字体为什么会出现“口”

31楼:S60手机恢复logo不需要重启手机的方法
32楼:诺基亚手机秘籍诺基亚手机秘籍

33楼:问:手机现在无法安装任何软件?
               问:掌上书院如何翻页和调整自动浏览速度?
               新发现的小窍门

               编辑键的使用
               问:怎么改默认输入法
               巧用S60笔键
               安装PC套件的一个注意事项
               问:掌上书院怎么用?
               问:不能安装SIS程序
               问:短信如何全部删除?
                   开机提高运行内存方法
               s60自带Realplay视频播放的快捷键
               问:怎么把TXT文本复制到发信箱里?
               问:如何删除一些强制侵略手机的文件?

               问:请问s60的信息声音能改成MP3里的歌吗?
               问:谁会把桌面上的快捷栏隐藏起来?
               问:新换的512的卡,可是e盘里面的那些根目录都没有,怎么用?
               问:mp3文件传到手机上为什么名字是乱码?
               问:如何备份功能表的文件夹列表?
               格机备份心得

34楼: 常用S60指令代码
               问:怎样把设置好的壁纸给删掉?
               问:短信的时候怎么每输一个字母下面都有一横而且输不了我想要的字母?
               问:如何删除安装在手机里的软件?
               问:软件安装中,sis/app/rsc是什么文件?

               问:手机 c/system/install下得 文件是都可以删除吗?
               问:怎么添加捷径内容?
               问:s60的主题怎么安装,使用和删除?
               删除掌上狂拼程序后,如功能表上图标还在?

               如何卸"好帮手"程序管理里面根本没有"好帮手"
               怎么建立播放列表
               查看安装记录在哪里删掉?
               s60为什么背景光一直熄不掉?

               自带的来电小头贴怎么设置?
               一打掌上书院就退出?

               通话显示通话时间?
               如何才能发短信时不用选择号码?
35楼:如果手机万一被水淋湿,我们该采取何种保护措施?
               如何减少手机辐射对人体的伤害?
               遇到无法开机时该怎么办?
               如何正确设置短信息发送?
               如何利用手机红外线进行上网冲浪?
               手机不能接听是怎么回事?
               如果在电量一定的情况下,电池使用时间比正常情况要短是怎么回事?
               手机不能拨号该怎么办?
36楼:手机回音问题详解
37楼:延长手机待机时间有妙招
38楼:S60系统功能操作失败的解决方案

39楼:手机维修基本概念及常用术语
40楼:教你清除"程序管理"里面的未安装sis程序
41楼:教你如何在手机上浏览储存卡中受保护的sys和private、    RESOURCE文件夹中的内容!
42楼:N系列智能手机常见问题集锦~~
43楼:常见问题百问百答 & 教程贴整理
48楼:
自己修理失灵键盘按键,坚决不花冤枉钱

49楼:简单又实用的清理C盘垃圾文件的方法
50楼:N70使用过程中的一些常见问题

51楼:利用读卡器格机的方法
52楼:诺基亚S60档案
53楼:symbian series60智能手机系统分析!symbian series60界面的智能
54楼:让PC电脑识别Nokia gage的MMC卡!

55楼:爱护自己的手机避免 短信息丢失,自动发信息
56楼:教你如何隐藏软件

57楼:智能手机白屏、重启、死机、无法开机及解决办法
58楼:格机备份——全机备份+完全还原

59楼:为您的爱机洗个澡~~~
60楼:教你读懂JAR和JAD文件

61楼:什么是3G手机啊?智能手机是3G手机么?现在有必要买3G手机么?非3G手机很快会被淘汰么?
62楼:什么是S60,什么是os6/7/8/9,什么是J2ME,什么是MIDP
63楼:线路2是做什么用的,格式化手机如何才能保留线路2,丢失了的如何恢复?

64楼:如何备份手机名片和短信等资料
65楼:我的手机发完消息或收到消息的时候总是显示“MCE 程序关闭”是什么意思?

66楼:NOKIA怎样连接蓝牙耳机?
67楼:怎样才能看到手机和卡的system文件夹?
68楼:CMNET和CMWAP两种接入点有什么区别啊?CMWAP能上WWW网么?为什么中国移动客服说不可以呢?我没有包月,该使用哪种接入方式?
69楼:怎样更改网标Logo?怎样恢复原始网标Logo呢?
70楼:为什么很多视频不能直接在手机上播放?
71楼:什么是单声道?我的手机是不是单声道,如何才能变成立体声?
72楼:为什么SIS,JAR的后缀文件无法用蓝牙发送啊?
73楼:我装了某个软件,打开都是口口口口这是怎么回事啊?
      jad的游戏怎么装啊?
      怎么才可以让手机支持JAR的游戏啊?虽然手机本身支持,可是装了JAR的游戏却不能玩的?
      不小心把手机system\install里的文件都删除了 ,今天发现在工具——程序管理里的程序全没了,请问这样对机器运行有问题吗?
74楼:VGA是什么意思?

        如何删除realplayer产生的播放文件记录呢?能不能不让它自动保存呢?
75楼:让手机不在服务区的简单方法
76楼:游戏的详细安装方法
77楼:手机基础知识以及日常使用技巧详解
78楼:怎样避免买到二手的MMC卡及维护

79楼:不使用任何工具软件轻松改LOGO
80楼:手机密码知识普及
81楼:〖SymbianOS 简介〗

82楼:〖Symbian OS内存管理介绍〗   

[ 本帖最后由 zjnokia 于 2008-2-3 19:13 编辑 ]

   版权没有         盗版自由         任意传播        欢迎交流

TOP

支持

严重支持

TOP

愿此帖能帮助那些急需帮助的朋友。。。

   版权没有         盗版自由         任意传播        欢迎交流

TOP

发新话题
本功能由奇虎问答实现

相关主题

标题 作者 最后发表
玩机秘籍索引汇总 empty 2008-05-28
尤其是新手, 教程及精品贴索引。 xiaoweia 2008-01-28
点击阅读更多关于的相关帖子  更多相关主题