android - 如何在发布的apk中使用minifyEnable?

标签 android react-native proguard

我试图使用 Proguard 来混淆我的代码,但是当我将 minifyEnable 设置为 true 时,我的发布 apk 崩溃了。这是我的 build.gradle:

signingConfig signingConfigs.release
minifyEnabled enableProguardInReleaseBuilds
shrinkResources enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
multiDexKeepFile file('multidex-config.txt')

(enableProguardInReleaseBuilds 为 true)

我还尝试向 proguard-rules.pro 添加一些配置:

-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class android.support.v7.app.** { *; }
-keep interface android.support.v7.app.** { *; }

但是没有成功。

日志错误:

    java.lang.IllegalStateException: java.lang.NoSuchFieldException: fill
        at com.horcrux.svg.b0.U(:629)
        at com.horcrux.svg.l.b0(:100)
        at com.horcrux.svg.l.E(:81)
        at com.horcrux.svg.b0.N(:339)
        at com.horcrux.svg.f0.G(:304)
        at com.horcrux.svg.f0.H(:255)
        at com.horcrux.svg.f0.onDraw(:106)
        at android.view.View.draw(View.java:21421)
        at android.view.View.updateDisplayListIfDirty(View.java:20298)
        at android.view.View.draw(View.java:21153)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at com.facebook.react.views.view.f.dispatchDraw(:685)
        at android.view.View.draw(View.java:21424)
        at android.view.View.updateDisplayListIfDirty(View.java:20298)
        at android.view.View.draw(View.java:21153)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at com.facebook.react.views.view.f.dispatchDraw(:685)
        at android.view.View.updateDisplayListIfDirty(View.java:20289)
        at android.view.View.draw(View.java:21153)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.updateDisplayListIfDirty(View.java:20289)
        at android.view.View.draw(View.java:21153)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at android.view.View.draw(View.java:21424)
        at android.widget.HorizontalScrollView.draw(HorizontalScrollView.java:1745)
        at com.facebook.react.views.scroll.d.draw(:560)
        at android.view.View.updateDisplayListIfDirty(View.java:20298)
        at android.view.View.draw(View.java:21153)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at com.facebook.react.views.view.f.dispatchDraw(:685)
        at android.view.View.draw(View.java:21424)
        at android.view.View.updateDisplayListIfDirty(View.java:20298)
        at android.view.View.draw(View.java:21153)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at com.facebook.react.views.view.f.dispatchDraw(:685)
        at android.view.View.draw(View.java:21424)
        at android.view.View.updateDisplayListIfDirty(View.java:20298)
        at android.view.View.draw(View.java:21153)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at com.facebook.react.views.view.f.dispatchDraw(:685)
        at android.view.View.draw(View.java:21424)
        at android.view.View.updateDisplayListIfDirty(View.java:20298)
        at android.view.View.draw(View.java:21153)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at com.facebook.react.views.view.f.dispatchDraw(:685)
        at android.view.View.updateDisplayListIfDirty(View.java:20289)
        at android.view.View.draw(View.java:21153)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at com.facebook.react.views.view.f.dispatchDraw(:685)
        at android.view.View.updateDisplayListIfDirty(View.java:20289)
        at android.view.View.draw(View.java:21153)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at com.facebook.react.views.view.f.dispatchDraw(:685)
        at android.view.View.updateDisplayListIfDirty(View.java:20289)
        at android.view.View.draw(View.java:21153)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4388)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4149)
        at com.facebook.react.views.view.f.dispatchDraw(:685)
        at android.view.View.updateDisplayListIfDirty(View.java:20289)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4372)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4345)
        at android.view.View.updateDisplayListIfDirty(View.java:20258)
2021-08-04 10:35:25.577 25098-25098/com.pay4fun.app E/AndroidRuntime:     at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4372)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4345)
        at android.view.View.updateDisplayListIfDirty(View.java:20258)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4372)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4345)
        at android.view.View.updateDisplayListIfDirty(View.java:20258)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4372)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4345)
        at android.view.View.updateDisplayListIfDirty(View.java:20258)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4372)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4345)
        at android.view.View.updateDisplayListIfDirty(View.java:20258)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4372)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4345)
        at android.view.View.updateDisplayListIfDirty(View.java:20258)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4372)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4345)
        at android.view.View.updateDisplayListIfDirty(View.java:20258)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4372)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4345)
        at android.view.View.updateDisplayListIfDirty(View.java:20258)
        at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:575)
        at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:581)
        at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:654)
        at android.view.ViewRootImpl.draw(ViewRootImpl.java:3610)
        at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3418)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2755)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1721)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7598)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966)
        at android.view.Choreographer.doCallbacks(Choreographer.java:790)
        at android.view.Choreographer.doFrame(Choreographer.java:725)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:951)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: java.lang.NoSuchFieldException: fill
        at java.lang.Class.getField(Class.java:1604)
        at com.horcrux.svg.b0.U(:620)
            ... 111 more

有人可以帮我吗? 预先感谢您!

最佳答案

您必须添加:

-keep public class com.horcrux.svg.** {*;}

在 proguard-rules.pro (android/app/proguard-rules.pro)

更多详细信息请参见 this issue

关于android - 如何在发布的apk中使用minifyEnable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68643215/

相关文章:

image - 为 React Native 应用程序选择图像大小

android - 混淆器 : can't find referenced class (to R. java)

android - Proguard 不会混淆 AAR 类

Android simplexml.jar混淆问题

android - glDiscardFrameBufferEXT 在 Android 中未定义,是否有等效项?

android - '错误: the command "android" failed' using cordova

java - 在 Android 上禁用自动布局更改

android - 检测耳机安卓

reactjs - rowHasChanged Undefined 不是构造函数

javascript - React原生响应式标题高度