当我使用 minifyEnabled 应用程序时不断崩溃

Posted

技术标签:

【中文标题】当我使用 minifyEnabled 应用程序时不断崩溃【英文标题】:when i use minifyEnabled app keep crashing 【发布时间】:2019-10-12 05:23:46 【问题描述】:

最近我开发了一个安卓应用。 一切都很顺利,但是当我使用“minifyEnabled true”时,应用程序不断崩溃并出现此错误:

com.google.gson.internal.LinkedTreeMap$1
java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1344)
java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:959)
java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:360)
java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1054)
java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1384)
java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:959)
java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:360)
java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1054)
java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1384)
java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
org.matrix.androidsdk.data.cryptostore.db.HelperKt.serializeForRealm(:102)
org.matrix.androidsdk.data.cryptostore.db.model.DeviceInfoEntity.putDeviceInfo(:43)
org.matrix.androidsdk.data.cryptostore.db.RealmCryptoStore$storeUserDevices$1.invoke(:244)
org.matrix.androidsdk.data.cryptostore.db.RealmCryptoStore$storeUserDevices$1.invoke(:44)
org.matrix.androidsdk.data.cryptostore.db.HelperKt$doRealmTransaction$1.execute(:86)
io.realm.Realm.a(:1493)
org.matrix.androidsdk.data.cryptostore.db.HelperKt.doRealmTransaction(:86)
org.matrix.androidsdk.data.cryptostore.db.RealmCryptoStore.storeUserDevices(:228)
org.matrix.androidsdk.crypto.MXDeviceList$4$1.run(:605)
android.os.Handler.handleCallback(Handler.java:815)
android.os.Handler.dispatchMessage(Handler.java:104)
android.os.Looper.loop(Looper.java:227)
android.os.HandlerThread.run(HandlerThread.java:61)

我在 proguard 配置文件中尝试了很多更改,但问题仍然存在

【问题讨论】:

【参考方案1】:

看起来 Proguard 无法正确处理 LinkedTreeMap。尝试添加一条规则以跳过此类到位于 app 文件夹内的 proguard-rules.pro 文件

-keep class [full class name]  *; 

【讨论】:

你的意思是-keep class com.google.gson.internal.LinkedTreeMap *; 是的!您可以试一试,但我认为问题出在您的 proguard 规则集中,您是否将以下规则添加到您的 proguard 文件中? rules

以上是关于当我使用 minifyEnabled 应用程序时不断崩溃的主要内容,如果未能解决你的问题,请参考以下文章

当 minifyenabled 为 true 时,Tesseract 错误 java.lang.NoSuchFieldError

仅针对外部库将“minifyEnabled”设置为“false”

设置 minifyEnabled 为 true 时无法使用 GSON 解析 json 对象

Android proguard minifyEnabled true + multidex = error

为啥使用“minifyEnabled true”时 Proguard 不起作用?

使用 Picasso 和 minifyEnabled 时应用程序崩溃 true