新手入门系列(三)——Brew常见错误整理(转贴外加整理)
原作者:牛阿牛 (整理)
2005-02-28
nhf_2008@hotmail.com
nhf_2003@hotmail.com
email:nhf20021166@163.com
留言:希望能给各位brew方面一个基本的介绍;如有问题,请联系.
补充整理:smilelance
http://www.mobileforum.cn/
1.用户是否可以将信息上传到开发商的服务器上来?用户传上来的数据如何收费?
可以。BREW可支持socket,同时IWEB也可完成该任务。(Brooks)
中国联通的策略是:将所有的在线服务器都放入中国联通的IDC网络,同时给该服务器分配一个内部的URL和IP地址。用户上传的数据不用收费。但是,中国联通会在您的服务器上收取信息费
2.装完ADS以后运行其中的程序出错,显示对话框“The C-Dilla licence Management System
has become corrupt or is incomplete”,请问这是为什么
在安装完ads后,您应该首先运行debugger,然后再运行ARMCC
3.当我在模拟器上运行应用程序的时候,该程序一启动就出现了数字签名失效的错误,请问这是为什么?
在模拟器上运行应用程序的时候,在应用程序所在的文件夹中不应包含.sig文件,否则就会出现数字签名失效的错误
4. This application has been unloaded save memeory.
You must download a new version
找不到相应的执行文件如dll或者mod,如果多个执行文件可能也有类似问题…
5. Privilege corrupt
请注意mif文件中选中相应的优先级
6.创建接口不成功
1)
请注意将红色字体改为自己的结构体
if(ClsId == AEECLSID_TETRIS)
{
if(AEEApplet_New(sizeof(GameApp), ClsId, pIShell,po,(IApplet**)ppObj,
(AEEHANDLER)Piece_HandleEvent,(PFNFREEAPPDATA)Tetris_FreeAppData)
== TRUE)
{
return(AEE_SUCCESS);
}
}
return (EFAILED);
2)注意创建顺序
3)看看硬件是否支持接口
4)mif中优先级是否选择
7.未知错误
一般与class id有关,查看mif和bid文件中的id是否相同,全部编译工程
8)应用程序,不能启动
EVT_APP_START 中返回了FALSE,请检测原因
9)failed to free all ResData
请检测是否有接口或对象及申请的内存没有释放;包括各种回掉函数
10)声音不能正常播放
一般是由于一些时间没有正常处理导致,如EVT_APP_SUSPEND等,声音 回掉函数的处理等.
11)文件读写或创建不成功,
检测系统是否已经没有空间或mif优先级选择问题
11)问题补充:若是在模拟器上文件读写出错还有一种可能,
就是模拟器中的默认文件数不够,
用 BREW Device Configurator 打开所用的模拟器,将
File System下的
Max Filses Allowed to 改成65535即可
12)异常现象发生,但很难找出错误
检测数组是否越界
13)关机或者死机(拔电池处理的死机)
指针的非法使用,尽量使用时判别其合法性
14)程序无反应
可能是状态值导致,将事件处理函数传给其他函数处理或指针非法使用
15)程序的显示页面不正常,混乱
单机游戏的话,可能是定时器的处理;网络的话,也有其他逻辑问题.
16)控件的输入法的不正常现象
请注意其他控件界面的释放问题或激活问题.
17)控件的切换问题
请注意在相应的事件EVT_CTL_TAB中处理,其他地方难以处理.
18)模拟器可以,arm不能编译
请检测相应的提示行,如float的使用,类型的转换问题,mak文件中的路径是否合法如含有空格等
19)启动后,只显示应用名称
可能是没有相应的目录
20)1030式的错误,
一般签名文件的错误使用.
21)引用其他公用的模块,如果创建不成功
请注意检测,该模块是否存在…
22)网络游戏中,一些地址不能正常引用
请注意将使用buffer长度,使用其一部分看看…
23)消息类似丢失现象
有可能是解析问题.应该循环解析,而不是一次读取,只解析一次.
24)图像透明问题
一般参考相应的设备或者图形的问题,部分手机不支持某种颜色透明
25)模拟器启动无反应,或者找不到相应的图标
检测,mif是否存在,检测是否class id 是否有相同的,关闭模拟器,删掉examples下面的prefs.dat 然后重新启动模拟器..
26)启动后白屏,
检测资源调入问题或检测是否update屏幕
27)end键后,退出到系统界面非brew管理器界面
可能有资源释放问题
28)如果mak文件创建不成功,或者没反应
关闭vc,删掉下面的mak文件,重新启动vc,再试;也可参照”手工修改mak文件”一文来处理
29)手机输出调试问题
brew logger 不能保证所有DBGPRINTF的全部输出都作显示…
30)手机灌如问题
如果新添加一个工程到手机里,一般需要重启,方可使用;如果发现重启后,灌入消失,可以试图重启再看,对某些手机而言;一般情况确保手机打开测试模式,其次,查看空间
40)请注意在手机的灌入时,不要使用中文名,同时,不要乱删除里面的其他文件(入brew系统文件)…
41)提示memory corrupt 类似提示
请检测模拟器配置文件,选中为使用windows内存
42)尽量以图形模拟数字输出,有利于界面布局美观…
43)常用的资源,尽量一次调入;不是常用的资源,可以考虑既用既调既释放
45)尽量减少控件的使用,有利于界面布局每关(如static,menu等)
46)对于一些手机可能处理的事件顺序不一样,请注意编码习惯,初始化变量,释放后,清理变量,使用时,判断可用性;如部分手机在关闭应用前,先处理挂起事件
PS:工程名称和资源文件名称都不要用大写字母,否则会出问题,
BREW2.1是在真机上出问题,模拟器OK,BREW3.1则模拟器也出错。
BREW中所有的全局变量都必须放到大结构体中,
typedef struct myapp_s //这个名字任意
{
AEEApplet a; //必须的
//add the code here :
int playerMoney;
}myapp; //这个名字任意
其他地方不能使用全局变量;
否则放到手机上时ARM编译会提示出错,
若需使用全局数组,则需加CONST修饰,作为常量即可
试图启动应用程序时为何收到以下错误? 错误:“该应用程序已被卸载以节约内存。 必须下载新的版本。”
该消息出现在模拟器上时表示 dll 应用程序丢失。 在模拟器中运行前使用 Visual C++(Build(编译)->Rebuild All(全部重新编译))编译应用程序。
该消息出现在电话上时表示找不到 mod 文件。 如果应用程序是使用 Mobile Shop(移动商店)下载的,则可以选择 Yes(是)重新加载。 如果应用程序是使用 BREW App Loader 下载的,请确保您已经下载了 .mod 文件。
f. 为什么模拟器在我的应用程序退出时会显示有我的应用程序名的空白屏幕?
适用版本: 1.0, 1.1, 2.0
问题: 应用程序在模拟器上运行后退出时,不是返回到主菜单屏幕,而是显示一个空白屏幕并在左上角显示应用程序名。
这种情况是由于退出应用程序前未释放所有分配内存引起的。 必须使用 FREE 或 IHEAP_Free() 释放您使用 MALLOC 或 IHEAP_Malloc() 分配的任何缓冲区。 对于您创建的 BREW 类的任何实例,必须调用相应的释放函数来释放该实例。
g. 运行应用程序时为何收到“未知错误 (1)”?
适用版本: 1.0, 1.1, 2.0
一般情况下,.mif 文件中指定的 Class ID 和应用程序代码中的 Class ID 不匹配时会出现该错误。 如果以下条件的值为 false,则会出现该错误(在模拟器和电话上都会):
int AEEClsCreateInstance(AEECLSID ClsId, Ishell* pIShell, Imodule* po, void** ppObj) {
**ppObj = NULL;
if (ClsId == AEECLSID_MYAPP) { //必须是 true 才能继续
// AEECLSID_MYAPP 值包含在 .bid 文件内
... ... ...
}
... ... ...
}
确保 .mif 文件中的 Class ID 与 .bid 文件中的 Class ID 相同。 请注意您可以使用 MIF 编辑器在本地生成 Class ID,用于测试。
相关参考
高通网站: http://brew.qualcomm.com/brew/zh ... /documentation.html
http://www.qualcomm.com/brew/developer/support/techfaq.html
sunwhite 的faq文章
Blog:http://blog.csdn.net/sunwhite/