Android中的ListView与iOS的UITableView提供了实现类似功能的方法,但在iOS中,表格控件的编辑状态一般都是通过菜单项触发的,而在Android中,则可以使用叫做ActionMode的行为(一般是长按列表项触发)进入表格项编辑状态,然后可以进行一些如多选批量删除之类的操作,方便快捷。进入ActionMode后,需要对列表项的选中状态进行图形上的表示,如加入选中标记,改变选中项背景颜色等,实现此操作需要配合AbsListView.MultiChoiceModeListener的事件通知及ListAdapter的getView操作:
Continue reading…
K-Res
再次优化博客的加载速度,这次是gravatar!
上次发现的拖慢源头是wordpress加载的google fonts,这两天又发现博客页面在打开时一直有高延迟的操作导致浏览器loading转啊转,虽然不想之前的那个在超时之前完全显示不出页面吧,但看着也挺烦人的,用chrome的开发者工具看了下发现是wordpress默认的gravatar头像无法加载,直接开了一下http连接,果然是又被B了…
试了几个function里加filter替换gravatar头像链接到镜像服务器的方法未果,于是到插件库里搜了一下,果然找到了个“谷歌字体与Gravatar头像加速”(http://www.igeeklab.com/),装上后发现自己的gravatar头像可以正常的、快速的显示出来了!不过duoshuo中没有设置过头像的用户默认gravatar头像还是没有转向到镜像地址,看了下多说论坛,发现也有反馈这个问题的,11月份官方人员的回复是正在准备替换头像方案,好吧,就先不管了。
既然谷歌字体也有加速,那么就关掉了之前的”Remove Google Fonts References”。
另外发现post页面内还会有一个zemanta.com的loader.js会超时,看了下原来是一个related posts的插件用到的,无奈删掉后替换了另一个相关文章的插件。
Android NDK中多线程JNI的local reference释放问题
首先声明这个问题是在Android系统中进行JNI调用时发现的,不确定是标准Java行为还是Android的特例,非Android系统仅供参考!
之前在做NDK开发时,自然少不了JNI的Java->C/C++以及C/C++->Java的互相调用过程,如一些常见的GetStringUTFChars,GetObjectClass等等,对VM的Java对象引用计数也略有一些概念,像GetStringUTFChars需要ReleaseStringUTFChars,DeleteLocalRef释放局部引用计数等,不过大部分情况下,没有DeleteLocalRef也没出什么太大的问题,这次在试验NDK的C+11支持时用到了std::thread和lambda表达式创建了native线程,如下:
workerThread = std::thread([this]() { g_pVM->AttachCurrentThread(&mJNIEnv, NULL); ... g_pVM->DetachCurrentThread(); } );
并在线程中进行了Java方法的调用,传递了一些字符串,结果没跑几个循环进程就crash掉了,看了下logcat提示的错误是:
JNI ERROR (app bug): local reference table overflow (max=512)
并打印出了最后200个local reference table中的东西,看了下有传的String有get到的Java class,于是想到了释放引用的问题,不过JNI调用的代码都是copy过来以前写的,也没出现过类似的问题,很是奇怪。
优化了一下博客页面的加载速度,又是Google…
也不知从什么时候开始就发现博客的页面,前台后台的都是,加载速度特别慢,loading半天才刷出完整的页面,今天终于忍不了了,打开浏览器的调试工具查看了一下,发现是WP在所有页面都有一个对fonts.googleapis.com上的字体的引用,由于众所周知的原因,这个引用拖慢了整个页面的加载速度…看网上已有不少相关的资料,有改php代码的有改映射的,我还是不喜欢直接硬改wordpress本身php代码的,所以选择了装插件的方式,装了个叫Remove Google Fonts References的插件,开启后速度又愉快的飞了起来。
Xcode 6导出ipa时必须登入开发账号的绕过方法
Xcode 6正式版Version 6.0.1 (6A317)已经放出Mac AppStore,之前为了体验swift也安装过beta版,但是并没有注意到6系Xcode对于导出ipa的变化,更新正式版后经友人提醒才发现新版本在Archive中导出ipa时会要求登入并选择相关的Apple开发账号,像这样:
而不是像之前只要有对应App ID的开发证书及描述文件就可以了,这样就会导致合作发布App时的不便,因为一般都是只提供开发证书带私钥导出p12及相关的开发生产环境的Provisioning Profile,共享开发账号密码的话会带来诸多不便,这个在Apple开发论坛上也看到有人问到,最后终于找到了绕过这步的方法,其实就是通过Xcode命令行操作的方式导出,具体操作如下:
更新Cocos2d-x 3.2 Spine runtime运行库到2.1以及相关lua binding的更新
Cocos2d-x整合的Spine运行库版本一直是1.1,在3.2的Cocos2d-x下测试Spine功能时,很快就发现了问题(用的还只是某个泄漏的1.7版本),在做动画时如果关键帧中有alpha的话,比如做淡入淡出动画效果,会发现只有在win32平台时显示效果和Spine Editor中看到的一致,其它平台,如iOS Android Mac等看到的都是alpha基本没有变化,而且有些像叠加出来的效果一样。看了一下官方运行库的github readme (https://github.com/EsotericSoftware/spine-runtimes),提到有可能是由于3.x对于图片的alpha预乘(Premultiplied Alpha)处理导致,可以尝试改变export时的图片选项,开启预乘,试了一下,发现依然不对,而且奇怪的是反复重加载错误Spine动画的场景时有一定可能性显示正确!这时第一反应就是整合的Spine runtime问题,于是准备更新到2.1…
Continue reading…
我的cocos2d-x-3.2集成云风pbc lua binding方法
关于protobuf的cocos2d-x lua的集成,参考过网上的一些资料,考虑过用google官方实现,但感觉过于臃肿,且没有直接的lua接口,实际应用需要做的框架级的工作较多,再有就是protoc-gen-lua(https://code.google.com/p/protoc-gen-lua/),这个感觉就比较轻量了,但是还是有需要proto转换lua的前置操作,另外就是据说某些protobuf的使用方式还不被支持,最后发现了云风做的一个实现:pbc(https://github.com/cloudwu/pbc)感觉思路很不错,而且有lua binding,决定尝试下cocos2d-x的集成。
Perforce (P4)的文本换行处理设置
CJ过后看到同事拿来的Perforce国内代理商的宣传单,发现已经把有很多游戏开发公司用P4这点作为一个宣传了,再看看目前现在svn项目中的.svn信息所占空间比正式资源还大的情况,决定体验一下这个很多游戏公司都在用的P4!
其实从上学再到工作这些年也接触了不少VCS(或者叫SCM),从VSS,CVS再到SVN,GIT,每次尝试一种新的系统时总会看到很多介绍和之前用的系统比的优势的文章(这点Perforce最是夸张,直接在官网上给出了和其它VCS比较的详细PDF文档,如http://www.perforce.com/sites/default/files/pdf/perforce-cvs-comparison.pdf还有http://www.perforce.com/sites/default/files/pdf/perforce-subversion-comparison.pdf和http://www.perforce.com/sites/default/files/pdf/perforce-git-comparison.pdf看出来商业软件确实是做的比较到位!),虽然很多描述在亲身体会过后感觉并不尽然,不过还是希望P4能带来更多的“然”。
费了这么多话,还是写点正题吧,目前P4也没用的多么深入,更算不上多精通,所以比较之类的话题还是算了吧,记一下关于文本换行处理设置的心得吧。
发现一款基于OllyDbg的Android ARM调试工具
最近研究Android平台的原生代码so保护时找到了一款很好用的汇编级调试工具:基于OllyDbg的GikDbg,传送门:http://www.gikir.com/product.php
上学时学习汇编曾经接触过OllyDbg,用起来很是顺手,结合着IDA的静态分析,学到了不少底层的知识。
最开始研究Android原生代码逆向时用的是IDA Pro,明显看到最近的版本中,IDA一直在强化动态调试能力以及对移动平台的支持,不过实际测试时发现,虽然的arm elf可以反汇编以及分析代码,但是动态调试时其自带的android_server远程调试服务器不能很好地支持Android 2.3.3以上的系统,网上搜索看到有人说可以使用gdb server来远程调试,但是试了几次都没有成功。android_server据说在IDA 6.3版以后就可以很好地支持4.0+的系统了,无奈没有资源…
后来很幸运的找到了这个GikDbg,显示抱着试一试的想法,用4.0.3的模拟器测试了一下,发现很好用,Attach,断点等一切正常,就是反应速度稍慢,这应该是gdb远程调试的通病吧…
最开始看官网上的Android版名字叫GikDbg.ART还以为只有开启ART运行时模式才行,后来实测DVM也没有问题,而且连模拟器都能很好的支持,当然物理设备的话需要root,否则push不过去gdbserver。
使用说明在这里:http://gikir.com/blog/?p=115,Android 4.0.3模拟器DVM运行时一次成功!