gpt4 book ai didi

android - DexGuard 和矢量绘图

转载 作者:行者123 更新时间:2023-11-29 17:16:00 27 4
gpt4 key购买 nike

我正在使用 DexGuard 编译我的应用程序。我的应用程序使用矢量绘图。我的所有设置都是正确的,并且在调试版本和发布版本中使用 Proguard 时都能正常工作。它仅在使用 DexGuard 时在发布版本中崩溃。所以我知道这是 DexGuard 的问题。我正在使用 DexGuard v7.0,但由于许可证限制,我无法更新。我已经添加了
-keepresourcefiles“res/drawable/**”
-保持类android.support.v7.** { *; }
为了测试目的和更清晰的堆栈跟踪,我的 dexguard 文件,所以我们知道这不是问题所在。它因以下堆栈跟踪而崩溃;

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lionscribe.myapp/com.lionscribe.elist.main.MainActivity}: android.content.res.Resources$NotFoundException: File res/drawable/abc_ic_ab_back_material.xml from drawable resource ID #0x7f020018
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
at android.app.ActivityThread.access$900(ActivityThread.java:175)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/abc_ic_ab_back_material.xml from drawable resource ID #0x7f020018
at android.content.res.Resources.loadDrawable(Resources.java:3440)
at android.content.res.Resources.getDrawable(Resources.java:1917)
at o.?.?(:354)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(:193)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(:181)
at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(:689)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(:186)
at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(:77)
at android.support.v7.app.AppCompatDelegateImplBase.<init>(:83)
at android.support.v7.app.AppCompatDelegateImplV7.<init>(:146)
at android.support.v7.app.AppCompatDelegateImplV11.<init>(:28)
at android.support.v7.app.AppCompatDelegateImplV14.<init>(:41)
at android.support.v7.app.AppCompatDelegate.create(:193)
at android.support.v7.app.AppCompatDelegate.create(:173)
at android.support.v7.app.AppCompatActivity.getDelegate(:511)
at android.support.v7.app.AppCompatActivity.onCreate(:71)
at o.hF.onCreate(:29)
at com.lionscribe.elist.main.MainActivity.onCreate(:121)
at android.app.Activity.performCreate(Activity.java:5451)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471) 
at android.app.ActivityThread.access$900(ActivityThread.java:175) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:146) 
at android.app.ActivityThread.main(ActivityThread.java:5602) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #17: invalid drawable tag vector
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:986)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:930)
at android.content.res.Resources.loadDrawable(Resources.java:3436)
at android.content.res.Resources.getDrawable(Resources.java:1917) 
at o.?.?(:354) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(:193) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(:181) 
at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(:689) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(:186) 
at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(:77) 
at android.support.v7.app.AppCompatDelegateImplBase.<init>(:83) 
at android.support.v7.app.AppCompatDelegateImplV7.<init>(:146) 
at android.support.v7.app.AppCompatDelegateImplV11.<init>(:28) 
at android.support.v7.app.AppCompatDelegateImplV14.<init>(:41) 
at android.support.v7.app.AppCompatDelegate.create(:193) 
at android.support.v7.app.AppCompatDelegate.create(:173) 
at android.support.v7.app.AppCompatActivity.getDelegate(:511) 
at android.support.v7.app.AppCompatActivity.onCreate(:71) 
at o.hF.onCreate(:29) 
at com.lionscribe.elist.main.MainActivity.onCreate(:121) 
at android.app.Activity.performCreate(Activity.java:5451) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471) 
at android.app.ActivityThread.access$900(ActivityThread.java:175) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:146) 
at android.app.ActivityThread.main(ActivityThread.java:5602) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
at dalvik.system.NativeStart.main(Native Method) 

根据代码,我在使用 DexGuard 时遵循 android.support.v7.widget.AppCompatDrawableManager 中的方法 loadDrawableFromDelegates(从 getDrawable 调用) 返回 null。因此 getDrawable 继续调用 ContextCompat.getDrawable,它不支持 Lollipop 之前的设备中的 Vectors,它返回 null 和一个 无效的可绘制标签向量 日志,因此导致 ResourcesNotFoundException
使用调试版本时,loadDrawableFromDelegates 会返回一个 Drawable,因此不会调用 ContextCompat.getDrawable,一切正常。有谁知道如何避免这种情况。我用 Google 搜索了一下,还有其他人遇到了类似的问题,但它们主要是应用程序兼容性矢量设置问题,而不是 DexGuard。

最佳答案

经过 12 个小时的工作,我终于弄明白了,它只是 DexGuard 配置中的 1 行。您不需要我上面提到的任何设置。你只需要

-keepresourcexmlattributenames vector/**

原因是 AppCompat 库不查找矢量的属性,如 viewportWidth 通过 id,但它使用实际的属性名称。默认情况下,Dexguard 会删除名称,因此它永远不会找到该值。通过添加以上行,您告诉 DexGuard 保留所有矢量文件的属性名称。
我希望这可以让其他人免于心痛。

关于android - DexGuard 和矢量绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39003356/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com