ошибка, которую вы получаете от Dx, основана только на именах пакетов java импортируемых библиотек и ничего больше.
сообщение может быть суммировано как: если вы импортируете библиотеку в пространство имен java.*
или javax.*
, очень вероятно, что оно зависит от других "базовых" библиотек, которые предоставляются только как часть JDK и, следовательно, не будет доступен на платформе Android. по сути, это мешает вам делать глупости, что верно в 99% случаев, когда вы видите это сообщение.
теперь, конечно, просто потому, что пакет java начинается с java.*
или javax.*
, не обязательно означает, что он зависит от самого JDK. это может прекрасно работать в Android. чтобы обойти проверку глупости, добавьте опцию --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). конечно, мне хотелось бы, чтобы был более понятный способ, но переписать библиотеку верхнего уровня, чтобы избежать использования Джексона, было невозможно.