这篇文章是对前面系列文章的补充。传送门
也是我最近遇到的几个小问题。称不上有什么技术难点。但是很值得推敲。
A.合并Jar。对于混淆比较严重的jar源码包来说,例如银联的。
会出现类似一下的源码文件。这种文件若解压出来 在一些系统(例如WIN系)的会删掉掉一个。
因为在Win系的系统里面文件名不分大小写。遇到这种包的合并若不小心打包ANE后就会报ClassNoFound错误。
继续阅读“[AIR接入Android 平台]特别篇-合并jar和调用.so文件的特别补充”
光荣在于平淡,艰巨在于漫长
AIR技术分析
这篇文章是对前面系列文章的补充。传送门
也是我最近遇到的几个小问题。称不上有什么技术难点。但是很值得推敲。
A.合并Jar。对于混淆比较严重的jar源码包来说,例如银联的。
会出现类似一下的源码文件。这种文件若解压出来 在一些系统(例如WIN系)的会删掉掉一个。
因为在Win系的系统里面文件名不分大小写。遇到这种包的合并若不小心打包ANE后就会报ClassNoFound错误。
继续阅读“[AIR接入Android 平台]特别篇-合并jar和调用.so文件的特别补充”
BUG引发:在-app.xml中 例如:
[code lang=”java”]
<meta-data
android:name="gfan_pay_appkey"
android:value="325077622" />
<meta-data
android:name="gfan_cpid"
android:value="中文" />
[/code]
出现中文的话 则会报错例如:
[code lang=”java”]
AndroidManifest.xml: ERROR Error: No resource found that matches the given name (at ‘value’ with value ‘????’).
[/code]
的错误。
把中文改为英文则正常。
解决方式:
显然AIRSDK也是基于全英文的 没考虑全编码问题。只要修改打包工具ADT 加入编码识别就OK了。这种方法应该是可行的。可是当我想到的时候又已经不需要配置中文了。
关于这个BUG的描述和之前的解决方式:传送门
之前的解决方式是用apktool反编译 修改XML,但是这种方式繁琐并且容易出错,
由于手游很多很多的小渠道。经常要出几百 甚至上千个APK。不可能去反编译那么多个包的。
而且ADT对apk的签名是用.p12文件 反编译修改会改变签名。
我之前就是由于签名错误导致玩家无法更新新版本的应用。
这BUG会引发:
1.例如在支付界面的时候 按home跳出桌面 再返回 则支付界面消失(看支付宝验证短信需要跳出桌面)
2.如果是GPU加速模式的话 会丢3D加速环境
1.之前传送门所说的 用apktool反编译 修改XML的launchMode 但是这种方式 太繁琐 不适合批量出包的项目,我隔壁的项目组就每天要出500个包的。一个一个去反编译修改 这要到那一天。
2.使用我修改过的adt.jar替换 FBSDK下的 例如我的是替换:
D:\FB\Adobe Flash Builder 4.6\sdks\AIR3.5\lib\adt.jar
至于ADT.jar的修改教程。 这个技术已经不在这篇文章所在的范畴了。
BUG描述:
1.项目在打开SDK 登录 或者支付 论坛 个人中心等界面之后
2.按下 home 键
3.重新打开应用 SDK界面会消失
引发原因:
这是由于游戏主Activiry的launchMode 和 SDK 的activity的launchMode 有冲突引发的,AIR项目的主activity的launchMode是SingleTask 反编译后查看如下:
[code lang=”xml”]<activity
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:label="@string/app_name"
android:name=".AppEntry"
android:screenOrientation="landscape"
android:launchMode="singleTask"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize">[/code]
而我们SDK的launchMode就由各个SDK客户端开发自己定义了。
关于android四种launchMode的详细情况请看 传送门
解决方式:
1.反编译修改主activity的launchMode为默认 就是去掉;
2.修改SDK所有activity的launchMode为 SingleTask;
注意:这种方法并不适用与全部SDK,具体还需要看SDK的情况。我正寻找更简单的解决方式。
一点声明:我的水平有限 这里仅仅只能写出我认为可行的方案 和 代码
打包ANE会经常遇到找不到资源R.XXX ID的问题,或者是找到的资源ID不对 然后报NULL POINT错 直接程序崩溃。
AIR与android原生取资源方式的区别:
ADOBE给出的取资源的方式是:
[code lang=”java”]
_context.getResourceId("id.AlipayTitleItemName");
[/code]
但是原生JAVA取资源的方式是:
[code lang=”java”]
findViewById(R.id.AlipayTitleItemName);
[/code]
ADOBE的取资源方式 是我们在ANE中使用到资源的时候的取法,
但是一般运营商提供的SDK都是混淆的jar 取资源的方式都是清一色的findViewById。
而我们不可能去修改SDK 的jar。除非你的逆向能力到一定水平。其实修改SDK的jar也不是不可能的。对于android逆向有兴趣的同学 可以去试试。其实android逆向也是一门非常好玩的技术。如果你有兴趣 我们可以一起探讨。
继续阅读“[AIR接入Android 平台]处理res资源之找不到资源ID”
UC SDK的问题之前已经说明:
今天把版本发给UC 的时候 那边看到我把所有SDK的界面都给横屏了 表示不能通过。
也就是说。必须竖屏!!! 没办法 不竖屏硬是不给发布。
那怎么办呢??追根溯源。这个问题就是由于AndroidSDK在横竖屏切换时,activity被销毁
但是设置
[code lang=”java”]android:configChanges="orientation|keyboardHidden|screenSize"[/code]
属性并不能解决问题 这可能是和GPU渲染的特性有关。
也就是说 对于 主游戏启用GPU的activity 不能横竖屏切换。知道这一点那就好办了。
那我们传一个自己新建的activity给SDK就可以解决问题了。
这里做一个记录。
UC SDK“ BUG”描述:
目前我的项目是 必须要求 横屏的。
但是UC的SDK 除了登录界面可以设置横屏之外。
个人中心的 账户 论坛 攻略 帮助 界面
支付界面 全部清一色的竖屏。
跟UC官方对接人沟通良久,得到的答复是:
“爱莫能助” ,“我也跟产品提了几次”,“我们那么多产品都是竖屏的都没问题,所以肯定是你们开发商的问题”
得,虽然我早就知道他们会这样说 但是还是抱有一丝希望他们能改进。毕竟除了UC之外 其他全部android SDK几乎都提供横屏 竖屏的方式。
之所以必须使用横屏 前面的文章也说了。应该是 Starling+AIR 项目初始横屏的原因。在切换横竖屏的时候会强制退出游戏 不是FC 不是内存爆掉 不是OOM
总之肯定是一个AIR的坑。
继续阅读“[AIR for Android] 让UC SDK 一辈子横屏”
这里做一个记录。
91ANE BUG描述:
目前我的项目是 必须要求 横屏的。
在昨天有玩家 和 平台方的反馈 91的登录 在切换横竖屏幕部分设备(例如天语某机器 )上出现闪退的情况
而平台方只要他们测试的有一台机器有问题 他们就会把你的版本打回去 拖延你升级时间 推广时间 非常恶心。
所以这个BUG虽然只针对极少极少的机器但是 也必须马上解决。
我的解决方式:
经过我的检查 91ANE共提供三种显示方式的选择:
SCREEN_ORIENTATION_PORTRAIT 竖屏(值为:0)
SCREEN_ORIENTATION_LANDSCAPE 横屏(值为:1)
SCREEN_ORIENTATION_AUTO 自动(由重力感应自动选择)(值为:2)
继续阅读“[AIR for Android] 91ANE 横竖屏android设备闪退BUG的解决方式”
一点声明:我的水平有限 这里仅仅只能写出我认为可行的方案 和 代码
文字国际化 其实是android编码的规范之一。但是不同的运营商提供的SDK 这块处理的都不一样。
就目前我接触过的平台来说。当乐 UC 91 360 算做得很好。
但是其他小平台 特别是有一个运营商 他们客户端技术才一个人。
都很不注重android文字国际化的问题。打包进ane的资源 布局文件XML必须是规范的国际化处理的。
否则就会在打包APK的时候报错。
继续阅读“[AIR接入Android 平台]处理res资源之文字国际化”
AIRSDK版本:3.5
项目使用的引擎:Starling
纹理使用流程:加载ATF – 解压 -上传到GPU – 渲染
打包:加入运行时 RunTime.apk 打入APK
BUG重现:
在一部分机器上 纹理会完全丢失。例如HTC的部分机型。
解决方式:
A.换AIR3.7以上的版本打包
B.不加入运行时 (这样玩家会在打开项目的时候自行下载 )
C.把AIR3.7 或者3.8的 RunTime.apk 替换AIR3.5的RunTime.APK(这种方法和换SDK没差别好像)