[AIR接入Android 平台]运营商登录付费接入ANE打包心得

国内除了91等几家声名显赫的运营商会提供已经做好的ANE给ADOBE 的移动开发者之外。其他的运营商一般只会提供IOS封装库 或者是Android 的JAR 封装库。这对于Air For Android 开发的移动应用来说。接入这些运营商就需要应用开发者自己实现ANE。

这几天一直在做android运营商的接入。这里就先把这几天的心得先发上来。大概下一次就会把Air For IOS Of ANE 的心得一并发在这里。

针对Android的ANE打包:

配置JAVA android开发环境 配置各自系统变量等略过。

首先说说我这次拿到运营商提供的JAR库的结构。(如果你拿到的SDK组成和我这次的大同小异,那你可以看完省很多弯路 如果你拿到的SDK比我拿到的复杂 那你仅仅可以参考其中的一些资源打包等方法。很多情况还是有不同的)

我这次运营商提供的有 :

A.JAR库文件一个;

B.还有布局文件库(res文件夹下的一堆UI布局文件);

C.原生android写的DEMO一个;

D.开发文档若干;

接下来说说我从拿到SDK到实现ANE登录接入的过程(由于打包ANE主意事项非常非常的多,稍微错一步 如果没有及时发现,就会郁闷一整天):

1> 这里我们需要动手术的只有 A,B ;C只是作为我们实现AS接口的时候的JAVA端编码结构参考DEMO;拿到手后 提醒下大家 应该把D 开发文档仔细研读,我今天就因为这个问题差点和运营商接头的CODER打了一架。淡定淡定。脾气还是不够好。(因为我问一个资源的路径 都说了整整一个下午 对方才知道我要的是什么。。也许是我的表达能力实在不行,好吧 )。

2> 把开发文档仔细又仔细的读过一遍之后 我整理了一下思路,我的思路是:自己写一个JAR实现和AS的拓展接口,在自己写的JAR中调用运营商提供的第三方库。从自己写的这一个JAR为跳板 实现接入的最终目的。我相信大家的思路基本都是一样的。

3> 分析第三方JAR 和布局文件。把第三方JAR解压发现里面含有图片等资源,(我对android原生开发不太了解,不过据我搞原生开发的朋友说 在JAR中打入资源图片 是一种不可取的方式。),我们都知道 ANE打包的大部分都是源码,是针对源码的拓展。网上很多教程的打包ANE 其实导出自己写的JAR方式都是有误的,其实正确的方法是 取在BIN文件夹中 的那个自动生成的JAR,这个JAR最纯粹 不包含其他杂质。如果是用ECLIPSE直接右键项目打包出来的JAR的话 也是可以用的,但是这个包包含了太多太多没有用到的东西。这样根本是不利于维护的,如果下一位开发者要对你做的ANE进行维护(平台SDK更新 ANE同步更新等情况),解压出来你的一堆东西 会困惑不已的。

所以打包JAR 这里推荐直接 是拿ECLIPSE自动生成的那个 纯代码无杂质的JAR。注意即使是对于有资源的第三方JAR,取的自生成JAR 依然是去BIN文件夹下自动生成的那个,不要去导出JAR 那会大很多,针对移动设备来说 APK大小 和用户的下载量是能构成正比的。

自己构建的连接AS的JAR库编码结构直接找开头的传送门去看入门教程。这里全部都略过。

4> 打包成最后的一个JAR,可能很多人疑惑,不是已经自动写了一个JAR么 怎么还要打包成最后一个JAR,原因是这和ANDROID开发的机制有关,这和我们AIR开发不一样,我们AIR开发使用那个SWC 在打包APK的时候 这个SWC都会自动会加进去,但是这里android调用JAR 仅仅是保留调用而已。也就是说 我们的JAR 调用了 运营商的第三方JAR 之后 生成的JAR 仅仅是几个源码文件而已,并没有包含这个第三方JAR。

