Lottie-web: AVD export is crashing the app on Android API Level <21

Created on 10 Aug 2017  路  18Comments  路  Source: airbnb/lottie-web


loading_icon_animated.txt

Tell us about your environment

  • Phone Version: Android 19
  • After Effects Version: 14.2.1.34

What did you do? Please explain the steps you took before you encountered the problem.
Just exporting a xml file with After Effects and trying to integrate it into an Android application.

What did you expect to happen?
An animating vector drawable

What actually happened? Please include as much _relevant_ detail as possible.
Crash after the following line of code:

AnimatedVectorDrawableCompat animatedVectorDrawable = AnimatedVectorDrawableCompat.create(getContext(), R.drawable .loading_icon_animated);

Caused by: android.view.InflateException: pathInterpolator requires the controlX1 attribute at android.support.graphics.drawable.PathInterpolatorCompat.parseInterpolatorFromTypeArray(PathInterpolatorCompat.java:90) at android.support.graphics.drawable.PathInterpolatorCompat.<init>(PathInterpolatorCompat.java:72) at android.support.graphics.drawable.PathInterpolatorCompat.<init>(PathInterpolatorCompat.java:65) at android.support.graphics.drawable.AnimationUtilsCompat.createInterpolatorFromXml(AnimationUtilsCompat.java:140) at android.support.graphics.drawable.AnimationUtilsCompat.loadInterpolator(AnimationUtilsCompat.java:81) at android.support.graphics.drawable.AnimatorInflaterCompat.loadAnimator(AnimatorInflaterCompat.java:821) at android.support.graphics.drawable.AnimatorInflaterCompat.loadObjectAnimator(AnimatorInflaterCompat.java:790) at android.support.graphics.drawable.AnimatorInflaterCompat.createAnimatorFromXml(AnimatorInflaterCompat.java:443) at android.support.graphics.drawable.AnimatorInflaterCompat.createAnimatorFromXml(AnimatorInflaterCompat.java:454) at android.support.graphics.drawable.AnimatorInflaterCompat.createAnimatorFromXml(AnimatorInflaterCompat.java:417) at android.support.graphics.drawable.AnimatorInflaterCompat.loadAnimator(AnimatorInflaterCompat.java:126) at android.support.graphics.drawable.AnimatorInflaterCompat.loadAnimator(AnimatorInflaterCompat.java:113) at android.support.graphics.drawable.AnimatorInflaterCompat.loadAnimator(AnimatorInflaterCompat.java:96) at android.support.graphics.drawable.AnimatedVectorDrawableCompat.inflate(AnimatedVectorDrawableCompat.java:485) at android.support.graphics.drawable.AnimatedVectorDrawableCompat.createFromXmlInner(AnimatedVectorDrawableCompat.java:253) at android.support.graphics.drawable.AnimatedVectorDrawableCompat.create(AnimatedVectorDrawableCompat.java:233)

Please provide a download link to the After Effects file that demonstrates the problem.
File attached

Most helpful comment

This is fixed in buildToolsVersion 27.0.1 馃檶

All 18 comments

Hi, Can you share the .aep or the exported .xml?

@bodymovin the xml file is attached as txt file as xml file upload is not supported

Can you confirm the Android Gradle Plugin version, support library version and the buildToolsVersion you are using in your app? This sounds like an issue we saw with early versions of aapt2 but should now be fixed.

I am using gradle 2.3.3 and buildToolsVersion 25.0.2

I'm also facing similar issue

Caused by: java.lang.RuntimeException: Unknown interpolator name: pathInterpolator
             at android.view.animation.AnimationUtils.createInterpolatorFromXml(AnimationUtils.java:328)
             at android.view.animation.AnimationUtils.loadInterpolator(AnimationUtils.java:271)
             at android.animation.AnimatorInflater.loadAnimator(AnimatorInflater.java:307)
             at android.animation.AnimatorInflater.loadObjectAnimator(AnimatorInflater.java:161)
             at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:117)
             at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:126)
             at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:93)
             at android.animation.AnimatorInflater.loadAnimator(AnimatorInflater.java:72)
             at android.support.graphics.drawable.AnimatedVectorDrawableCompat.inflate(AnimatedVectorDrawableCompat.java:408)
             at android.support.graphics.drawable.AnimatedVectorDrawableCompat.createFromXmlInner(AnimatedVectorDrawableCompat.java:179)
             at android.support.graphics.drawable.AnimatedVectorDrawableCompat.create(AnimatedVectorDrawableCompat.java:159)
             at android.app.Activity.performCreate(Activity.java:5231)
             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)聽
             at android.app.ActivityThread.access$800(ActivityThread.java:135)聽
             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)聽
             at android.os.Handler.dispatchMessage(Handler.java:102)聽
             at android.os.Looper.loop(Looper.java:136)聽
             at android.app.ActivityThread.main(ActivityThread.java:5017)聽
             at java.lang.reflect.Method.invokeNative(Native Method)聽
             at java.lang.reflect.Method.invoke(Method.java:515)聽
             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)聽
             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)聽
             at dalvik.system.NativeStart.main(Native Method)

@harryio I also have this issue sometimes

Can you try with:
Android Gradle Plugin: 3.0.0-beta1
Build Tools Version: 26.0.1
Support Library: 26.0.1

