首页 > 代码库 > ANE的用途及android平台需注意的地方

ANE的用途及android平台需注意的地方

flash是跨平台的,虽然目前用flash开发手游的公司比较少,但是也是存在的。目前一般手游用cocos2dx的比较多,3d手游一般都用unity3d。以前做webgame的公司转型做手游后,技术转型也是一个问题,所以基本都会能采用现有的技术体系就采用,不会硬是转型用主流。以前做webgame,使用flash还是非常多的,所以转型手游后也基本会用flash开发手游,也不会有什么问题,除了极少数的机型兼容性问题外,基本没别的问题,都说flash的性能差,但是做一般性的、不是很复杂的游戏足够了,不会因性能问题产生什么问题。手游经常要和第三方平台合作,所以一般也需要接第三方平台提供的sdk,sdk功能一般都是登录、注册、支付,再加上一些其他的统计。flash开发的手游可以分别打包成apk和ipa运行于Android和IOS,在接SDK时需要分别接Android和IOS的SDK,都是通过ANE来完成的。

ANE是Adobe Air Native Extension的缩写,即Air的本地扩展,flash中as3不能直接调用系统平台本地的接口和方法,ANE的作用可以理解为是flash as3和本地系统接口方法的一个桥梁,通过ANE封装一些调用本地接口的方法,然后在as3中再调用ANE中的接口方法,来达到调用本地接口方法的目的。

在这里讲不详细说明开发ane的具体代码和过程,只是对ANE作一个简单的说明,可以快速了解ANE是什么,有什么用,以及需要注意的地方。

下面是我在开发android ane过程中遇到的一些问题:

1、海外平台方一般提供的sdk有2个工程:平台方自己的sdk和facebook sdk(或google play service sdk),有经验的平台方自己的sdk中是动态获取资源,不是通过R.xx.xx来获取的,这样我们就不需要在ane中去处理资源的映射了;但是facebook sdk或google play service sdk都是通过R.xx.xx来获取资源的,我们需要在ane中手动将资源重新映射一遍,否则打成ane包(*.ane)后放到flash工程中会因找不到资源而导致无法将flash工程无法打包,找不到资源的原因是flash mobile项目打包时会自动生成一个以air.xx.xxx....开头的包名。具体映射资源的方法这里简单说下:

  • 可以先将facebook或google play service sdk的jar包拷贝的自己的ane android工程下,然后查看facebook或google play service sdk中R文件所在包名,在自己的ane android工程的src包下创建一个一致的包名,将R文件拷贝到该包目录下,将R.java中的final修饰符去掉,这样才能修改R中的值,将R中所有的资源ID全部重新赋值即可。通过FREContext.getResouceId("xx.xx"),具体怎么搞可以baidu下。
  • 有的sdk中包含.so文件,需要将.so文件按照官方说明放到指定目录下就行了,但是我遇到了一个奇怪的问题,加入.so文件后打成*.ane,再将ane引用到flash工程中打成apk包无法安装,我们需要找一个签名工具将apk重新签名就好了,具体原因不详,可能有别的方法解决,但是我最终是通过重新签名成功的。
  • 海外平台方一般提供的sdk有2个android工程,我们需要手动将这2个工程的资源文件合并成一个,最后将合并后的res文件夹放到指定目录下来生成ane,一般就是重名文件如strings.xml这样的文件就需要手动合并内容,其他的非重名文件可以直接拷贝。
android ane就这些吧,搞定这些基本就没什么问题了。ios ane要简单的多,我没做过ios ane,但是同事们只要照葫芦画瓢基本都做出来了,但是做android ane时照葫芦画瓢会让你获得意想不到的Error,反正我是折腾了很久,做android ane时。

之后有时间会将android ane的具体步骤详细的记录下来,可能N年以后还会接触呢。不过我相信adobe flash也会慢慢解决开发ane繁琐复杂的情况的,到时候可能做ane就不会有那么多的坑爹坑娘坑全家的各种莫名其妙的问题了。

ANE的用途及android平台需注意的地方