I am trying to use OWLAPI 5.1.0 on Android v8.0 (Oreo). However, when I run the app, it crashes at OWLManager.createOWLOntologyManager(). I have added the following jars to my app's gradle.build (Source of jar files - here):
implementation files('libs/aopalliance-1.0.jar')
implementation files('libs/caffeine-2.3.5.jar')
implementation files('libs/commons-codec-1.9.jar')
implementation files('libs/commons-io-2.5.jar')
implementation files('libs/commons-rdf-api-0.3.0-incubating.jar')
implementation files('libs/fluent-hc-4.5.2.jar')
implementation files('libs/guava-20.0.jar')
implementation files('libs/guice-4.1.0.jar')
implementation files('libs/guice-assistedinject-4.1.0.jar')
implementation files('libs/guice-multibindings-4.1.0.jar')
implementation files('libs/httpclient-4.5.2.jar')
implementation files('libs/httpclient-cache-4.5.2.jar')
implementation files('libs/httpcore-4.4.5.jar')
implementation files('libs/httpcore-nio-4.4.5.jar')
implementation files('libs/httpmime-4.5.2.jar')
implementation files('libs/jackson-annotations-2.8.5.jar')
implementation files('libs/jackson-core-2.8.5.jar')
implementation files('libs/jackson-databind-2.8.5.jar')
implementation files('libs/javax.inject-1.jar')
implementation files('libs/jcl-over-slf4j-1.7.22.jar')
implementation files('libs/jsonld-java-0.9.0.jar')
implementation files('libs/jsr305-3.0.1.jar')
implementation files('libs/owlapi-distribution-5.1.0.jar')
implementation files('libs/rdf4j-model-2.1.4.jar')
implementation files('libs/rdf4j-rio-api-2.1.4.jar')
implementation files('libs/rdf4j-rio-binary-2.1.4.jar')
implementation files('libs/rdf4j-rio-datatypes-2.1.4.jar')
implementation files('libs/rdf4j-rio-jsonld-2.1.4.jar')
implementation files('libs/rdf4j-rio-languages-2.1.4.jar')
implementation files('libs/rdf4j-rio-n3-2.1.4.jar')
implementation files('libs/rdf4j-rio-nquads-2.1.4.jar')
implementation files('libs/rdf4j-rio-ntriples-2.1.4.jar')
implementation files('libs/rdf4j-rio-rdfjson-2.1.4.jar')
implementation files('libs/rdf4j-rio-rdfxml-2.1.4.jar')
implementation files('libs/rdf4j-rio-trig-2.1.4.jar')
implementation files('libs/rdf4j-rio-trix-2.1.4.jar')
implementation files('libs/rdf4j-rio-turtle-2.1.4.jar')
implementation files('libs/rdf4j-util-2.1.4.jar')
implementation files('libs/slf4j-api-1.7.22.jar')
implementation files('libs/trove4j-3.0.3.jar')
implementation files('libs/xz-1.6.jar')
implementation files('libs/org.semanticweb.hermit-1.3.8.500.jar')
The app is building just fine. But on running, it crashes throwing the error below:
java.lang.ExceptionInInitializerError
at com.google.inject.internal.cglib.core.$MethodWrapper.create(MethodWrapper.java:34)
at com.google.inject.internal.cglib.core.$DuplicatesPredicate.evaluate(DuplicatesPredicate.java:25)
at com.google.inject.internal.cglib.core.$CollectionUtils.filter(CollectionUtils.java:52)
at com.google.inject.internal.cglib.reflect.$FastClassEmitter.<init>(FastClassEmitter.java:69)
at com.google.inject.internal.cglib.reflect.$FastClass$Generator.generateClass(FastClass.java:77)
at com.google.inject.internal.cglib.core.$DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at com.google.inject.internal.cglib.core.$AbstractClassGenerator.create(AbstractClassGenerator.java:231)
at com.google.inject.internal.cglib.reflect.$FastClass$Generator.create(FastClass.java:65)
at com.google.inject.internal.BytecodeGen.newFastClassForMember(BytecodeGen.java:252)
at com.google.inject.internal.BytecodeGen.newFastClassForMember(BytecodeGen.java:203)
at com.google.inject.internal.ProviderMethod.create(ProviderMethod.java:69)
at com.google.inject.internal.ProviderMethodsModule.createProviderMethod(ProviderMethodsModule.java:275)
at com.google.inject.internal.ProviderMethodsModule.getProviderMethods(ProviderMethodsModule.java:144)
at com.google.inject.internal.ProviderMethodsModule.configure(ProviderMethodsModule.java:123)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:349)
at com.google.inject.spi.Elements.getElements(Elements.java:110)
at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:138)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)
at com.google.inject.Guice.createInjector(Guice.java:99)
at com.google.inject.Guice.createInjector(Guice.java:73)
at com.google.inject.Guice.createInjector(Guice.java:62)
at org.semanticweb.owlapi.apibinding.OWLManager.createInjector(OWLManager.java:104)
at org.semanticweb.owlapi.apibinding.OWLManager.createOWLOntologyManager(OWLManager.java:44)
at com.example.newcalculator.OwlApiSecond.creatingOntology(OwlApiSecond.java:37)
at com.example.newcalculator.MainActivity$1.onClick(MainActivity.java:41)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: com.google.inject.internal.cglib.core.$CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
at com.google.inject.internal.cglib.core.$AbstractClassGenerator.create(AbstractClassGenerator.java:256)
at com.google.inject.internal.cglib.core.$KeyFactory$Generator.create(KeyFactory.java:149)
at com.google.inject.internal.cglib.core.$KeyFactory.create(KeyFactory.java:117)
at com.google.inject.internal.cglib.core.$KeyFactory.create(KeyFactory.java:109)
at com.google.inject.internal.cglib.core.$KeyFactory.create(KeyFactory.java:105)
at com.google.inject.internal.cglib.core.$MethodWrapper.<clinit>(MethodWrapper.java:23)
at com.google.inject.internal.cglib.core.$MethodWrapper.create(MethodWrapper.java:34)
at com.google.inject.internal.cglib.core.$DuplicatesPredicate.evaluate(DuplicatesPredicate.java:25)
at com.google.inject.internal.cglib.core.$CollectionUtils.filter(CollectionUtils.java:52)
at com.google.inject.internal.cglib.reflect.$FastClassEmitter.<init>(FastClassEmitter.java:69)
at com.google.inject.internal.cglib.reflect.$FastClass$Generator.generateClass(FastClass.java:77)
at com.google.inject.internal.cglib.core.$DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at com.google.inject.internal.cglib.core.$AbstractClassGenerator.create(AbstractClassGenerator.java:231)
at com.google.inject.internal.cglib.reflect.$FastClass$Generator.create(FastClass.java:65)
at com.google.inject.internal.BytecodeGen.newFastClassForMember(BytecodeGen.java:252)
at com.google.inject.internal.BytecodeGen.newFastClassForMember(BytecodeGen.java:203)
at com.google.inject.internal.ProviderMethod.create(ProviderMethod.java:69)
at com.google.inject.internal.ProviderMethodsModule.createProviderMethod(ProviderMethodsModule.java:275)
at com.google.inject.internal.ProviderMethodsModule.getProviderMethods(ProviderMethodsModule.java:144)
at com.google.inject.internal.ProviderMethodsModule.configure(ProviderMethodsModule.java:123)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:349)
at com.google.inject.spi.Elements.getElements(Elements.java:110)
at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:138)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)
at com.google.inject.Guice.createInjector(Guice.java:99)
at com.google.inject.Guice.createInjector(Guice.java:73)
at com.google.inject.Guice.createInjector(Guice.java:62)
at org.semanticweb.owlapi.apibinding.OWLManager.createInjector(OWLManager.java:104)
at org.semanticweb.owlapi.apibinding.OWLManager.createOWLOntologyManager(OWLManager.java:44)
at com.example.newcalculator.OwlApiSecond.creatingOntology(OwlApiSecond.java:37)
at com.example.newcalculator.MainActivity$1.onClick(MainActivity.java:41)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at com.google.inject.internal.cglib.core.$ReflectUtils.defineClass(ReflectUtils.java:395)
at com.google.inject.internal.cglib.core.$ReflectUtils.defineClass(ReflectUtils.java:390)
at com.google.inject.internal.cglib.core.$AbstractClassGenerator.create(AbstractClassGenerator.java:235)
at com.google.inject.internal.cglib.core.$KeyFactory$Generator.create(KeyFactory.java:149)
at com.google.inject.internal.cglib.core.$KeyFactory.create(KeyFactory.java:117)
at com.google.inject.internal.cglib.core.$KeyFactory.create(KeyFactory.java:109)
at com.google.inject.internal.cglib.core.$KeyFactory.create(KeyFactory.java:105)
at com.google.inject.internal.cglib.core.$MethodWrapper.<clinit>(MethodWrapper.java:23)
at com.google.inject.internal.cglib.core.$MethodWrapper.create(MethodWrapper.java:34)
at com.google.inject.internal.cglib.core.$DuplicatesPredicate.evaluate(DuplicatesPredicate.java:25)
at com.google.inject.internal.cglib.core.$CollectionUtils.filter(CollectionUtils.java:52)
at com.google.inject.internal.cglib.reflect.$FastClassEmitter.<init>(FastClassEmitter.java:69)
at com.google.inject.internal.cglib.reflect.$FastClass$Generator.generateClass(FastClass.java:77)
at com.google.inject.internal.cglib.core.$DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at com.google.inject.internal.cglib.core.$AbstractClassGenerator.create(AbstractClassGenerator.java:231)
at com.google.inject.internal.cglib.reflect.$FastClass$Generator.create(FastClass.java:65)
at com.google.inject.internal.BytecodeGen.newFastClassForMember(BytecodeGen.java:252)
at com.google.inject.internal.BytecodeGen.newFastClassForMember(BytecodeGen.java:203)
at com.google.inject.internal.ProviderMethod.create(ProviderMethod.java:69)
at com.google.inject.internal.ProviderMethodsModule.createProviderMethod(ProviderMethodsModule.java:275)
at com.google.inject.internal.ProviderMethodsModule.getProviderMethods(ProviderMethodsModule.java:144)
at com.google.inject.internal.ProviderMethodsModule.configure(ProviderMethodsModule.java:123)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:349)
at com.google.inject.spi.Elements.getElements(Elements.java:110)
at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:138)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)
at com.google.inject.Guice.createInjector(Guice.java:99)
at com.google.inject.Guice.createInjector(Guice.java:73)
at com.google.inject.Guice.createInjector(Guice.java:62)
at org.semanticweb.owlapi.apibinding.OWLManager.createInjector(OWLManager.java:104)
at org.semanticweb.owlapi.apibinding.OWLManager.createOWLOntologyManager(OWLManager.java:44)
at com.example.newcalculator.OwlApiSecond.creatingOntology(OwlApiSecond.java:37)
at com.example.newcalculator.MainActivity$1.onClick(MainActivity.java:41)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
E/AndroidRuntime: Caused by: java.lang.UnsupportedOperationException: can't load this type of class file
at java.lang.ClassLoader.defineClass(ClassLoader.java:591)
... 44 more
I would like to know how to solve this error. I am not sure what exactly is causing it. Any help would be appreciated. Thank you in advance.
The stack trace does not mention which class cannot be loaded, so it's hard to tell if the problem is in Guice or in OWL-API.
However, OWLAPI 5.1.0 is fairly old. 5.1.10 is available now, as well as HermiT 1.4.3.517. I would recommend updating to these versions.
One change that might be relevant in your case is that the latest versions of OWLAPI do not use Guice any more. I have not tested them on Android, but it's worth a shot to see if the problem here is entirely in Guice or not.