前言
拔开云雾见到明月之后才发现柳暗花明又一村.
修改的内容
1.自定义AIR主activity的launchMode,解决平台支付过程中activity堆栈被切掉的问题.
说明:改为默认的launchMode:android:launchMode="standard"
2.去除包名前缀"air.",虽然这无伤大雅 但是前缀带air总有一种不太好的感觉.
说明:默认为设置环境变量“AIR_NOANDROIDFLAIR=true”可去掉,
3.去除android资源国际化限制.
说明:修改aapt编译参数。
4.彻底解决android资源ID找不到的问题.
说明:增加资源库复制,输入自定路径可生成相应的路径ID文件。
具体做法为在Android-ARM下建RDT/RDT.xml。然后配置<resourceid>属性
详细的请看demo。
5.解决ANE中引用so库调试版发行版不一致的问题.
说明:统一改为armeabi-v7a下。
6.ANE中加入多jar库引用,去除ANE中合并jar的步骤.
说明:把SDK的所有jar库放到Android-ARM/RDT/下
7.ANE中彻底解决资源ID错乱问题.(不是找不到ID,是ID数值偏差,在ANE中偶有发生).
8.可打包任意文件进APK根目录,以应对类似移动MM 联想支付等问题.
说明:把需要打包进APK根目录的文件放到Android-ARM/ROOT下
9.更改程序风格,实现默认全部activity全屏(适用于游戏项目)
说明:修改程序<application>默认风格。
10.修改默认raw下的文件,用以解决部分ANE需要在raw文件夹下操作音频文件的内存冲突
11.尽最大限度让AIR for android项目在打包上无限接近原生android项目.
已实现:1,2,3,4,5,6,7,9
我把个人定制的ADT命名为RDT(Rect`s ADT)
RDT v1.0版:https://github.com/recter/Anti-ADT/tree/master/RDT
配置说明:
把Anti-ADT/RDT/RDT.bat 放到 Adobe Flash Builder 4.6\sdks\AIR3.5\bin 下
把Anti-ADT/RDT/RDT.jar 放到 Adobe Flash Builder 4.6\sdks\AIR3.5\lib 下
ANE文件配置案例:
查看:传送门
调用说明:
查看 传送门
博主,用的什么软件修改adt.jar??
没用软件..我是直接改反汇编的.jar库文件可以反编译成反汇编代码,反汇编代码可以回编译成jar,原理就是这样,对于反汇编怎么读懂的话,如果您有兴趣我建议先从16位的汇编开始.@卓天
博主像你这样自定义的博客~
怎么弄?我也想弄一个~
我的博客是基于开源博客框架:wordpress搭建的,你可以随意谷歌出一堆搭建教程.@kuazi
O(∩_∩)O谢谢~祝好~闪~@Rect
使用RDT编译我的项目不成功。其它的都能看懂不知道DEMO里面的swf.和-app.xml你是怎么来的。我是找包APk然后解压COPY出来。用RDT打包不了包。跑求指导一下。
@范加伟, 报什么错?
rdt如何把air运行时打包进去?我用-target apk-captive-runtime 打包出来的apk安装报错。
@fantasy, 使用RDT打包APK, ANE的配置组合是和官方的不同的哟,详细请看我的demo,还有报什么错呢?
@Rect, 嗯 方法都是按照你的demo做的,问题解决了,是我之前配置问题~谢谢~
我写了一个简单的测试项目,就是把一个生成的ANE放到FB里了,然后导出发行版,发现只有FB的bin-debug文件夹下有*.xml根*.swf,没有bin-release文件夹,然后我拿这这两个文件去生成APK,安装的时候说安装包损坏,我把FB导出发行版的APK反编译出来的SWF放进去也是安装包损坏,那个XML里面我有把所有根debug相关的删除过。现在的问题是我不知道这两个文件怎么取得的,XML根SWF。我还是初学,可能之前的有问题,我在检查检查,但是这两个文件我不知道在哪取,请指教下。
@DH, 经过检查,已经可以用bin-debug文件夹下的两个文件正常运行了,我用的是FB4.6,Rect 用的是不是4.7啊,4.6就没bin-release这个文件夹。请问:4.6有啥办法能生成XML根SWF么
@DH, 我是完全用命令行的…抛弃FB4.6, FB4.7 , 抛弃FD…
@Rect, 你用命令生成的XML和SWF。请问命令怎么写呢。能提供一个例子吗?我是新手。谢谢前辈
@DH, 你好。我也在学习。但是我就是弄不出来。能加我一下QQ吗?我们能在线交流一下吗?我的QQ号是:136155184
@范加伟, 这篇文章末尾附带了命令行DEMO. http://rect.zengrong.net/archives/1090
求交流。求在线指导。QQ:136155184
05-22 11:33:01.834: W/dalvikvm(13969): VFY: unable to resolve static field 872 (activity_main) in Lcom/example/testane/R$layout;
我写了一个DEMO。然后把buildANE 和buildAPK中替换成我DEMO相关的文件。打包成功啦。安装运行。还是没有解压R文件问题啊。
@范加伟, SDK版本?我的RDT只支持到4.0..后面的更新由于技术转型我就没在关注了..
Rect大神,帮分析下,我之前打包一个简单的ANE没资源没配置文件,是好的,这次打了资源根配置文件进去,在导出APK的时候就报 String index out of range: -1错,请问,知道是什么原因么?我要是把ROOT下的配置文件删除就不报这个错了,报个dx什么的错误,但是理论上配置文件是不应该删除的。配置文件是第三方JAR包反编译出来的,应该没问题。执行日志以及报错如下:
C:\Users\Administrator\Desktop\UmengAne\buildAPK>”C:\Program Files\Adobe\Adobe F
lash Builder 4.6\sdks\flexsdk4.11\bin\RDT” -package -target apk-captive-runtime
-storetype pkcs12 -keystore DH.p12 -storepass 123456 umengtest.apk umengtest-ap
p.xml umengtest.swf -extdir .
RDT:RDT\android-support-v4.jar
RDT:RDT\mmbilling.2.4.0.jar
RDT:RDT\ThranSDK.jar
ROOT:ROOT\CopyrightDeclaration.xml
ROOT:ROOT\mmiap.xml
ROOT:ROOT\VERSION
SDKLibs:3
ANEFileInRdt:android-support-v4.jar
prefix:j
jarFiles:1
newJarFiles:2
SDK addJarFile:android-support-v4.jar
ANEFileInRdt:mmbilling.2.4.0.jar
prefix:j
jarFiles:2
newJarFiles:3
SDK addJarFile:mmbilling.2.4.0.jar
ANEFileInRdt:ThranSDK.jar
prefix:j
jarFiles:3
newJarFiles:4
SDK addJarFile:ThranSDK.jar
RootFiles:3
unexpected failure: String index out of range: -1
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(Unknown Source)
at com.adobe.air.apk.RDTPacker.ANEFileInRoot(RDTPacker.java:50)
at com.adobe.air.apk.APKPackager.processExtensions(APKPackager.java:241)
at com.adobe.air.ApplicationPackager.createPackage(ApplicationPackager.j
ava:65)
at com.adobe.air.ADT.parseArgsAndGo(ADT.java:591)
at com.adobe.air.ADT.run(ADT.java:435)
at com.adobe.air.ADT.main(ADT.java:485)
C:\Users\Administrator\Desktop\UmengAne\buildAPK>pause
请按任意键继续. . .
@DH, ROOT下的配置文件打不进去,后来选择的了 aapt a的办法打的 已经OK了。
@DH, 4.0?有可能是文件解析问题.
@Rect, 4.0SDK,移动MM的JAR包解压出来有个VERSON的文件,没有后缀名,我怀疑是这个文件的问题,后来用aapt a的方法打的
Rect 我遇到问题了,我单独接入友盟统计和移动MM都是好的,但是把两个放到一起打包APK的时候就报错了。
C:\Users\Administrator\Desktop\xxxxxx\UmengAne\buildAPK>”C:\Program
Files\Adobe\Adobe Flash Builder 4.6\sdks\flexdsk4.11\bin\RDT” -package -target
apk-captive-runtime -storetype pkcs12 -keystore DH.p12 -storepass 152300 BoneMc
FstPet.apk BoneMcFstPet-app.xml BoneMcFstPet.swf icon -extdir .
RDT:RDT\android-support-v4.jar
RDT:RDT\ThranSDK.jar
RDT:RDT\umeng-sdk-analytics_v5.2.2.jar
SDKLibs:3
ANEFileInRdt:android-support-v4.jar
prefix:j
jarFiles:2
newJarFiles:3
SDK addJarFile:android-support-v4.jar
ANEFileInRdt:ThranSDK.jar
prefix:j
jarFiles:3
newJarFiles:4
SDK addJarFile:ThranSDK.jar
ANEFileInRdt:umeng-sdk-analytics_v5.2.2.jar
prefix:j
jarFiles:4
newJarFiles:5
SDK addJarFile:umeng-sdk-analytics_v5.2.2.jar
dx tool failed:warning: Ignoring InnerClasses attribute for an anonymous inner c
lass that doesn’t come with an associated EnclosingMethod attribute. (This class
was probably produced by a broken compiler.)
warning: Ignoring InnerClasses attribute for an anonymous inner class that doesn
‘t come with an associated EnclosingMethod attribute. (This class was probably p
roduced by a broken compiler.)
trouble processing:
class name (com/umeng/analytics/d/A) does not match path (com/umeng/analytics/d/
a.class)
…while parsing com/umeng/analytics/d/a.class
…while processing com/umeng/analytics/d/a.class
UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: Lcom/umeng/analytics/Analytic
sConfig;
at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:12
3)
at com.android.dx.dex.file.DexFile.add(DexFile.java:143)
at com.android.dx.command.dexer.Main.processClass(Main.java:301)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:278)
at com.android.dx.command.dexer.Main.access$100(Main.java:56)
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:229)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpen
er.java:244)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.j
ava:130)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java
:108)
at com.android.dx.command.dexer.Main.processOne(Main.java:247)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:183)
at com.android.dx.command.dexer.Main.run(Main.java:139)
at com.android.dx.command.dexer.Main.main(Main.java:120)
at com.android.dx.command.Main.main(Main.java:89)
1 warning
1 error; aborting
C:\Users\Administrator\Desktop\xxxxxx\UmengAne\buildAPK>
大神的帮我分析下吧,求助啊。
@DH, 怎么才能看到· ANE 报里 Java代码异常信息啊·
问题已经解决,两个ANE的JAR包有冲突,导致的。发现打ANE这个东西必须要细心,某个环节错一点都会导致打包失败。
@DH, 要解决这些问题,最完美的方式是把AIRSDK的打包工具逆向了
银联ANE 坑爹啊·
求大神帮忙· 打包一切正常 就是打不开银联的插件·
QQ:23559768
@孙巍, 请问是那个平台?
@Rect, 安卓 的· 我搞定很感谢能回复我· ·
@孙巍, 一般解决ANE问题的思路是:1.打开eclipse的Logcat查看报错的Log, 2.通过Log定位基本问题. …我遇到的所有问题 都在博客中和github的Readme记录过.
vivo的xml里,最后这里,打包以后在机器上,会无限跳出登录界面,就是登录完成就自动再跳出来,如果改成NoTitle,那么登录完成就不会再跳一次,不过这个黑屏的activity也会显示,要按一下返回才可以。这个可能是什么原因造成的?
android:name=”us.sanguo.ane.vivo.funs.IABLoginActivity” android:theme=”@android:style/Theme.NoDisplay
刚才带了个括号没显示出来
你好,你的问题描述不清楚,方面仔细说明一下么?谢谢
就是说,如果按照你的例子做出来以后,登录界面会一直过不去,登录了以后又弹出来登录界面,如果把登录activity的NoDisplay改成NoTitleBar的话,不会再次登录了,当然也会有一个黑屏的activity在,返回一次才可以。要么加一下qq ZZO777I
你了解下activity的生命周期.在登陆成功的时候有消息回调的.在消息回调的时候设置个哨兵.然后倘若哨兵已经被设置 则在onCreate之类的函数直接finish即可.