2014

修改Android签名证书keystore的密码、别名alias以及别名密码

之前在测试Eclipse ADT的Custom debug keystore自定义调试证书的时候,发过一篇关于调试证书规格的博文:Eclipse ADT的Custom debug keystore所需证书规格,提到过自定义调试证书的密码和alias命名以及alias密码都是有规矩的。其实Android应用开发接入各种SDK时会发现,有很多SDK是需要靠package name和keystore的指纹hash来识别的(百度地图SDK、Facebook SDK等等…),这样如果使用默认自动生成的debug keystore的话就会给开发调试工作带来一些麻烦。这时可以通过修改正式的release keystore,生成一份“遵守规矩”的临时自定义调试证书给开发时用,就方便多了,具体方法如下:

Continue reading…

Android Studio中项目NDK原生部分整合方式

UPDATE 2016.11.14:
目前的新版Android Studio 2.2已经可以完美支持NDK原生代码整合,通过cmake以及lldb实现c/c++代码调试,并且支持代码补全等功能!

自从Android Studio出现以后,我就很少再使用Eclipse+ADT的组合做Android开发了,更快的反应速度和更人性化的操作方式以及智能感知方面等等的优势,确实体现出了Google最初宣传Android Studio时的大部分特点,不过这些种种优势目前还只是体现在Java应用开发部分,而对于需要用到C/C++的Android NDK开发时,目前还没有很好的支持,当然,参考目前Android Studio的版本迭代速度来看,这应该也只是时间问题,当初ADT刚出的时候也是问题多多,包括后来的CDT+NDK支持,最初也只是支持原生代码的编译生成so,过了很久很久的某次update才加入了原生代码的可视化调试功能(当时也是历尽万难才测试成功的,还只是很简单的混合ndk项目…)。

最近看到了ndk又更新到了r10b版本,而且又据说新版的Android Studio中已经加入了一些ndk支持,于是正好一次测试一下(Android Studio beta 0.8.14, android-ndk32-r10b-windows-x86_64):

Continue reading…

再次优化博客的加载速度,这次是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过来以前写的,也没出现过类似的问题,很是奇怪。

Continue reading…

更新Yosemite 10.10后Android Studio无法启动的问题

更新最新的Mac OSX系统10.10 Yosemite后,忽然发现原来用的好好的Android Studio不能运行了,提示需要安装JDK 6,而Eclipse却没发现有任何问题。查看了系统偏好设置中的Java信息,发现是Update 7了,难道说Android Studio和10.10带的Java环境不兼容了?

又不想再装JDK 6(好像也装不上…),好在没过多久就找到了解决方法:打开”Android Studio.app/Contents/Info.plist”文件,修改其中的JVMVersion项值为1.7*(原来是1.6*),再次启动,问题解决!

优化了一下博客页面的加载速度,又是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开发账号,像这样:

Xcode6

而不是像之前只要有对应App ID的开发证书及描述文件就可以了,这样就会导致合作发布App时的不便,因为一般都是只提供开发证书带私钥导出p12及相关的开发生产环境的Provisioning Profile,共享开发账号密码的话会带来诸多不便,这个在Apple开发论坛上也看到有人问到,最后终于找到了绕过这步的方法,其实就是通过Xcode命令行操作的方式导出,具体操作如下:

Continue reading…

更新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方法

关于protobufcocos2d-x lua的集成,参考过网上的一些资料,考虑过用google官方实现,但感觉过于臃肿,且没有直接的lua接口,实际应用需要做的框架级的工作较多,再有就是protoc-gen-lua(https://code.google.com/p/protoc-gen-lua/),这个感觉就比较轻量了,但是还是有需要proto转换lua的前置操作,另外就是据说某些protobuf的使用方式还不被支持,最后发现了云风做的一个实现:pbchttps://github.com/cloudwu/pbc)感觉思路很不错,而且有lua binding,决定尝试下cocos2d-x的集成。

Continue reading…

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.pdfhttp://www.perforce.com/sites/default/files/pdf/perforce-git-comparison.pdf看出来商业软件确实是做的比较到位!),虽然很多描述在亲身体会过后感觉并不尽然,不过还是希望P4能带来更多的“然”。

费了这么多话,还是写点正题吧,目前P4也没用的多么深入,更算不上多精通,所以比较之类的话题还是算了吧,记一下关于文本换行处理设置的心得吧。

Continue reading…