2015

使用Xcode 7 beta免费真机调试iOS应用程序

今天凌晨的WWDC15虽然没有熬夜守候吧,但也还是早起第一时间翻看了twitter的相关标签,发现比较实惠的一点就是新的Xcode 7可以在不加入每年99刀的Apple Developer Program的情况下真机调试应用了(不知道是不是迫于Android那“粗犷”的真机调试方式的压力,呵呵),而且Apple原来的三种平台开发账号合而为一了,不再分什么iOS的、OSX的、Safari的了,其它的什么iOS9、OSX 10.11的也都没细看,赶紧去下载了beta版:Version 7.0 beta (7A120f)来体验一下,当然,免费只是让你自己能随便玩玩,要想发布到Apple Store的话,保护费还是要交的。其实,从前几个版本开始、Apple就已经在简化Xcode真机开发时的什么certificate、provisioning profile之类的创建、修改操作了,后来又把test flight给收了,又改进了测试版本打包发布的流程,想想当年狂看文档研究Apple的Developer后台、iTC后台、certificate request、keychain什么的,真是不禁感叹,为了表示一下对当年吭哧的敬意,这里记录下Xcode 7如何免费真机调试iOS应用的简单方式:
Continue reading…

Perforce(P4)服务器设置Unicode模式解决中文文件、文件夹乱码问题

问题出现时的环境是这样的:p4d位于Linux服务器中,P4ROOT通过默认方式创建,并没有开启Unicode。客户端有Windows的P4V和Mac的P4V,此时用P4Admin查看服务器状态时可以看到Server Info中的Unicode support:是disabled的,这时在Windows端建立workspace并添加中文的文件、文件夹,Mark for add再Submit到服务器depot后,在Mac端的P4V直接查看Depot上的文件夹和文件时就会看到中文都变成了乱码,Get下来后也是会像%20这样的方式保存成文件名、文件夹名。检查后发现在服务器端没有开启Unicode模式时,客户端P4V中Connections菜单项内的Choose Character Encoding…是置灰的,而Perferences中Display内的Set encoding for all connections to:的选项在Windows上是CP936 GBK,Mac上是UTF-8,正是由于这个客户端非Unicode编码差异导致了Win上上传的中文在Mac下显示为乱码的问题。另外这时如果强制改变P4CHARSET环境变量,或通过命令行p4 set的方式改变连接的字符编码为UTF-8,再打开连接时会得到:“Unicode clients require a unicode enabled server”这样的错误提示!解决方法就是改变p4d服务器端的编码设置为Unicode模式:
Continue reading…

Cocos2d-x 3.6中的registerScriptKeypadHandler在Android真机上无法响应back键的问题

Cocos2d-x 3.6中使用Lua脚本作为主要开发语言,基于新的mvc框架,根据查到的响应安卓真机设备的返回按键back的方法,registerScriptKeypadHandler为Node下的注册按键事件侦听方法,新的框架中对此还进行了一次封装,在LayerEx.lua中的onKeypad实现,完成后的按键侦听代码如下:

function MyView:onKeypad(event)  
    if event == "backClicked" then
        -- back clicked!
    end
end
-- ...
function MyView:onCreate()
    display.newLayer()
        :onTouch(handler(self, self.onTouch))
        :onKeypad(handler(self, self.onKeypad))
        :addTo(self)
end

在Windows模拟器上测试时可以看到键盘上的任意键按下时都会触发这个回调函数,但是参数均为nil,读了一下源码发现在CCLuaEngine.cpp中的回调原生代码实现如下:
Continue reading…

OpenWRT软件包Makefile的recursive dependency问题

试验MT7620A路由器OpenWRT系统软件开发时遇到了如下的问题:

[admin@localhost OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2]$ make
Collecting package info: done
tmp/.config-package.in:7:error: recursive dependency detected!
tmp/.config-package.in:7: symbol PACKAGE_helloworld depends on PACKAGE_libpthread
Config-build.in:1745: symbol PACKAGE_libpthread is selected by PACKAGE_helloworld
#
# configuration written to .config
#
make[1] world
make[2] package/compile
make[3] -C package/helloworld compile
make[2] package/index

看意思是引用的libpthread导致了递归依赖问题,检查hellowolrd中的Makefile,Depends属性是这样设置的:
Continue reading…

