java - 如何强制 Proguard 保留我的 .xml 资源文件?

标签 java android embedded-resource proguard

我成功地将混淆器用于我的 Android 应用程序。

但是,我遇到了一个应用程序的问题。

此应用程序使用一个 java 库,该库具有存储在程序包中的 .xml 文件。

InputStream istream = Library.class.getResourceAsStream("resource.xml");

这个库在混淆器被禁用时工作得很好。然而,运行 proguard,似乎 xml 文件被完全剥离。

相关proguard.cfg

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
#-dontobfuscate
#-repackageclasses '' //THIS IS DISABLED
-keepattributes *Annotation*
-keepattributes Signature
-verbose
-dontwarn roboguice.activity.RoboMapActivity
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

关于如何强制保留此 xml 文件的任何想法?

最佳答案

您应该在 res/raw 下添加一个新文件 keep.xml。

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*"
    tools:discard="@layout/unused2" />

在 tools:keep 中,您列出了要保留的布局。如果您在代码中使用反射来获取可绘制对象,您甚至可以保留特定可绘制对象

tools:keep="@drawable/ico_android_home_infosperso"

我更喜欢添加 tools:shrinkMode="strict"所以我确保没有资源被淘汰,除非它没有被确定使用。您可能想查看此链接 Shrink your code . 不要忘记将这些行添加到您的混淆器规则中:

-keepattributes InnerClasses -keep class **.R -keep class **.R$* { <fields>; }

关于java - 如何强制 Proguard 保留我的 .xml 资源文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5848761/

相关文章:

java - 在 JBOSS 5.0.1 中访问 ServicePOJO 时出错

rust - 当包含在 include_bytes 宏中的文件被更改时,我如何告诉 Cargo 重建?

python - 在 python 脚本中嵌入资源

c# - 当我将 WPF UserControl 用于其内置项目以外的项目时,我的 WPF UserControl 无法找到资源

java - 在 postman 中发送 PathVariable @PostMapping

java - Java 中的 X509Certificate2.Export 等效项

Java等级计算器。我需要一些帮助来开始这个类

android - 安卓手机与智能电视(LG、Sony)收发数据支持DIAL

Android:如何自定义 AlertDialog、Dialog 和 Spinner 标题

android - android 上常规 sqlite 操作的奇怪行为