Facebook SDK 与 Android Studio 的集成

Posted

技术标签:

【中文标题】Facebook SDK 与 Android Studio 的集成【英文标题】:Facebook SDK integration with Android Studio 【发布时间】:2014-08-27 22:21:05 【问题描述】:

我正在尝试将 Facebook SDK 集成到我的 android 项目中,但无法这样做。我已按照 facebook 文档中提到的步骤进行操作。但我得到的错误是 -

FAILURE:构建失败并出现异常。

* What went wrong:
Execution failed for task ':dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    /Applications/Android Studio.app/sdk/build-tools/19.1.0/dx --dex --num-threads=4 --output /Volumes/Data/projects/project_name/build/intermediates/dex/debug /Volumes/Data/projects/project_name/build/intermediates/classes/debug /Volumes/Data/projects/project_name/build/intermediates/dependency-cache/debug /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/bolts-57446fde6c024f562e020fd9e003407a5fc2a578.jar /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/bugsense-3.5-8ab33d75af263f7f86f49230e10099a1c2c9a549.jar /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/classes-0523eab2b91bd947bf3140cde551a15ef204bab4.jar /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/classes-1bf58233e09b0ba3df3b170e5976ea8835ce9dbc.jar /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/classes-50cb56f46834855caa39a5bee8fee3da46d5c1eb.jar /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/classes-5656b1a26fb9cf46c5e761b517ec752c47e7afe7.jar /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/classes-d98d71fc376b8658355216fd82eb5433791f3b1d.jar /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/custom-linkedin-j-android-46399e5197dc53ee00e0370db8440536b745b26a.jar /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/droidText.0.5-809fa4af200fcd621ea1d4d33c187c85ccfb4721.jar /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/gson-2.2.4-1f9beaae96795dd030e7971a8a89b53987904e64.jar /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/libGoogleAnalyticsServices-969197b4a3de6e6538e72f3e6d598b94488ccd57.jar /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/Parse-1.5.0-e86e2456aff7f83bdad45e275836d6a3e12c84c9.jar /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/signpost-commonshttp4-1.2.1.1-ad7399087713b6c6e45b1e45950da833fcc81870.jar /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/signpost-core-1.2.1.1-50384ca3c3962abba499d71f329139d20bac4475.jar /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/signpost-jetty6-1.2.1.1-96a3b59a9846e0434e4213c2f1c063549d7f2b83.jar /Volumes/Data/projects/project_name/build/intermediates/pre-dexed/debug/support-v4-19.0.1-3bf117e59e2e0f41bbf9219f2be90cdcf1dd583d.jar
  Error Code:
    2
  Output:

    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dex.DexException: Cannot merge new index 67781 into a non-jumbo instruction!
        at com.android.dx.merge.InstructionTransformer.jumboCheck(InstructionTransformer.java:108)
        at com.android.dx.merge.InstructionTransformer.access$800(InstructionTransformer.java:25)
        at com.android.dx.merge.InstructionTransformer$StringVisitor.visit(InstructionTransformer.java:71)
        at com.android.dx.io.CodeReader.callVisit(CodeReader.java:114)
        at com.android.dx.io.CodeReader.visitAll(CodeReader.java:89)
        at com.android.dx.merge.InstructionTransformer.transform(InstructionTransformer.java:48)
        at com.android.dx.merge.DexMerger.transformCode(DexMerger.java:840)
        at com.android.dx.merge.DexMerger.transformMethods(DexMerger.java:811)
        at com.android.dx.merge.DexMerger.transformClassData(DexMerger.java:783)
        at com.android.dx.merge.DexMerger.transformClassDef(DexMerger.java:680)
        at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:540)
        at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
        at com.android.dx.command.dexer.Main.run(Main.java:230)
        at com.android.dx.command.dexer.Main.main(Main.java:199)
        at com.android.dx.command.Main.main(Main.java:103)

这是我的 Facebook gradle 文件

dependencies 
    compile 'com.android.support:support-v4:13.0.0'
    compile files('libs/bolts.jar')

这是我的项目 gradle 文件

dependencies 
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':libraries:actionbarsherlock')
    compile project(':libraries:sliding-menu')
    compile project(':libraries:cwac-touchlist')
    compile files('libs/Parse-1.5.0.jar')
    compile 'com.bugsense.trace:bugsense:3.5'
    compile files('libs/gson-2.2.4.jar')
    compile project(':facebook')

对此有什么建议吗?如果您需要任何其他信息,请告诉我。

【问题讨论】:

【参考方案1】:

您可以检查是否再次导入相同的 JAR。假设一个 jar 中有一个类被导入到另一个 jar 中。因此,只需检查是否包含任何 lib / class 文件两次。

如果你只是导入一些 jar 文件,你可以尝试删除它们,然后一次添加一个,看看是哪一个出错了。 就我而言,我就是这样做的,当我导入最后一个时,应用程序确实编译了。所以我认为,我可能一次导入了很多,这才是真正的问题。但现在一切正常。

【讨论】:

【参考方案2】:

Android 应用程序有一个构建步骤,其中 dex 工具获取您的 Java 类文件并将它们转换为 Android 设备可以直接运行的格式。输出文件格式存在限制,其中之一是文件可以包含的字符串数量限制,除非将选项设置为打开“巨型模式”。您可以将标志设置为打开巨型模式,这可能会帮助您解决此错误,但请注意您也可能接近其他限制(特别是,您的应用程序中可以使用的方法总数存在限制, 除非您将其拆分为多个 dex 文件)。如果您看到未来的错误,请按照这些思路进行一些研究。

无论如何,要启用巨型模式,请尝试将其放入出现错误的模块的 build.gradle 文件的 android 块中:

dexOptions 
    jumboMode = true

【讨论】:

以上是关于Facebook SDK 与 Android Studio 的集成的主要内容,如果未能解决你的问题,请参考以下文章

共享回调不适用于 Facebook SDK 4 Android

Android Facebook SDK 3.0 在登录时给出“remote_app_id 与存储的 id 不匹配”

Facebook React Native SDK LoginButton 在 Android 中呈现带红色边框的 UnimplementedView

将群组页面与 Facebook SDK 3.0 集成

Android Studio 中的 Facebook SDK 4 ExceptionInitializeError Login v2.3

在 Facebook SDK Android 上找不到文件“com.facebook.android.facebook”