我在为 Android 编译 Distriqt Facebook ANE 时遇到问题。它在 iOS 上运行良好,但在 Android 上却不行。
错误信息是:
dx 工具失败:
意外的顶级错误:java.lang.OutOfMemoryError:com.android.dx.cf.code.Frame.copy 处 com.android.dx.cf.code.ExecutionStack.copy(ExecutionStack.java:66) 处的 Java 堆空间(Frame.java:98) 在 com.android.dx.cf.code.Ropper.processBlock(Ropper.java:786) 在 com.android.dx.cf.code.Ropper.doit(Ropper.java:742) 在com.android.dx.cf.code.Ropper.convert(Ropper.java:349) 在 com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:280) 在 com.android.dx.dex。 cf.CfTranslator.translate0(CfTranslator.java:137) 在 com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:93) 在 com.android.dx.command.dexer.Main.processClass(Main. java:729) 在 com.android.dx.command.dexer.Main.processFileBytes(Main.java:673) 在 com.android.dx.command.dexer.Main.access$300(Main.java:83) 在 com.安卓。dx.command.dexer.Main$1.processFileBytes(Main.java:602) 在 com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284) 在 com.android.dx.cf.direct.ClassPathOpener .processOne(ClassPathOpener.java:166) 在 com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144) 在 com.android.dx.command.dexer.Main.processOne(Main.java:632 ) 在 com.android.dx.command.dexer.Main.runMonoDex(Main.java:280) 在 com.android.dx 的 com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)。 command.dexer.Main.run(Main.java:246) 在 com.android.dx.command.dexer.Main.main(Main.java:215) 在 com.android.dx.command.Main.main(Main.爪哇:106)android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166) 在 com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144) 在 com.android.dx.command.dexer。 Main.processOne(Main.java:632) 在 com.android.dx.command.dexer.Main.processAllFiles(Main.java:510) 在 com.android.dx.command.dexer.Main.runMonoDex(Main.java: 280) 在 com.android.dx.command.dexer.Main.main(Main.java:215) 在 com.android.dx 的 com.android.dx.command.dexer.Main.run(Main.java:246) .command.Main.main(Main.java:106)android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166) 在 com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144) 在 com.android.dx.command.dexer。 Main.processOne(Main.java:632) 在 com.android.dx.command.dexer.Main.processAllFiles(Main.java:510) 在 com.android.dx.command.dexer.Main.runMonoDex(Main.java: 280) 在 com.android.dx.command.dexer.Main.main(Main.java:215) 在 com.android.dx 的 com.android.dx.command.dexer.Main.run(Main.java:246) .command.Main.main(Main.java:106)dexer.Main.runMonoDex(Main.java:280) 在 com.android.dx.command.dexer.Main.run(Main.java:246) 在 com.android.dx.command.dexer.Main.main(Main. java:215) 在 com.android.dx.command.Main.main(Main.java:106)dexer.Main.runMonoDex(Main.java:280) 在 com.android.dx.command.dexer.Main.run(Main.java:246) 在 com.android.dx.command.dexer.Main.main(Main. java:215) 在 com.android.dx.command.Main.main(Main.java:106)
ADT 命令行: ...
尝试使用 AIR18 和 AIR 16(从 distriqt 教程更新了 dx.jar)。我的清单包括所有 3 个需要的扩展:
<extensionID>com.distriqt.Core</extensionID>
<extensionID>com.distriqt.GooglePlayServices</extensionID>
<extensionID>com.distriqt.FacebookAPI</extensionID>
删除 GooglePlayServices 可以进行编译,但在初始化 FacebokAPI 时应用程序会崩溃。
在未更新 dx.jar 的情况下使用AIR16 也会在启动时直接使应用程序崩溃。目录日志指出以下异常:
08-23 14:53:14.793 E/AndroidRuntime(3178): java.lang.RuntimeException: 无法获取提供者 com.facebook.FacebookContentProvider: java.lang.ClassNotFoundException: com.facebook.FacebookContentProvider 在加载器 dalvik.system.PathClassLoader [ /data/app/air.my.com.zas.lefiner-1.apk]
08-23 14:53:14.793 E/AndroidRuntime(3178): 引起:java.lang.ClassNotFoundException: com.facebook.FacebookContentProvider 在加载器 dalvik.system.PathClassLoader[/data/app/air.my.com.zas。 lefiner-1.apk]
奇怪的是,使用 Core 和 GooglePlayServices 的 Distriqt GooglePlusANE 在两个平台上都可以正常工作。所以我强烈认为 FacebookAPI 扩展有问题。
很感谢任何形式的帮助!