【问题标题】:Making Dexguard to do not remove unused resources使 Dexguard 不删除未使用的资源
【发布时间】:2015-09-27 10:21:49
【问题描述】:

我很难使用 dexguard 使其不删除我以这种方式访问​​的资源:

int resourceId=getResources().getIdentifier("图片", "array", getActivity().getPackageName());

当我执行应用程序时,我得到以下异常:

java.lang.RuntimeException:无法启动活动 android.content.res.Resources$NotFoundException: 数组资源 ID #0x0 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 在 android.app.ActivityThread.access$800(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 引起:android.content.res.Resources$NotFoundException: Array resource ID #0x0

我在 proguard-project.txt 中使用了从堆栈溢出的一些相关问题中提取的此指令,但没有解决任何问题:

-keepclassmembers class **.R$* {
    public static <fields>;
}

-keep class **.R$*

我怎样才能告诉 dexguard 不要剥离这个资源?

提前致谢。

【问题讨论】:

  • 要移除未使用的资源,请尝试使用 Android Lint 工具
  • 问题是关于不删除未使用的资源,而不是删除它们。我错过了什么吗?

标签: java android proguard dexguard


【解决方案1】:

在与 dexguard 创建者交谈之后,似乎可以通过以下方式实现:

-keepresources array/pictures
-keepresources array/a_*

希望其他人会觉得这很有用

干杯。

【讨论】:

  • 它对你有用吗?我也面临同样的问题,但在 android studio 中对我不起作用
  • 是的。我也在用安卓工作室。
  • 但我这边得到了一些图像。 dexguard 收缩过程中删除了一些文件。我保存在我的 dexguard 文件中 -keep class *.R -keep class **.R$ { ; } #保留 R -keepclassmembers 类 **.R$ { ; } -keepclassmembers 类 **.R { *; } 但没有用。一些图像仅显示
  • 从这里很难确切地知道发生了什么。您可以联系 dexguard 程序员。这是一个非常乐于助人的人。
  • 感谢您的重播。我自己找到了答案。只需保留资源并删除缩小选项即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多