опция --core-library в Dx пропустит проверку на глупость, которая предотвращает случайное включение основных библиотек Java в ваше приложение для Android.
Dx прекратит работу, если вы попытаетесь включить библиотеку, содержащую пакеты, в пространство имен java. * Или javax. *.Мысль заключается в том, что классы в этом пространстве имен, вероятно, будут зависеть от других «базовых» классов JDK, которые сломают ваше приложение, поскольку их (возможно) нет на Android.
сейчас, конечно, только потому, чтоjava-пакет начинается с java. * или javax. * не обязательно означает, что он зависит от самого JDK.это может прекрасно работать в Android.если вы знаете, что делаете, если знаете, что ваши классы java / x. * не зависят от базовых классов JDK, рекомендуется использовать такой инструмент, как JarJar, для переупаковки JAR под другим пространством имен.
при этом, чтобы обойти проверку на глупость, добавьте опцию --core-library в dx.измените последнюю строку $ANDROID_HOME/platform-tools/dx
с
exec java $javaOpts -jar "$jarpath" "$@"
на
exec java $javaOpts -jar "$jarpath" --core-library "$@"
, в моем случае я включал библиотеку, которая зависела от Джексона, который зависит от JAXB.для меня переопределение проверки на глупость было приемлемым, потому что библиотека использовала Джексона только для JSON, а не для XML-сериализации (я включаю только библиотеку API JAXB, а не impl).Конечно, мне хотелось бы, чтобы был более понятный способ, но переписать библиотеку верхнего уровня, чтобы избежать использования Джексона, было невозможно.