自动化发布iOS包

2016-04-29 更新:加入 unlock-keychain


我们的 Android 包一直是使用 Jenkins 发布的。这样,不必依赖开发就能得到 APK 包,打包的工作从开发交给测试,运营同学直接从内网取包上渠道。整个发布过程,开发可以不必参与,非开发可以不接触源码。

现在 iOS 版本也需要加入到这个流程中,这就需要扩展以前的脚本工具使其可以支持 iOS 自动化打包。然后才能将其集成进入 Jenkins 中。

继续阅读自动化发布iOS包

error: ‘to_string’ is not a member of ‘std’

现象

cocos2d-x 2.2.6 项目的源码中使用了 std::to_string() 方法,使用 NDK r9d 编译的时候,报如下错误:

error: 'to_string' is not a member of 'std'

Application.mk 文件的部分内容如下:

APP_STL := gnustl_static
NDK_TOOLCHAIN_VERSION := 4.8
APP_CPPFLAGS := -frtti -std=c++11 -fexceptions -Wno-error=format-security -Wno-literal-suffix -Wno-deprecated-declarations -fsigned-char -Os $(CPPFLAGS)

换用 NDK 10e ,错误依然。

继续阅读error: ‘to_string’ is not a member of ‘std’

八一八 Apple Pay 、NFC 和“云闪付”

Apple Pay 在 2016-02-18 发布,朋友圈和公众号就被刷屏了。其实自从库克同学背着乔老爷子给 iPhone 装上了 NFC 之后,我们就都知道这一天迟早会到来的。

但是 Apple Pay 并不是什么 Apple 的超级武器, 甚至不是什么新东西 。Apple Pay 的最大得利者,很可能不是 Apple,而是 中国银联 。Apple Pay 是中国银联用来对抗支付宝和微信的一把剑。当然,这个合作是双赢的, 中国银联的“云支付”开始支持 Apple Pay, 至少能帮助可怜的 AppStore 服务器承担一点点支付失败绑定银行卡失败的骂名吧……至于说 Apple Pay 这把剑能不能如愿以偿地让中国银联拳打支付宝脚踢微信支付,我们就只能拭目以待了。

如果大家厌烦了这几天各大媒体、各个公众号像教傻X一样教学怎么在 Apple Pay 中绑定银行卡的话,就听我来说说后面的故事。 继续阅读八一八 Apple Pay 、NFC 和“云闪付”

常用开源镜像站整理

  • 2015-10-19 更新: 加入 npm 和 gem
  • 2015-10-20 更新: 加入 pypi
  • 2016-02-21 更新: 加入 msys2
  • 2016-07-13 更新: 加入 pypi 的豆瓣 https 源

由于众所周知的原因,许多开源软件的源站点在国内访问不顺,因此就有了镜像站这东东。这段时间我在各种开源技术中跳来跳去,也就积攒了不少镜像站,下面是个梳理。 继续阅读常用开源镜像站整理

dragonbonesCPP 在 Android 5.x 上问题的解决

在 cocos2d-x 3.4 上遇到了一个诡异的问题,记录如下。

平台和版本

  • 框架: cocos2d-x 3.4 final
  • 设备: Nexus 4/5/7 with Android 5.0.1/5.0.2
  • NDK version: r9d

问题描述

一个 dragonbonesCPP 骨骼动画,在 iOS、Windows、Mac OS X、Android with 4.x 上表现完全正常,但在 Android 5.x 下表现不正常。

具体表现为解析骨骼动画数据的时候,既不 crash,也没有任何报错信息,整个程序就停住了。 继续阅读dragonbonesCPP 在 Android 5.x 上问题的解决

cannot use ‘throw’ with exceptions disabled

cannot use ‘throw’ with exceptions disabled

在为 DragonBonesCPP/refactoring 的 cocos2d-x-3.2 demo 增加 Android 编译时,NDK 报了一个编译错误:

error: cannot use ‘throw’ with exceptions disabled
throw std::invalid_argument(“Invalid data.”);

这是由于 DragonBonesCPP 库使用了 C++ 标准异常,而 Android NDK 编译器默认不支持 C++ 异常控制导致。

但是,从Android NDK r5 版本开始,NDK 就开始支持 C++ 异常控制了,我的版本是 r9d ,为什么还会出现这个错误呢?

原来,NDK 编译器的 C++ 异常控制特性支持默认是关闭的。要打开它,可以这样做: 继续阅读cannot use ‘throw’ with exceptions disabled

华为荣耀3X(G750-T00)Recovery/Root/加入Google服务套件(GMS)

终于把糟蹋了2年的 Moto Atrix 2 换成了华为荣耀3X,花点时间做了Root、Recovery,以及加入了Google服务套件,下面是流程。

  1. 安装驱动程序;
  2. 用刷机工具刷入Recovery(线刷);
  3. 在手机上启动Recovery(音量上+电源开机),刷入Root包实现Root(卡刷);
  4. 同样使用Recovery,刷入Google服务套件包(卡刷)。

