当我设置 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 输出空白