Я работаю с Xerces-для-Android: https://code.google.com/p/xerces-for-android/Xerces-для-Android NoClassDefFoundError При использовании Jar Вместо исходного кода
Если скопировать исходный код в простой тестовый проект (Java проект, а не андроид проекта), Я могу запускать свои проверки на проверку xml без каких-либо проблем.
Когда я делаю банку из исходных файлов, то использую это в своем пути класса вместо источника, я получаю NoClassDefFoundError
, несмотря на то, что файлы присутствуют в банке.
Ниже сообщение об ошибке:
java.lang.ExceptionInInitializerError
at mf.org.apache.xerces.impl.dv.SchemaDVFactory.getInstance(Unknown Source)
at mf.org.apache.xerces.impl.dv.SchemaDVFactory.getInstance(Unknown Source)
at mf.org.apache.xerces.impl.xs.XMLSchemaLoader.reset(Unknown Source)
at mf.org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source)
at mf.org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source)
at mf.org.apache.xerces.jaxp.validation.XMLSchemaFactory.newSchema(Unknown Source)
at mf.javax.xml.validation.SchemaFactory.newSchema(Unknown Source)
at xml.MFXMLUtil.validate(MFXMLUtil.java:33)
at xml.MFXMLTester.main(MFXMLTester.java:8)
Caused by: java.lang.RuntimeException: internal error
at mf.org.apache.xerces.impl.dv.xs.XSSimpleTypeDecl.applyFacets1(Unknown Source)
at mf.org.apache.xerces.impl.dv.xs.BaseSchemaDVFactory.createBuiltInTypes(Unknown Source)
at mf.org.apache.xerces.impl.dv.xs.SchemaDVFactoryImpl.createBuiltInTypes(Unknown Source)
at mf.org.apache.xerces.impl.dv.xs.SchemaDVFactoryImpl.<clinit>(Unknown Source)
... 9 more
Ниже мой муравей сценарий, чтобы сделать банку:
<project name="XercesForAndroid" default="dist" basedir=".">
<description>
Builds jar for Xerces-For-Android
</description>
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>
<target name="init">
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="clean, init" description="compile the source " >
<!-- Compile the java code from ${src} into ${build} -->
<javac verbose="true" target="1.6" srcdir="${src}" destdir="${build}"/>
</target>
<target name="dist" depends="compile"
description="generate the distribution" >
<!-- Create the distribution directory -->
<mkdir dir="${dist}/lib"/>
<!-- Put everything in ${build} into the .jar file -->
<jar jarfile="${dist}/lib/Xerces-For-Android.jar" basedir="${build}"/>
</target>
<target name="clean"
description="clean up" >
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
Файлы классов существуют в банке. Нужно ли мне делать что-то особенное в манифесте, или я пропущу что-то очевидное?
NoClassDefFoundError означает, что JAR был там во время компиляции, но не во время выполнения. Вы уверены, что экспортируете JAR при компиляции своего проекта в APK? – Prmths
Код работает корректно с помощью обычного проекта java, с которым я тестирую его, а банка находится в пути сборки, иначе eclipse будет жаловаться. –
Заключительное намерение - получить его в андроид-апк ... но сейчас его просто нужно, чтобы банер работал правильно –