以上除了第4步Google服务器套件外,所有的资源和教程都可以在这里找到:华为荣耀3X(G750-T00)一站式Root/Recovery

第4步对我最为重要,但目前网上没有找到针对荣耀3x的Google套件。我回想起以前 摆弄Evo 4G 的时候,使用了CyanogenMod 提供的套件。于是找到这篇文章:CyanogenMod
Rom加入Google Apps官方套件
,尝试刷了一下,一切正常。

荣耀3X使用的是 Android 4.2.2 版本,因此对于 GMS 选择对应的 4.2.2 套件即可。该网站下载较慢,我已将其传到百度网盘上共享:

朝鲜语/韩文字符在Anrdoid4.2.2上不显示Korean text isn’t shown in Android 4.2.2

Korean text isn’t shown in Android 4.2.2

环境

  • 编译SDK:AIR 3.6/3.7
  • 测试设备:Nexus 7(Android 4.2.2)/Samsung Note 2(Android 4.1.2)/Moto Atrix 2(Android 4.1.2)
  • 测试模拟器:Android 4.2.2/4.1.2

现象

  • App中使用朝鲜语/韩文字符(UTF-8编码)的文本,在Android4.2.2系统上不能显示,模拟器和设备均出现这个问题;
  • 不仅是App的显示有这个问题,App在Android系统App列表中的名称也无法显示;
  • 无论设备语言是英文、朝鲜语/韩文还是中文,这个问题都会出现;
  • 同样的App放到Android 4.1.2及以下系统中均表现正常;
  • 使用中文字符(UTF-8编码)的文本,无论在Android 4.2还是其他系统上,均表现正常;
  • 如果希望看现象截图,可以看这里:http://forums.adobe.com/message/5361043#5361043

解决过程

  • 我在 Android 项目的 issue 列表中发现了同样的问题 Korean font/locale unavailable in Android 4.2 ,但该问题没有得到正面答复。从截图上看,提出该问题的也是中国开发者。这是个巧合吗?
  • 我怀疑是AIR的问题,因为如果这是Android操作系统问题,那韩国的Android 4.2开发者怎么办?为什么我用英文搜索不到相关信息?我在 AIR Bugs and Performance Issues 上询问了这个问题;
  • 2013-05-29,Adobe的员工Pahup回复我AIR 3.8 beta解决了这个问题。我在labs上看了一下,3.8 beta确实更新了,更新时间就是今天。但经过实际测试,这个问题依然存在。
  • 2013-05-30,Pahup回复说需要设置字体属性,尝试之后,果然OK。

解决方法

首先确保使用AIR 3.8SDK。

若使用Flex,可以通过设置 fontFamily 来支持Korean字符显示,例如:

<s:Label text="고속도로"  fontFamily="NanumGothic"/>

若使用TextField,可以通过设置 TextFormat 的 font 属性来支持Korean字符显示, 例如:

var __label:TextField = new TextField();
var __ft:TextFormat = new TextFormat();
__ft.font= "NanumGothic";
__label.defaultTextFormat = __ft;
__label.text = "고속도로";

以上做法,只有AIR 3.8支持。因此,我还必须要等待AIR 3.8发布。

ANE Toolkit增加重启自身功能

新功能

让Android应用能够重启自身。iOS就别想了。

本功能由 rect 编写。

文档

http://zrong.github.io/anetoolkit/doc/org/zengrong/ane/tool/RestartCont.html

用法说明

//先关闭当前app
NativeApplication.nativeApplication.exit();
//重启
ANEToolkit.restart.restartApp();

注意事项

需要在应用程序描述文件中加入如下Android标签:

<application android:enabled="true">
    <!-- 以下receiver和service为重启APP所用 -->
    <!-- 若希望修改indent name 可以修改JAVA源码 org.zengrong.ane.funs.restart.AppRestart 中的对应字符串 -->
    <receiver android:name="org.zengrong.ane.funs.restart.BootSystemReceiver" >
        <intent-filter>
            <action android:name="com.android.rect.restart.airApp" />
        </intent-filter>
    </receiver>
    <service android:name="org.zengrong.ane.funs.restart.NotificationService"></service>
    <!-- 重启APP需要内容完毕 -->
</application>

完整的应用程序描述文件可参考 范例项目的应用程序描述文件

范例项目中已经加入 新功能的调用范例

ADT error 100 Descriptor cannot be parsed

使用AIR打包Android APK的时候,碰到了error 100错误,具体错误提示为:

D:\works\tools\anetoolkit\project\sample\src\ANEToolkitSample-app.xml: error 100
: Descriptor cannot be parsed

根据 Adobe提供的文档 ,error 100属于应用程序描述文件XML语法错误。

但是,我的XML语法明显是正确的。

花了1个小时测试,发现问题出在注释的位置上。 继续阅读ADT error 100 Descriptor cannot be parsed