移动平台

Android平台中BitmapFactory.decodeResource对GL程序材质的影响

在Android平台下实现OpenGL ES程序的贴图加载操作一般是通过BitmapFactory.decodeResource这个api,然后用系统封装好的GLUtils.texImage2D函数直接转换为gl贴图即可,方便快捷。但在较新版的Android系统中res中的图片文件夹根据dpi设备分辨率的不同,细分了很多文件夹处理以支持不同设备的分辨率加载对应的图片,如drawable-hdpi,drawable-ldpi,drawable-mdpi等,如果没有注意这个问题而将贴图图片随意安置的话,在decode的时候系统会默认根据设备dpi的不同对目标图片格式解码的同时进行大小调整,也就是说有可能破坏原本已经是2^n大小的贴图图片,导致原本在模拟器上正确的绘图在真机上变成大白板!
解决这个问题的方法可以将图片放到不受dpi影响的drawable-nodpi中,或者设置BitmapFactory的选项,不处理dpi相关问题。

关于Nokia 5800安装sis时的证书过期问题

以前在S60 3rd的机器上安装刚做好的sis时也会出现“证书过期”的提示,或者是证书尚未生效,但通过调整系统日期时间的方式可以将就过去,可5800上出现同样问题时就不行了,调系统时间怎么也找不到证书合法的时间段,调靠后点说证书过期,靠前点说证书非法,已过期或手机日期设置不正确(Certificate may be not valid, is expired or phone’s date settings may be incorrect)等,确定证书生效时间肯定没问题(经过symbiansigned在线签证的,装在3版机上也没问题)。其实这是5800系统的一个bug,据说目前还没有修正,经过我的测试,这个bug只会影响非自签名的sis安装,如果是自签名的包安装是不会出这种错的。在这bug修正前的临时解决方法就是备份手机资料,然后用*#7370#将手机恢复出厂设置(默认锁码12345),然后重启设置正确的时区日期时间以后就可以了。N97没试过是否也这样,所以不确定这个问题是5800的通病还是S60 5th的通病。

Symbian编译时的Error -1073741819错误

完整错误信息类似下面这样:

make[1]: *** [\Symbian\9.2\S60_3rd_FP1_2\EPOC32\BUILD\…\Gif_Reader.o] Error -1073741819
make[1]: *** Waiting for unfinished jobs….
make[1]: *** Waiting for unfinished jobs….
make[1]: *** Waiting for unfinished jobs….
make: *** [TARGETMGATE] Error 2

这只是在整个过程中的一部分出现,最后提示还是***Build Complete,carbide的problems里也没有任何对应的代码位置提示,很容易误解成sdk或这编译器坏了,网上有人说重装sdk,有人说clean一遍项目。其实这是由于代码里写了一些貌似合法但实际不对的写法,举个具体的例子就是拿对象类型的变量强制转换成指针使用,比如

CCoeControl& iParent;
((CTestAppView*)iParent)->foo();

这样,就会导致这种build错误。

WM下MFC基于对话框(dialog based)程序的最小化

在WM下的MFC基于对话框程序(VS模板自动生成状态下),运行之后右上角显示的是OK图标,点击后走的逻辑是dialog的OnOK()默认逻辑,会直接把对话框程序关闭掉。这个右上角的按钮据说在SDI或MDI程序运行时显示的是X,会有对应smart minimize的功能,就是点了是最小化隐藏的功能。开始尝试使用ShowWindow(SW_MINIMIZE)的方法来最小化对话框程序,发现结果是右上角的ok没了,下面的左右软键菜单没了,但程序主窗口还在显示,没有像用过的其他程序那样ok按了以后显示windows的today界面。后来换用ShowWindow(SW_HIDE),这样确实是隐藏了,也看见today了,但是再想重新打开程序就不行了,htc的应用程序列表里没有我的程序,开进程管理器直接激活进程倒是可以,但是切换的话会提示说程序窗口已被隐藏XX,不能再打开了,只能强制结束进程。
其实这个问题好像很早以前就被发现了,据说是个today的bug,详情看这:QA: How to create Today-friendly dialog based application?,默认对话框的窗口类型是WS_POPUP,而默认情况下基于对话框程序的这个dialog window的parent就是today这个窗口(等价于windows的desktop),最小化或者直接激活today显示会导致触发其子窗口的显示,所以又把dialog给弄出来了,解决方法倒是相当简单:把WS_POPUP样式换成WS_OVERLAPPED!

关于WM上左右软件菜单项的EnableMenuItem(使用MFC的CCommandBar添加)

