Joris Borgdorff created AVRO-2863:
-------------------------------------
Summary: Avro 1.9.2 Java library does not work on Android
Key: AVRO-2863
URL: https://issues.apache.org/jira/browse/AVRO-2863
Project: Apache Avro
Issue Type: Wish
Components: java
Affects Versions: 1.9.2, 1.9.1, 1.9.0
Environment: Android 5.0.2 (API 21) up to the latest Android version,
using Android Gradle plugin version 4.0.0.
Reporter: Joris Borgdorff
One of our Android apps uses Avro to communicate with the server. Up to vision
1.8.2, it used a subset of the Avro library that was needed to perform this
communication. It does not use any of the compress codecs and keeps the use of
reflection to a minimum. Since Avro 1.9.0 a few blocking incompatibilities have
been introduced. This prevents us from using any of the developments in Avro
version 1.9.x, including the updated Jackson dependency.
org.apache.avro.Schema uses ThreadLocal.withInitial, only available with
Android API 26 (Android 8.0)
org.apache.avro.reflect.ReflectUtils uses Method.invokeExact, not available on
Android
org.apache.avro.reflect.ReflectData uses java.lang.ClassValue, not available on
Android
I've experimented with excluding the org.apache.avro.reflect from the
distribution (except MapEntry, which is used elsewhere) and providing my own
java.lang.ClassValue implementation. This resolves all build and runtime issues
for Android API 26 and above except for ThreadLocal.withInitial, which cannot
be circumvented.
For now the Android app will keep using 1.8.2, but we would prefer to use 1.9.2
or later.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)