程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-06(1)

Flutter debug版本正常、release版本Crash问题的踩坑记录

发布于2021-06-14 11:07     阅读(463)     评论(0)     点赞(21)     收藏(2)


最近学习Flutter,遇到的问题记录一下

开发Flutter版本的产品时,在集成阿里云播放器之后一直正常开发。结果发现打了Release的包之后,在进入到播放器页面时,App会直接Crash。

Flutter的报错信息也不是很明显。

JNI DETECTED ERROR IN APPLICATION: java_class == null
in call to GetFieldID
from java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader, java.lang.Class)
Runtime aborting…
Dumping all threads without mutator lock held

说是JNI调用返回了null,但是我想着也没动过这一层。
错误信息

刚开始按照堆栈信息研究了半天,一直没有结果。就我一个移动端,没有大佬带的菜鸡。难受
后来仔细想了一下,这种debug正常,release Crash的问题,应该跟配置有关系,然后根据配置分别排查。

1. 签名问题 (失败)

首先考虑到的是签名问题,release和debug签名不同,因为没有创建release的签名。flutter默认会使用debug的签名。

创建release签名, 重新设置。失败

2. 版本问题 (失败)

由于是Flutter项目,很多东西不会提示,例如gradle。所以在Android Studio界面以Android项目打开。

检查了阿里云播放器的版本。项目的Gradle Plugin版本。修改后重试。仍然失败。

但是得到了一个相对有用的信息,在更改Gradle版本的时候,有提示说AliPlayer的Gradle在5.0之后不再禁止R8。突然就想到了混淆压缩

3. 混淆压缩 (成功)

第一个Flutter项目,根本没有去混淆代码,刚开始也没有考虑到这个方面。

后来突然想到之前在Android开发者上看到Google分享的文章,关于R8压缩的详解。又查询到release版本是默认开启R8压缩的。

然后就在build.gradle中修改配置

buildTypes {
        release {
            minifyEnabled false
            shrinkResources false
            signingConfig signingConfigs.release
        }
    }

使用Flutter的build apk功能重试,但是还是不行。就很奇怪,明明关闭了压缩和移除无用资源。

万万没想到。我用命令flutter build apk --release编译了release的包。成功了。后来重试,发现应该是缓存的问题。

至此,该问题就解决了。就因为不够仔细,花费了我两天的时间。留下了没有知识的泪水。

原文链接:https://blog.csdn.net/A_Intelligence/article/details/117732513



所属网站分类: 技术文章 > 博客

作者:小泽圈儿郎

链接:http://www.javaheidong.com/blog/article/222765/6aceaeb000775a6821dd/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

21 0
收藏该文
已收藏

评论内容:(最多支持255个字符)