关于WM上MFC程序对左右软件菜单的控制,可以用win32的方法ShCreateMenu这套逻辑,或者使用CCommandBar这个类(替换掉的以前5.0之前的CCeCommandBar类),先Create然后InsertMenuBar就可以将常规menu资源作为左右软键对应的菜单显示,还可以添加toolbar,虽然看上去有点挤。
由于这种创建菜单的方法,让我误认为只是将win32的menu换了个添加方法,换了个绘图位置,导致后来要实现动态enable,disable菜单项时遇到了挠头的问题。按照常规的做法,在执行逻辑时调用EnableMenuItem(hMenu,IDM_MITEM,MF_BYCOMMAND|MF_GRAYED),函数调用,返回值以及参数hMenu都没有问题,但执行起来就是没有disabled的效果,google了一通发现国内国外都有很多人提到这个问题,最终也没有个明确的答复,不是说参数hMenu不对,就是说用ShGetMenuXXX的去取菜单,怎么看也不像是真正的解决办法。
后来在一篇动态更新菜单名称的文章中看到貌似WM对左右软键的菜单是作为POPUP MENU处理的,也就不像是win32正统主菜单那样,嗖得丝内,恍然大悟,换用响应WM_INITMENUPOPUP消息的方式,对要变更的菜单项作弹出菜单时的enable disable处理,问题解决,没想到被一个菜单项给杯具了……

发现一款比较好用的WM上的telnet软件Token2Shell/Mobile

token2shell mobile版1

token2shell mobile版


token2shell mobile版

token2shell mobile版


token2shell windows版

token2shell windows版

http://choung.net/
这个软件不仅普通telnet功能做的比较好,ssh连接功能也不错,终于可以摆脱putty了。通过修改设置里的编码属性可以很好的支持中文的显示(作者好像是韩国人,对亚洲文字的支持就是比一般的国外软件做的好),用wm看看水木还是挺不错的。
其实这个软件的windows版本也是挺好用的,尤其是针对ssh的一些功能,比如tunnel等等,而且界面看上去也是简洁明快。

附上windows版5.4.1和mobile版5.3.0的特别文件,仅供学习研究使用!
http://www.k-res.net/dl/token2shellc.rar

windows mobile 6环境下的OpenGL ES开发环境设置

  Mobile SDK用的是6 refresh附带6.5 chs的rom,IDE用的是VS 2008。

  由于google到的相关gles和mobile的开发教程大部分都是对比较早版本的mobile sdk写的,所以可能到了6.0这个时代发生了一些变化导致教程上的某些方法不再适用了(至少我按着其中的做法没有成功…)。这里把能在模拟器上成功运行gles程序的环境设置方法总结一下。

Continue reading…

rom换新的了:Energy的23016

上次刷的jack的还算比较稳定,但是由于一些牺牲内存优化速度的设置导致开机内存占用超过50%,对一般应用可能没什么影响,但对一些像游戏类的占用内存较大的应用就无法运行了(目前发现也只是少部分)。于是换了个没有touchflo 3d面板的23016的rom,开机内存40%多,附带的工具也比较全,据说23016还是比较稳定的,试试看。

ucweb 7 beta1登录wp-t-wap后台管理时出错

更新ucweb 7 beta1后登录wp的wap后台管理时一直提示:“您没有编辑日志的权限”,开始以为是最后一次更新了wp-t-wap插件后导致的(更新后确实忘了有没有用wap登录过…),后来发现用wm自带IE或Opera登录就没问题,原来问题出在ucweb上,上官方论坛看了一下,确实有些人提到了beta1不能保存cookie的问题,似乎是beta1的bug,目前尚无新版修正。Opera也不错,但用管了ucweb了,IE就更别提了,无奈换回了ucweb 6.7,再试,没问题了,希望官方能及时修正啊。

最近加入了Xperia X1的刷rom一族…

机器买来的时候已经被JS刷过Hard SPL了,省我自己费事了。JS刷的是CoinJun的6.1 v2.5,就像各大论坛上的机友说的那样,这个版本的rom的确是比较稳定的。但现在6.5已经快正式发布了,外加原rom系统里整合了一些我认为没用的东西,且不能单独删掉,于是便开始自己找rom刷刷玩了。
本来想找个中文rom的,但逛了许多论坛也没看到太合适的,总觉得整合的软件啊什么的太多了,用不少,于是上了国外比较知名的xda找英文rom刷,第一个试的是jack的4.3 lite,基本没整合什么东西,国内有不少人也推荐这个rom。挂上雅黑字体包和里面的nls替了区域设置后,基本的中文显示也没有问题了(闹钟里面的周六看不到,这个是目前发现的比较恶心的中文字体问题!)。由于lite净化的比较彻底,一些常用的东西,像任务管理器啊,mms彩信啊都要一个一个装,rom倒是带了个叫UC的解决方案,就是解决这些需要后装软件的问题,不过还得自己定义安装脚本,懒得折腾,慢慢装。
PS:由于最近刚换上联通的wcdma,正好试验了一把,信号一般,远没有达到7m的理论上限,不过刚起步的东西也可以理解,希望以后会好。6.1上有个问题就是hsdpa的连接问题,以前coinjun的6.1上刚开始建立数据连接的时候是H标志,但1分钟左右就会变回普通的3G标志,刷机后的6.5就会一直维持H标志,猜想是6.1会根据当前连接的实际贷款调整显示的标志,而这次刷的6.5却不会,但实际测试的数据传输速度依然是远没达到hsdpa的理论上限!