Android app加固导致的 Gif 动画卡顿问题

2021-04-13  本文已影响0人  xiaodouyaer

故事背景:

平时调试 app 用的都是 debug 模式,并没有注意到 release 包安装后,gif 图竟然卡顿,就像 《疯狂动物城》 中 闪电 的慢动作一样,着实难受。

闪电闪电,快如闪电.jpg

原因查找分析:

debug:              没问题
release:            没问题
360加固后的release:  有问题

经过测试分析,发现只有经过360加固的 release 包才会出现这种现象,于是换了N个加固方式,依然没有一点作用,看来加固都会有这个问题。我这里是用的Glide加载 gif,于是换了它,用 lottie,并且把 gif 换成 lottie 专用的 json 文件。

实施:

1、gif 改成 json
我用AE将 gif 导出成了 lottie 用的 json 文件,这个要用到一个插件 BodyMovin ,它可以帮你把动画转成json文件,我这里用到了一些图片,不是单纯的动画矢量路径,所以最后用的是一个 zip压缩包,包有一个文件夹images,一个data.json文件。
2、BodyMovin 设置
有几个设置需要勾选,不然可能会无法正常导出(我这是英文版,汉化了的就大概翻译对照一下)。

AssetsRasterized assets settings (jpg, png)
------Original Asset Names         勾选
------Copy Original Assets         勾选

Export Modes
------Standard    勾选
------Demo        勾选,便于查看效果

Advanced export settingsAdvanced export features
------Export old json format (for backwards compatibility)    勾选,为了兼容旧版Android系统

3、Android 应用 json
添加依赖:

implementation 'com.airbnb.android:lottie:3.7.0'

xml:

<com.airbnb.lottie.LottieAnimationView
     android:id="@+id/gif_view"
     android:layout_width="@dimen/DP90"
     android:layout_height="@dimen/DP90"
     app:lottie_fileName="android_blink.zip"
     app:lottie_loop="true"
     app:lottie_repeatCount="1" />

稍作解释:

app:lottie_fileName       动画文件位置,我这里是在assets 根目录下
app:lottie_loop           是否循环播放动画
app:lottie_repeatCount    重复播放次数,1的话就是重复一次,就是总共播放两次
app:lottie_autoPlay       这个属性我没用,这个是是否自动播放,我这里是在代码中控制的

java 代码中的操作(如果xml中设置了app:lottie_autoPlay="true",就不需要了):

LottieAnimationView gifView = findViewById(R.id.gif_view);
gifView.playAnimation();
上一篇 下一篇

猜你喜欢

热点阅读