故事背景:
平时调试 app 用的都是 debug 模式,并没有注意到 release 包安装后,gif 图竟然卡顿,就像 《疯狂动物城》 中 闪电 的慢动作一样,着实难受。
![](https://img.haomeiwen.com/i8904739/206eb69fbf69d9ea.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();
网友评论