3 月 2013

使用distcc分布式编译加速Android NDK原生项目编译生成

随着项目规模的增大,源代码文件增多,结构越来越复杂,导致项目编译链接速度变慢是一件让人非常头痛的事!

在Windows上我们用Visual Studio可以使用IncrediBuild (http://www.incredibuild.com/) 这个非常好用的分布式编译工具,配合其自带的VS Add-In可以很方便的将大型项目的编译工作负担分布到网络上的其它机器完成,极大的缩短了项目编译时间,提高工作效率!

不过遗憾的是IncrediBuild目前只支持Windows系统和VS等一些编译环境,对于Android, iOS等交叉编译的移动平台开发环境就无能为力了。

其实对于linux系OS上还是有可用的分布式编译解决方案的,就是接下来我要说的这个distcc,项目介绍请猛击这里:https://code.google.com/p/distcc/

Continue reading…

对于Android NDK编译器ARM和Thumb模式的理解及Toolchain的切换clang编译器

以前在做Symbian的时候,曾经研究过ARM CPU的指令集问题,ARM处理器支持两套指令集,即ARM和Thumb。ARM为32位指令集而Thumb为16位指令集,理论上32位可以提供更快的执行速度但会生成更大的二进制执行文件,而16位的Thumb则恰恰相反,省地儿但慢,这也正是体现出了ARM对于嵌入式设备的专业性。对于我这种牺牲一切换速度的理念来说,当时就留下了ARM就比Thumb快的印象,以致于现在在做Android NDK原生开发时,也是优先用ARM指令集。(这个可以通过在Android.mk中加入LOCAL_ARM_MODE := arm控制,默认情况下NDK使用Thumb指令集)

但是最近在Xcode编译iOS项目时,注意到同为ARM处理器的苹果设备,使用的是Thumb指令集,而且好像还是某种新版本的Thumb指令集,小搜索了一下看到有人说这种armv7引入的叫做Thumb-2的指令集要比arm指令集更好!于是又重新搜索更新了一下大脑知识库…

Continue reading…

迁移域名到Go Daddy,完全脱离Dreamhost了,记录一下domain transfer的过程

之前给博客空间搬家,观察到现在来看新空间服务还是比较稳定的,于是开始搬家第二步:转移域名!
其实最开始域名是在name.com单独注册的,后来因为买了DH的空间免费送一个域名的费用,于是就将域名注册商迁到了DH。不过现在已经搬家,也就没得免费域名了,只能也transfer了,最开始看到DH上的说明是即使空间到期,只要域名没过期就依然可以在后台管理,因此最开始也没想这么快就转移域名,但是搬完空间之后,我想反正也不用了,不如就取消了DH的空间租用吧,结果一下就发现了奸商的本来面目…
Continue reading…

EDUP EP-N8513 (RTL8188CUS芯片)在Ubuntu 12.10下的wifi不能连接问题解决方法

EDUP EP-N8513这款USB微型无线网卡在我刚装上的64位Ubuntu 12.10下虽然能被系统识别出来,但是并不能正常连接无线AP,具体表现为可以看到AP列表,尝试连接后不停的询问密码,即使输入正确的密码也会反复不断的提示输入密码(据说如果把热点的密码去掉,完全Open的话还是可以连上的,但这么解决岂不是太不靠谱了)。

导致这问题的原因是系统自带的RTL8192cu驱动对这个芯片的兼容性不是非常好,所以还是得去Realtek官方拿驱动源码来现编译安装:http://www.realtek.com.tw/downloads/downloadsView.aspx?Langid=1&PNid=48&PFid=48&Level=5&Conn=4&DownTypeID=3&GetDown=false&Downloads=true#RTL8192CU 下载这个linux用的7m多的zip:RTL8192xC_USB_linux_v3.4.4_4749.20121105.zip

在开工之前可以先用lshw -c network命令检查一下无线网卡是不是被识别为RTL8192cu,理论上只要被识别为这个型号的设备都可以用本文的方法解决连接问题。

Continue reading…

在Eclipse CDT项目中使用llvm-clang作为编译器并解决gdb调试不显示变量的问题

用了一段时间的Xcode做Mac OSX, iOS的开发后,深深的体会到llvm clang编译器的速度、人性!于是打算在刚换上的Ubuntu 12.10上也装一个好好研究研究。

装好Eclipse Version: 4.2.2和CDT后,先是发现toolchain里只有gcc,意识到又得去google了,好在很容易的就找到了llvm4eclipsecdt这个Eclipse插件(看下面的项目链接或者直接到Eclipse Marketplace里搜llvm clang就能找到),果断装上之后,开了个新C++项目,随便写了几句build,失败,看了一下找不到clang执行程序,猜想应该是还没装伟大的llvm clang编译器吧,打开Ubuntu软件中心一搜,嘿!还真有,这下省事了,直接装上llvm clang还有一些可选项,再回到Eclipse Build运行,ok,一切正常!可后来发现想运行一下Debug吧,却发现虽然断点可以正常下,单步运行也没什么问题,但视图里的局部变量之类的都没有任何显示,watch也不行,根本找不到symbol… Continue reading…

64位Linux Ubuntu 12.10下Android SDK运行adb提示找不到libncurses.so.5的解决方法

尝试在64位Ubuntu下安装Android开发环境,装好SDK后运行Eclipse,在打开Android设置选项时出现

adb version’ failed!
/opt/android-sdk-linux/platform-tools/adb: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

这样的提示,发现直接到SDK的platform-tools中运行adb就会报这个找不到libncurses库的问题,看了一下软件中心里名字叫libncurses的库已经正确安装了,为什么还会报找不到的错误呢?
Continue reading…

WordPress仪表盘Dashboard上首页小工具widget不能保存布局问题

现在的WP版本是3.5.1,一直没太注意过这个问题,以前应该是可以保存后台仪表盘首页上的widget布局的,刚刚发现无论怎么拖动重排小工具后,刷新页面或者切换到其它管理菜单后再回来都会重置回之前的布局,很是奇怪。

看到网上有人说可能是插件导致的问题,于是各种插件关了开开了关,卸了装装了卸的,折腾了半天也没有解决问题。于是自己打开phpmyadmin上mysql数据库里寻找一下线索。

由于以前也没太研究过wordpress的结构,一开始就以为这个设置是保存在 wp_options 表里的,于是就和那表里唯一一个带dashboard字眼的记录 dashboard_widget_options 死磕了半天,浪费了不少时间!后来才意识到这个不是记录布局的设置,因为看到网上说这个布局是 per user 的,因此不应该记录在这个表里,这个记录保存的应该是每一个widget自己的某些设置。

后来顺利的找到了 wp_usermeta 中,发现有几个带 dashboard 字的设置,试了几下显示/隐藏,展开/收起一些widget,均找到了对应的数据库记录变化,而且这些设置,包括改1 2 3 4列的设置均能正常保存,唯独改变布局不能保存。而且最奇怪的是,保存布局的记录关键字是 meta-box-order_dashboard ,而在后台拖放widget后ajax也成功触发了数据库记录更新,记录都是跟着正常变的,看了下大概内容也确实和重排后的位置一致,可就是刷新页面后位置一直不变。

拿着数据库关键字google了一下,找到了一个貌似是wordpress svn的trac镜像中的一条bug记录:http://lists.automattic.com/pipermail/wp-trac/2010-May/080160.html 这里有人回复说需要删除旧的metaboxorder设置,于是又回来自己过了一遍数据库表中的所有记录,果然发现了一条叫 wp_meta-box-order_dashboard 的记录保存着和上面关键字内容类似的信息,但无论怎么重新摆放小工具,这个记录的值始终不变!于是果断将其从表中删除,再回来试了一下,一切ok!估计是以前某个版本升级时的历史遗留问题吧,耽误了不少时间…

Eclipse ADT的Custom debug keystore所需证书规格

最近开始研究Google Play的In-app Billing IAB内置计费API,发现一个比较烦人的问题就是测试时应用必须经过正式签名,而默认Eclipse ADT调试运行使用的是临时生成的Debug专用证书,默认为C:\Users\XXX\.android\debug.keystore

于是每次调试内置计费必须使用ADT的Export Signed Application Package打带正式签名的包,比较麻烦。后来发现ADT允许自定义调试用证书,在Window->Preferences->Android->Build->Custom debug keystore这里,试了一下选择正式证书后提示:”Keystore was tampered with, or password was incorrect”,如下图所示:
Continue reading…

更换主机空间后的wordpress媒体上传带中文文件名图片的问题

给博客搬家后发现wordpress后台多媒体中上传图片时不能用带中文文件名,否则穿完后会出现红叉,访问生成的URL会出404!
记得之前在Dreamhost上是没有任何问题的,研究了一番后问题是这样出现的:WP的php脚本使用的字符编码是UTF-8,所以上传后生成的文件名字符串也是UTF-8编码的,而主机系统的设置应该是ANSI的(GB2312或GBK之类的),所以导致请求文件名编码与实际文件编码不一致,导致404错误。而之前搬家时搬过来的以前上传的文件没有问题,就是在主机控制面板上的webftp里看到的都是作为ANSI解析的UTF-8字节乱码,而后来上传的图片文件虽然用浏览器访问会404,但在webftp里看着却一切正常,这该死的字符编码问题!
后来搜到了这篇博文:Wordpress中文名附件上传问题的解决方案 http://blog.csdn.net/wonderyl/article/details/5682095

Continue reading…