Интеграция Facebook SDK с Android Studio

#android #facebook #android-activity #android-studio #android-facebook

#Android #Facebook #android-активность #android-studio #android-facebook

Вопрос:

Я пытаюсь интегрировать Facebook SDK в свой проект Android, но не могу этого сделать. Я выполнил шаги, упомянутые в документации facebook. но я получаю ошибку как —

СБОЙ: сбой сборки с исключением.

 * 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 могут запускать напрямую. Существуют ограничения в формате выходного файла, одним из которых является ограничение на количество строк, которые может содержать файл, если не установлена опция для включения «режима jumbo». Вы можете установить флаг для включения режима jumbo, который может помочь вам с этой ошибкой, но имейте в виду, что вы можете приближаться и к другим ограничениям (в частности, существует ограничение на общее количество методов, которые могут быть в вашем приложении, если вы не разделите его на несколько файлов dex). Если вы увидите будущие ошибки, проведите некоторое исследование в этом направлении.

В любом случае, чтобы включить режим jumbo, попробуйте поместить это в android блок файла build.gradle модуля, в котором возникает ошибка:

 dexOptions {
    jumboMode = true
}