Не удалось упаковать бизнес-приложение

Эта статья решает сообщение об ошибке, возникающее при попытке упаковать бизнес-приложение с помощью средства упаковки приложений Microsoft Intune для Android.

Симптомы

При упаковке LOB приложения с помощью средства упаковки приложений Microsoft Intune для Android, инструмент завершается сбоем, и вы получаете сообщение об ошибке, которое выглядит примерно так:

DBG [APKTool] Завершено кодирование каталога в APK-файл:<путь к .apk>
Пути подробных логов WRN можно найти по адресу: <пути файла журнала .apk>.
ERR Не удалось упаковать приложение.
org.jf.util.ExceptionWithContext: произошло исключение при записи code_item для метода <имя метода>
org.jf.dexlib2.writer.DexWriter.writeDebugAndCodeItems(DexWriter.java:825)
org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:268)
org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:246)
brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:61)
brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:36)
brut.androlib.Androlib.buildSourcesSmali(Androlib.java:417)
brut.androlib.Androlib.buildSources(Androlib.java:348)
brut.androlib.Androlib.build(Androlib.java:300)
com.microsoft.intune.mam.apppackager.utils.APKToolWrapper.encodeAPK(APKToolWrapper.java:172)
com.microsoft.intune.mam.apppackager.AppPackager.packageApp(AppPackager.java:111)
com.microsoft.intune.mam.apppackager.PackagerMain.mainInternal(PackagerMain.java:213)
com.microsoft.intune.mam.apppackager.PackagerMain.main(PackagerMain.java:57)
org.jf.util.ExceptionWithContext: ошибка при записи инструкции по смещению кода 0x13
org.jf.dexlib2.writer.DexWriter.writeCodeItem(DexWriter.java:1098)
org.jf.dexlib2.writer.DexWriter.writeDebugAndCodeItems(DexWriter.java:821)
org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:268)
org.jf.dexlib2.writer.DexWriter.writeTo(DexWriter.java:246)
brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:61)
brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:36)
brut.androlib.Androlib.buildSourcesSmali(Androlib.java:417)
brut.androlib.Androlib.buildSources(Androlib.java:348)
brut.androlib.Androlib.build(Androlib.java:300)
com.microsoft.intune.mam.apppackager.utils.APKToolWrapper.encodeAPK(APKToolWrapper.java:172)
com.microsoft.intune.mam.apppackager.AppPackager.packageApp(AppPackager.java:111)
com.microsoft.intune.mam.apppackager.PackagerMain.mainInternal(PackagerMain.java:213)
com.microsoft.intune.mam.apppackager.PackagerMain.main(PackagerMain.java:57)
org.jf.util.ExceptionWithContext: Беззнаковое короткое значение вне диапазона: <65536 или значение, превышающее 65536>
org.jf.dexlib2.writer.DexDataWriter.writeUshort(DexDataWriter.java:116)
org.jf.dexlib2.writer.InstructionWriter.write(InstructionWriter.java:348)
org.jf.dexlib2.writer.DexWriter.writeCodeItem(DexWriter.java:1058)

Причина

Проблема возникает, если бизнес-приложение достигает или почти достигает лимита ссылки на метод в размере 64K в файлах DEX. В этом сценарии средство упаковки Microsoft Intune не может добавить необходимый код Intune в приложение без превышения этого ограничения.

Решение

Чтобы устранить эту проблему, выполните следующие действия.

  1. Установите последнюю версию средства упаковки приложений Microsoft Intune для Android.
  2. Включите multidex для приложения Android.

Проверьте, устранена ли проблема. Если проблема сохранится, попробуйте следующие методы в указанном порядке:

  • Проверьте конфигурацию multidex, чтобы узнать, указаны ли классы в основном файле DEX. При добавлении слишком большого количества классов в основной файл DEX могут возникнуть проблемы. Дополнительные сведения см. в разделе https://developer.android.com/studio/build/multidex#keep.

    Чтобы обойти эту проблему, уменьшите количество классов, указанных в основном файле DEX.

  • Включите сжатие кода с помощью ProGuard. Дополнительные сведения см. в разделе https://developer.android.com/studio/build/shrink-code#shrink-code.

    Замечание

    Для некоторых сторонних библиотек может потребоваться дополнительная конфигурация ProGuard.

Дополнительные сведения

Дополнительные сведения об ограничении 64K методов в файлах DEX см. в разделе Включение multidex для приложений с более чем 64K методами.

Отказ от ответственности за информацию третьих лиц

Сторонние продукты, которые обсуждаются в этой статье, производятся компаниями, которые не зависят от Майкрософт. Майкрософт не предоставляет никаких явных или подразумеваемых гарантий относительно производительности или надежности этих продуктов.

Отказ от ответственности за контакт с третьими лицами

Майкрософт предоставляет сторонние контактные данные, которые помогут вам найти дополнительные сведения об этом разделе. Эти контактные данные могут изменяться без уведомления. Майкрософт не гарантирует точность сторонних контактных данных.