Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья решает сообщение об ошибке, возникающее при попытке упаковать бизнес-приложение с помощью средства упаковки приложений 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 в приложение без превышения этого ограничения.
Решение
Чтобы устранить эту проблему, выполните следующие действия.
- Установите последнюю версию средства упаковки приложений Microsoft Intune для Android.
- Включите 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 методами.
Отказ от ответственности за информацию третьих лиц
Сторонние продукты, которые обсуждаются в этой статье, производятся компаниями, которые не зависят от Майкрософт. Майкрософт не предоставляет никаких явных или подразумеваемых гарантий относительно производительности или надежности этих продуктов.
Отказ от ответственности за контакт с третьими лицами
Майкрософт предоставляет сторонние контактные данные, которые помогут вам найти дополнительные сведения об этом разделе. Эти контактные данные могут изменяться без уведомления. Майкрософт не гарантирует точность сторонних контактных данных.