AIR 3.7 SDK Bug:You uploaded an unsigned APK

AIR 3.7 SDK Bug:You uploaded an unsigned APK

2013-04-18更新:使用AIR 3.7 SDK打包的APK文件,出现了在某些手机上无法安装的情况,换回AIR SDK 3.6就一切正常。 2013-04-19更新:使用AIR 3.7 SDK打包的APK文件,在Google In-app Billing支付的时候,也出现了问题。具体表现为,Google Play支付成功,信用卡扣款成功,但Google Playe并没有正常返回支付信息,导致最终的支付无法完成。但改为AIR 3.6 SDK打包就一切正常。 我推测,是由于Google Play中上传的那个APK是使用AIR 3.6 SDK打包,必须使用AIR 3.7 SDK打包的APK文件替换原来的AIR 3.6 SDK打包的APK,才会支付正常。但由于AIR 3.7 SDK打包的APK在某些设备上无法安装的问题,我不可能再使用AIR 3.7 SDK去打包了。 2013-04-30更新:根据赵客的建议,向Adobe提交了此BUG:https://bugbase.adobe.com/index.cfm?event=bug&id=3552540


将一个需要更新的APK上传到Google Play的时候,Google Play提示我这样的错误:

Uploaded failed You uploaded an unsigned APK. You need to create a signed APK.

截图如下:

upload_apk_error

这个提示无疑是 错误 的。我并没有修改过任何编译参数,也从来没有修改过打包使用的证书。在程序编译正常的情况下去修改编译参数和证书?我不是吃饱了撑的么。

这个APK在Android设备上是可以正常安装和运行的,因此程序本身没有什么问题。

我怀疑了许多地方,比如是否有ANE需要签名,或者是否有某些Android权限比较特殊,都没有找到什么线索。

突然想起昨天曾经把 AIR 3.6 SDK 更新成了 AIR 3.7 SDK ,是否是这个原因呢?于是我将SDK切换回 3.6版本,果然一切正常了。使用 AIR 3.6 SDK 编译的APK包,Google Play上传和更新正常。

但是,这并没有解决问题。对于 AIR 这个 被Adobe寄予厚望的、BUG重重的、快速更新的 平台,我不可能永远不更新它。我必须找到真正的原因。

终于,在编译了几十个测试包之后,我终于找到了真正原因。

原来导致APK签名错误的罪魁祸首,是图标!

APK的图标是在 应用程序描述符文件 app-xml 中设置的,这是我原来的设置:

 1<!-- 此内容是AIR 的应用程序描述符文件的一部分 -->
 2<icon>
 3	<image16x16>assets/icon/16.png</image16x16>
 4	<image32x32>assets/icon/32.png</image32x32>
 5	<image36x36>assets/icon/36.png</image36x36>
 6	<image48x48>assets/icon/48.png</image48x48>
 7	<image57x57>assets/icon/57.png</image57x57>
 8	<image72x72>assets/icon/72.png</image72x72>
 9	<image114x114>assets/icon/114.png</image114x114>
10	<image128x128>assets/icon/128.png</image128x128>
11	<image144x144>assets/icon/144.png</image144x144>
12</icon>

我知道这样设置的图标有点多。其实Android不需要这么多图标。但iOS那个变态需要。早期写编译脚本的时候,对于iOS和Android使用的是同一个app-xml文件,需要在XML中包含Android和iOS支持的所有图标尺寸。现在虽然已经分开了,但旧的app-xml就一直保存了下来。

直到AIR 3.6 SDK,这样写都是没有问题的,打包出APK可以正常安装运行,也可以正常上传到Google Play。

可是到了AIR 3.7 SDK,这样写就不行了,这会导致我上面阐述的问题。可是纠结的地方就在于打包出来的APK是可以正常使用的,而且打包过程中,也没有任何的提示或者错误信息。

算了,多的话不说了,浪费的时间和精力那都是浮云。现在说解决方案。

1<icon>
2	<image36x36>assets/icon/36.png</image36x36>
3	<image48x48>assets/icon/48.png</image48x48>
4	<image72x72>assets/icon/72.png</image72x72>
5</icon>

对于Android来说,只需要3个图标就可以了,分别对应Android系统的低密度、中密度、高密度设备。

更详细的描述,可以在这里找到:Application icons

重新打包,搞定。

要查看我发现的更多Adobe产品Bug,可以看这里:AdobeBug