当我设置 minifyEnabled = true 时,应用程序无法使用 API

Posted

技术标签:

【中文标题】当我设置 minifyEnabled = true 时,应用程序无法使用 API【英文标题】:When I made minifyEnabled = true the app not working with API 【发布时间】:2021-10-20 07:49:21 【问题描述】:

我有一个大问题,我没有找到任何解决方案,当我在 Google play 中上传应用时,我发现了这个警告:

没有与此 App Bundle 关联的反混淆文件

经过研究,我发现了映射文件的问题,我 minifyEnabled = true 但是当我添加时我发现问题 Missing class: org.conscrypt.ConscryptHostnameVerifier 并且当我尝试打开应用程序时,当我尝试调用 API 时没有响应任何东西 我进行了很多搜索,但没有任何好处,我找到了所有解决方案,但我没有成功解决任何问题。有人有解决方案吗?

编辑 1:

当我调试错误时,我发现该方法中出现错误“指定为非空的参数为空:方法 j.u.b.e,参数消息”

protected fun <T> withLiveData(liveData: APILiveData<T>): SingleObserver<DataWrapper<T>> 
    return object : SingleObserver<DataWrapper<T>> 
        override fun onError(e: Throwable) 
        override fun onSuccess(t: DataWrapper<T>) = liveData.postValue(t)
        override fun onSubscribe(d: Disposable) 
            compositeDisposable.add(d)
        
    

【问题讨论】:

当我调试错误时,我发现错误“指定为非空的参数为空:方法 j.u.b.e, 参数消息” 【参考方案1】:

添加minifyEnabled true 会混淆您的代码。通过对编译后的应用程序进行逆向工程,确保编写的代码无法被读取是一种安全措施。但是如果你没有添加正确的ProGuard 规则,它会弄乱你所有的应用程序。

您可以使用minifyEnabled false 构建应用程序并将捆绑包上传到 Play 并暂时忽略警告。但是开始搜索“android Obfuscation”。

Shrink, obfuscate, and optimize your app

【讨论】:

【参考方案2】:

您必须添加 ProGuard 规则。当您将 minifyEnabled 设置为 true 时,它​​会检测到任何未使用的代码或库,并从您的最终 apk/aab 中忽略它们。因此,您应该将模型的数据类添加到 ProGuard。 检查这个Common Proguard Rules

【讨论】:

是的,我已经将此类 org.conscrypt.ConscryptHostnameVerifier 放在 ProGurad 中,但应用程序仍然没有调用任何 API【参考方案3】:

经过大量搜索和大量尝试后,我发现了问题,但是当我输入 minifyEnabled = true 时非常困难,正如我提到的,我发现删除了很多类,我需要我去所有项目逐步检查该类是否已删除,如果已删除,则必须以相同的方式放入文件 progaurd-rules.pro 中

-keepclassmembers class  io.reactivex.schedulers.Schedulers
                                                      public *;
                                                   

但这需要很多次。

【讨论】:

以上是关于当我设置 minifyEnabled = true 时,应用程序无法使用 API的主要内容,如果未能解决你的问题,请参考以下文章

将 minifyEnabled 设置为 true 后,我收到以下错误 [重复]

NotSerializableException: kotlin.UNINITIALIZED_VALUE 设置 minifyEnabled 后为 true

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

生成带有 minifyEnabled 设置为 true 的签名 APK 后,firebase UI 输出空白

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

Android proguard minifyEnabled true + multidex = error