Lottie加载的一些坑

    之前,我写过一篇非常详细的博客来总结Lottie在Android端的使用,https://zhaojun.blog.csdn.net/article/details/115773156 在使用的过程中,其实会遇到一些诡异的问题。通常,这不是使用方式上有什么问题,大都是UE产出的lottie本身存在问题。那么,我们如何辅助UE去定位lottei的问题呢?本篇记录lottie加载遇到的一些坑或问题。

目录

一、Lottie加载本地zip包的诡异问题

二、iOS单端崩溃问题

三、Android加载不显示问题

四、Android单端崩溃问题


一、Lottie加载本地zip包的诡异问题

        private void loadLottieWithLocalZip() {
            try {
                LottieCompositionFactory.fromZipStream(new ZipInputStream(
                        new FileInputStream("/sdcard/test.zip")), null)
                        .addListener(new LottieListener() {
                            @Override
                            public void onResult(final LottieComposition lottieComposition) {
                                if (lottieComposition != null) {
                                    mLottieView.setComposition(lottieComposition);
                                    mLottieView.playAnimation();
                                }
                            }
                        })
                        .addFailureListener(new LottieListener() {
                            @Override
                            public void onResult(Throwable result) {
                                Log.d("TTTT", "result:" + result.getMessage());
                            }
                        });
            } catch (Exception e) {
                Log.d("TTTT", "e:" + e.getMessage());
            }
        }

lottie加载不出来,走到Failure回调,异常如下:

Lottie加载的一些坑_第1张图片

解压后,lottie zip包里面有img_3.jpg:

Lottie加载的一些坑_第2张图片

查看data.json文件:

 Lottie加载的一些坑_第3张图片

图片是jpg,但是下面这个cl是png,不懂lottie的字段是啥,怀疑可能有问题:

 Lottie加载的一些坑_第4张图片

 UE重新出了一个所谓的兼容lottie,试了一下,还是加载不出来,一样的报错。

咋办?看lottie源码去:

1、首先,看下抛出这个异常的代码:

 拿不到这个bitmap,所以抛出了异常。

2、顺着这里往上看:

Lottie加载的一些坑_第5张图片

 找到了,判断png或者webp的,才会加载bitmap,否则给close了。那么,我们基本确定,是因为UE给的lottie包里面的图片有jpg的,而通过zip包加载不支持jpg(不知道lottie为什么有这个限制)。

于是,我强制把jpg改为png,并修改了data.json里面的jpg,尝试加载,成功了!

二、iOS单端崩溃问题

    好好的lottie在Android加载没问题,但是在iOS崩溃了。看下是不是json的某个layer缺了ind这个属性:

三、Android加载不显示问题

    好好的lottie在iOS加载成功了,但是Android没加载出来,也没有crash。看下是不是在json里面直接使用base64编码的图片了。

四、Android单端崩溃问题

    之前遇到过一个lottie,在iOS加载没问题,但是Android稳定的崩溃,通过调试发现是lottie内部使用了iOS的某种字体,而该字体在Android系统不存在。因此,建议UE不要再lottie中使用系统字体。

    以上是lottie使用过程中常遇到的一些诡异问题,如开篇所说,这都是UE做lottie时产生的问题。

你可能感兴趣的:(android)