这里把 我们写的JAR 第三方JAR 打包成最后一个JAR 就是这个ANE 生成的最需要注重的部分。在几天的摸索之后,发现天地会某兄台的方式可以拓展并使用。使用这里方法提供的命令行如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@echo off  
::转到当前盘符
%~d0
::打开当前目录
cd %~dp0
::你做的主JAR包的路径
set MainJar=MYANEJavaLib.jar
::第三方JAR包的路径
set ExternalJar=3rdApiLib.jar
::第三方JAR包顶级包名称
set packageName=com
echo =========== start combin ==============
::解压第三方包
jar -xf %ExternalJar%
::合并主JAR包
jar -uf %MainJar%%packageName%
::如果还有别的顶级包可以接着合并,例如:
::jar -uf %MainJar%%packageName2%
::jar -uf %MainJar% org
::jar -uf %MainJar% cn
echo =========== over ==============
echo 再点一下就结束了--小Q
pause

我们就在最后的合并中拓展下。最后的合并顶级包中,在我解压出来的运营商的JAR中 是有好几个顶级包的,如图

a.jpeg

其中ASSETS 就是所包含的资源文件夹,我们不需要打进去,其中另外的两个 也是源码文件夹。一并打进去。只要修改打包命令行就可以了。现在把资源文件夹提出来。接下来说资源的处理

5>打包ANE重中之重之 打包资源。

打包资源是我搜索的所有朋友都会遇到的问题。在ADOBE的官方教程中 提到的也 只是只言片语。毫无教程可言。但是对于这个问题是不是没有办法了呢。其实并不是。接下来是我总结的资源图片 和布局文件的处理方式。说是打包 其实也不算是打包。其实有方法可以避免资源问题,那就是和运营商沟通,使用动态路径取资源。在初始化SDK的时候 传入资源文件路径 等 是最完美的解决方式。但是但是但是但是。。有那个运营商会听你说呢?答案是根本没有。

我们总是不能让运营商听我们的话。而只能选择自己的方法解决问题,因为老大的期限摆在那里。你拖一分 挨骂的几率就大一分。

打包资源文件 分为两种:

A,这一种在ADOBE的官方文档中有一句话提到了。就是关于RES文件夹下的文件,处理方式是在打包ANE的时候 把RES文件夹全部复制到响应平台的文件夹下,例如Android-ARM,Android-x86,Windows-x86 ,下(不要告诉我 你不知道这几个文件夹怎么来的。。如果实在不知道 请点开文章开头的传送门。)

就像这样:

这是91的打包方式,91的接入把资源全部放到res文件夹下,这种情况下即使91不提供ane 实现91的ane也是最最简单的;

b.jpeg

B,如我这次遇到的情况,资源在外面。在ASSETS文件夹下。我们都知道ASSETS是android项目默认的资源文件夹?(不知道真假 但是我看过的几个项目都是这样的),这种情况下的解决方式是(感谢A闪提醒)把ASSETS下的文件或者文件夹(注意注意注意!!并不是连同ASSETS文件夹 而是ASSETS文件夹下的所有文件 文件夹)复制到你的AIR项目的src文件夹下 就是源文件文件夹下(注意注意注意注意!!是你的项目的src文件夹 不是ane文件夹)。这样打包APK的时候 会把资源放在你ane可以调用的地方。

总结的来说就是:打包ANE的时候 资源如果是ASSETS的话 就放在ane外部 并不是打包进去ane。

OK 总结完毕。

附打包ane命令:

1
2
3
“XX:\\XXX\\Adobe Flash Builder 4.6\\sdks\\AIR3.5\\bin\\adt” -package -s

toretype PKCS12 -keystore qlwx.p12(密匙文件) -storepass 1234(密匙密码) -target ane XXX.ane extension.xml -swc *.swc -platform Android-ARM -C Android-ARM .

注意注意注意注意。命令括号不能作为命令。。是解释用的要去掉