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)

Reply via email to