Cocos创建Lua项目使用自定义runtime脚本没有调试输出的解决方法

使用Cocos集成开发环境配合Cocos Code IDE 1.2.0可以很方便的创建cocos2d-x lua binding项目并支持脚本语言的智能感知及调试。同时在添加native代码支持后还可以在一定程度上方便的进行原生代码功能扩展,如植入一些第三方库,扩展lua脚本功能等。但是在使用Cocos创建项目时,发现一个非常奇怪的问题,就是如果不使用自带的PrebuiltRuntime:C:\Program Files (x86)\Cocos\cocos-simulator-bin\win32\Simulator.exe 来作为主执行程序调试(Windows平台,其他平台未测试),所有lua脚本中的printprintf等调试输出代码都不会在控制台内输出任何内容!这样就丧失了添加native代码后自定义runtime执行程序的能力。
Continue reading…

Adsense终于把我的小广告还给我了…

自从Adsense找我验证Pin码开始后,没过多久我的小广告就被无情的剥夺了…再经历了三轮重发验证信件后,我彻底放弃了收到歪果仁信件的念头,话说这国际平邮是有多不靠谱啊!最后百度搜索了下,发现几乎就没有成功收到邮件的,解决方法都是人工验证。其实到了第二次重发开始,Adsense后台上就已经出现了人工验证的提示,不过进行人工验证的条件是三次重发后4周后都没收到。好不容易等到了这一天,准备好了身份证照片和一个特意准备的地址一致的中通快递收货单照片,提交到了人工验证后,没想到,基本是秒回的速度,就收到了Google发来的确认邮件,说Pin码限制已经解除…真是还不如一开始就这样人工验证得了,剥夺了我小广告这么长时间…

Android Studio创建Xposed模块项目时BridgeApi的正确添加方式

使用Android Studio创建的空项目作为Xposed Module App,对于Api Jar包的引用方式,一开始是按照傻瓜式Jar Lib的处理方式,复制XposedBridgeApi-54.jar到app/lib中,然后直接右键Add As Library,也就是在build.gradle中生成了

compile files(‘lib/XposedBridgeApi-54.jar’)

这样的代码,结果写完IXposedHookLoadPackage实现类,加入assets/xposed_init,修改manifest中的meta后打包安装,Xposed Installer中也顺利检测出了新安装的模块,开启后重启系统,再看Log中出现了:

java.lang.IllegalAccessError class ref in preverified class resolved to unexpected implementation

这样的异常提示,结果当然是hook的代码也没有正确执行,研究后发现原来是jar包的引入方式不对,不能以compile方式加入,而应以provided方式,具体如下:
Continue reading…

Android中ObjectAnimator为Activity、Fragment设置过渡动画效果的方法

在iOS应用开发过程中,视图切换时的过渡动画是一个不可缺少的部分,简单的在Storyboard中托几个VC后连接上segue就可以实现,并可以选择几种如push,popover之类的动画效果,复杂的可以通过编码实现自定义的酷炫过渡动画效果(Github上有许多开源项目可以参考)。

最近一直在参研Android L的UI新特性,看到了更多注重UX的设计理解(当然也包括许多酷炫的效果,如OverScroll的新EdgeEffect、大部分控件的触摸效果,Reveal Effect等),其实从4.0 ICS开始,Android UI部分就有了很大的改进,当然也包括本篇要记录的过渡动画效果。4.0之前的UI动画主要是以Animation框架实现的,而4.0后加入了新的ObjectAnimator框架(貌似是3.0就有了,不过3.x是在没有存在感…),可以提供更多的动画控制从而实现更多的动画效果,这里记录下ObjectAnimator XML动画资源用于Activity和Fragment切换过渡动画的基本方法。

Continue reading…

Android ListView在ActionMode时改变项目View背景颜色的处理方式

Android中的ListView与iOS的UITableView提供了实现类似功能的方法,但在iOS中,表格控件的编辑状态一般都是通过菜单项触发的,而在Android中,则可以使用叫做ActionMode的行为(一般是长按列表项触发)进入表格项编辑状态,然后可以进行一些如多选批量删除之类的操作,方便快捷。进入ActionMode后,需要对列表项的选中状态进行图形上的表示,如加入选中标记,改变选中项背景颜色等,实现此操作需要配合AbsListView.MultiChoiceModeListener的事件通知及ListAdapter的getView操作:
Continue reading…