With that setting I am getting a different error. Anyway, I am working in a big company with more than 20 apps I can't just upgrade to the new gradle plugin nor the support lib. My fallback would be to use Lottie animations, but I actually wanted to avoid that.

Caused by: java.lang.RuntimeException: Unknown animator name: attr at android.support.graphics.drawable.AnimatorInflaterCompat.createAnimatorFromXml(AnimatorInflaterCompat.java:549) at android.support.graphics.drawable.AnimatorInflaterCompat.createAnimatorFromXml(AnimatorInflaterCompat.java:538) at android.support.graphics.drawable.AnimatorInflaterCompat.createAnimatorFromXml(AnimatorInflaterCompat.java:501) at android.support.graphics.drawable.AnimatorInflaterCompat.loadAnimator(AnimatorInflaterCompat.java:131) at android.support.graphics.drawable.AnimatorInflaterCompat.loadAnimator(AnimatorInflaterCompat.java:118) at android.support.graphics.drawable.AnimatorInflaterCompat.loadAnimator(AnimatorInflaterCompat.java:102) at android.support.graphics.drawable.AnimatedVectorDrawableCompat.inflate(AnimatedVectorDrawableCompat.java:482) at android.support.graphics.drawable.AnimatedVectorDrawableCompat.createFromXmlInner(AnimatedVectorDrawableCompat.java:250) at android.support.graphics.drawable.AnimatedVectorDrawableCompat.create(AnimatedVectorDrawableCompat.java:230)

Tried with the above settings and still the same issue

Not sure this is the same issue (or if it's related at all, I'm not a developer) but here is my issue just in case:
I was also having my app crashing on launch, after comparing my xml with others online I saw mine had < group > in some parts that should have had < path >, I found out my issue was because I was trying exporting predefined "shapes" in After Effects instead of raw "paths" (which maybe its obvious but I didn't know any better), I converted my shapes to paths and then the issues were fixed.

screen shot 2017-08-14 at 09 37 11

Hi @cf351 , indeed parametric shapes are not supported because they don't translate well to AVD. Nevertheless, I've managed to support rectangles and ellipses as long as they are not animated on the latest version.
What version are you using?

Hi @bodymovin, thanks for the info, didn't know those shapes were supported (if not animated).
I am using latest versions of everything (plugin, AE, Android), just now am I realizing that this ticket it's only about "API < 21", I thought it was a similar issue to mine and wanted to share my solution.
Thanks again for responding :)

Same issue here. It seems that the pathInterpolator is not loaded with its compat class, with the removal of the pathInterpolator everything's fine.

@nickbutcher any progress?

Sorry, nothing to report yet. I've filed bugs and the team is working on a fix.

@nickbutcher Narrowed this down a bit. Crash goes away (on my particular test file) if I remove:

                    <aapt:attr name="android:interpolator">
                        <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0"/>
                    </aapt:attr>

From:

                <objectAnimator
                    android:duration="667"
                    android:propertyName="trimPathStart"
                    android:startOffset="868"
                    android:valueFrom="0"
                    android:valueTo="1"
                    android:valueType="floatType">
                    <aapt:attr name="android:interpolator">
                        <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0"/>
                    </aapt:attr>
                </objectAnimator>

(Seems like AAPT2 doesn't support <aapt:attr ...> inside <objectAnimator>...</objectAnimator>)

Sample files (one crashes, one doesn't):
https://gist.github.com/petedoyle/409998f898a277b83649d1293403ee77

Not sure if there are tags other than objectAnimator that might also be affected...

Edit: might be fixed in the next build tools? https://issuetracker.google.com/issues/67668749

This is fixed in buildToolsVersion 27.0.1 馃檶

Even if i use AnimatedVectorDrawable in buildToolsVersion 27.0.1, it also go wrong when api < 21.
I think the file should use some property that not available in the low version.

java.lang.NullPointerException at android.animation.PropertyValuesHolder.setupSetterAndGetter(PropertyValuesHolder.java:505) at android.animation.ObjectAnimator.initAnimation(ObjectAnimator.java:487) at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:517) at android.animation.ValueAnimator.start(ValueAnimator.java:936) at android.animation.ValueAnimator.start(ValueAnimator.java:946) at android.animation.ObjectAnimator.start(ObjectAnimator.java:465) at android.animation.AnimatorSet.start(AnimatorSet.java:563) at android.animation.AnimatorSet$DependencyListener.startIfReady(AnimatorSet.java:762) at android.animation.AnimatorSet$DependencyListener.onAnimationStart(AnimatorSet.java:731) at android.animation.AnimatorSet.start(AnimatorSet.java:593) at android.animation.AnimatorSet.start(AnimatorSet.java:563) at android.support.graphics.drawable.AnimatedVectorDrawableCompat.start(AnimatedVectorDrawableCompat.java:705)

@denghewenai as this sounds like an issue with AnimatedVectorDrawableCompat please can you file an issue with repro case at https://issuetracker.google.com/

Was this page helpful?
0 / 5 - 0 ratings

Related issues

leantide picture leantide  路  3Comments

joelponce picture joelponce  路  4Comments

ritsraghani picture ritsraghani  路  3Comments

ochanje210 picture ochanje210  路  3Comments

DannyK123456 picture DannyK123456  路  3Comments