关于这个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  反编译后查看如下:

<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">

而我们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给出的取资源的方式是:

_context.getResourceId("id.AlipayTitleItemName");

但是原生JAVA取资源的方式是:

findViewById(R.id.AlipayTitleItemName);

ADOBE的取资源方式 是我们在ANE中使用到资源的时候的取法,
但是一般运营商提供的SDK都是混淆的jar 取资源的方式都是清一色的findViewById。
而我们不可能去修改SDK 的jar。除非你的逆向能力到一定水平。其实修改SDK的jar也不是不可能的。对于android逆向有兴趣的同学 可以去试试。其实android逆向也是一门非常好玩的技术。如果你有兴趣 我们可以一起探讨。
继续阅读