Lottie加载的一些坑

    Lottie是一个非常强大的动画库,可以渲染一些非常绚丽的动画。然而在使用的过程中,会遇到一些诡异的问题。通常,这不是使用方式上有什么问题,大都是UE产出的lottie本身存在问题。本来之前的UE小哥还不错的,跳槽后来了个UE小姐姐,实在是一言难尽。。。那么,既然UE经常搞事情,我们如何辅助UE去定位lottei的问题呢?本篇记录lottie加载遇到的一些坑或问题。

    之前,我写过一篇非常详细的博客来总结Lottie在Android端的使用,如果是使用lottie,可以参考我这边文章,非常详细https://zhaojun.blog.csdn.net/article/details/115773156https://zhaojun.blog.csdn.net/article/details/115773156       

目录

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

二、iOS单端崩溃问题

三、Android加载不显示问题

四、Android单端崩溃问题


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

    看下面的一个例子,好端端的一个lottie,加载不出来,也没有崩溃走到Exception回调中。于是我添加FailureListener,去看下到底报了什么错。

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

可以看到,走到了Failure回调,异常如下,看上去像是缺少了某个image:

然而对lottie的zip文件解压后,其实里面有img_3.jpg:

因此,并不是缺少了Img_3.jpg这个文件。那接下来如何分析呢?我们查看下lottie里面的data.json文件:

 

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

 

UE小姐姐重新出了一个所谓的"兼容lottie",抱着试了一下,还是加载不出来,一样的报错。咋办?只能去看lottie源码:

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

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

2、顺着这里往上看:

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

    于是,我强制把jpg后缀改为png,并修改了data.json里面的jpg,尝试加载,成功了!当然,实际上我们肯定不能这么去修改后缀和json,还是反馈给UE去出一版png的lottie,毕竟在生产lottie这方面人家还是专业的。。

二、iOS单端崩溃问题

    再来看这么一个例子,也是好好的lottie,在Android加载没问题非常完美,但是同事说在iOS直接崩溃了。调试半天发现json的某个layer缺了ind这个属性:

三、Android加载不显示问题

    再来一个例子,UE小姐姐产出的lottie在iOS加载成功了,但是Android没加载出来,也没有crash。然后又开始甩锅给我Android了,直接去看下是不是在json里面直接使用base64编码的图片:

 Android的Lottie不能像上面那么直接使用base64的图片,得使用路径和文件名的形式:

 

四、Android单端崩溃问题

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

    以上是lottie使用过程中常遇到的一些诡异问题,如开篇所说,这都是UE做lottie时产生的问题,而RD通过调试可以很快的发现问题。但如果我们把这些问题整理下来,可能不用调试看下文件内容就知道了,希望对你有所帮助。

猜你喜欢

转载自blog.csdn.net/qq_21154101/article/details/130112570