Proguard 损坏可绘制文件

2024-07-04

我对 proguard 有一个奇怪的问题,不知何故它破坏了我的有效可绘制文件。没有proguard的drawable显示可以。 proguard 应该缩小 xml 可绘制对象吗?

可绘制/wide_btn_round_white.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle" >
            <corners android:radius="25dip" />
            <padding android:bottom="10dp"/>
            <padding android:top="10dp"/>
            <solid android:color="@color/colorOrangeGetStarted" />
        </shape>
    </item>
</selector>

变成这样

<?xml version="1.0" encoding="utf-8"?>
<x />

构建.gradle:

release {
        minifyEnabled true
        shrinkResources true
        signingConfig signingConfigs.release
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }

proguard-rules.pro:

-keepattributes *Annotation*
-keepattributes Signature
-keepclassmembers class ** {
    @com.squareup.otto.Subscribe public *;
    @com.squareup.otto.Produce public *;
}
-dontwarn okio.**
-dontwarn retrofit2.Platform$Java8
-assumenosideeffects class android.util.Log {
    public static boolean isLoggable(java.lang.String, int);
    public static int v(...);
    public static int i(...);
    public static int w(...);
    public static int d(...);
    public static int e(...);
}
-keep class com.stripe.** { *; }
-keepclassmembers class com.myapp.services.http.** {
    <fields>;
}
-keepclassmembers class com.myapp.services.ws.** {
    <fields>;
}
-keepclassmembers class * extends java.lang.Enum {
    <fields>;
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

EDIT: 出现此问题的原因是shrinkResources。它混淆了仅在中指定的所有可绘制对象style.xml。 例如,如果我有一个按钮style="@style/MyStyle" and in styles.xml:

<style name="MyStyle">
    <item name="android:background">@drawable/wide_btn_round_white</it‌​em>
</style>.

wide_btn_round_white.xml将会被打破。但如果我直接在按钮上指定背景,一切都会正常。根据维基我可以创建app/src/main/res/values/keep.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@drawable/wide_btn_round_white" /> 

但这东西不行。据我了解,它仅指定不应删除该文件。

任何帮助是极大的赞赏!

最良好的问候,


一般来说,Proguard 不适用于 xml 文件,仅适用于 Java。所以我认为你的构建是如何损坏你的文件的。也许打开一个新项目并将您的源代码和 .git 文件(如果有的话)复制到那里会有所帮助

另一件事可能是Android收缩资源 https://developer.android.com/studio/build/shrink-code.html#shrink-resources,所以尝试将shrinkResources设置为false,看看是否有帮助。如果是这样,请使用工具:保留 https://developer.android.com/studio/build/shrink-code.html#keep-resources让有问题的资源远离收缩机。

<?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" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Proguard 损坏可绘制文件 的相关文章

  • LinearLayout 和 LinearLayoutCompat 有什么区别

    I know LinearLayoutCompat被意识到为我们提供了一些更新的方法 这些方法被添加到较高级别的 Android 到较低级别的 Android 中 我的问题是这个方法 linearLayout setPaddingRelat
  • 当设备安装在 Windows/Mac 上时,在外部存储上创建的文件不会显示

    我有一个简单的应用程序 尝试将一些数据保存到 Android 设备 Nexus 4 上的外部存储 以便稍后在 PC Windows 或 Mac 上检索 写入成功 但当我尝试使用 Mac 上的 Android 文件传输或 Windows 上的
  • 如何完全杀死 Android 线程?

    我有一个服务 它有自己的线程在后台运行 我想终止该服务 包括线程 我像这样创建了线程并运行它 public class DaemonService extends Service private DaemonThread thread cl
  • 管理 Android 应用商店(Google/Amazon/等)的代码/构建?

    我有一个 Android 应用程序 主要是从 Android Market 现在是 Google Play 下载的 我们对源代码进行了一些调整 并提交给亚马逊应用商店 看看它能获得什么样的吸引力 我现在正在寻找一种可持续的方法 从通用代码库
  • Android 上的 DGPS 校正

    我正在开发一个项目 旨在利用 Android 手机和附近站点的 GPS 功能 使用 RTK DGPS 技术来计算更精确的定位 厘米 到目前为止 我还没有看到有人说他们实际上成功地执行了类似的任务 除了 GPSmaster 谁不解释一下如何
  • 如何在完成另一个线程后运行一个线程

    我想运行两个线程r1 and r2 首先启动r1并完成后r1 start r2 仅在完成后r1 这怎么能做到呢 两个线程 一个接着一个 我的答案here https stackoverflow com questions 4592716 m
  • 在 Android studio 中看不到“font”资源类型

    我正在研究新的 Android O 功能 其中一项新功能是现在应用程序可以直接将字体添加到res文件夹 按照安卓文档 https developer android com preview features working with fon
  • Android应用程序启动图标大小[重复]

    这个问题在这里已经有答案了 遵循 Google 的指南 我已将 48x48 和 72x72 启动器图标添加到我的 mdpi 和 hdpi 屏幕项目中 但在某些情况下 图标的大小会被调整 例如 在我的 Acer Iconia A200 平板电
  • 如何在Android 10及更高版本中通过intent MediaStore.ACTION_IMAGE_CAPTURE获取图像URI

    对于版主 我知道已经存在这样的问题 但所有这些方法最终都会通过提供位图data getExtra data 这实际上只是thumbnail 我想要获取 URI 而不是位图 并且我需要获取实际图像的 URI 而不是其缩略图 方法可在2021
  • 在Android中单击按钮后使布局出现动画

    我正在尝试为登录屏幕实现一个简单的动画效果 这是场景 1 默认情况下将显示一些文本和登录按钮 2 单击登录按钮后 将从下到上出现一个新的框架布局 此布局将提示用户输入用户名和密码 我可以制作一个动画 该动画将从一个父级覆盖到另一个父级 在这
  • Android Studio 0.2.7 使用 Gradle 构建异常

    我正在从 Eclipse 迁移到 Android Studio 尽管由于 Android Studio 仍处于 预览 模式 但我正在缓慢且增量地迁移 自从更新到最新版本的 Android Studio 0 2 7 以来 我在默认构建过程中遇
  • Google 登录使用新的 GoogleSignInOptions 获取访问令牌

    我的 Android 应用程序当前使用 GoogleAuthUtil 来登录用户并获取access token它被传递到后端 下面的代码片段显示创建 GoogleApiClient 并使用 GoogleAuthUtil 获取令牌 mGoog
  • 清单合并 - Android studio 0.8.1 升级构建错误:属性“manifestFile”不存在

    我刚刚升级到 Android Studio 0 8 1 并升级了构建工具等 来自 Android Studio 0 6 但后来我得到了这个构建错误 发现任务配置有问题 processDevelopmentDebugResources 文件
  • 读取 NFC 标签时出现奇怪的字符

    我正在尝试使用 Android 读取 NFC 标签 我是一名养蜂人 这是为了在我接近蜂巢时识别它们 我已经在这里搜索过 但阅读标签时仍然遇到问题 我想阅读文本 但是当它阅读时 在所需文本之前有一个类似正方形的字符和显示为 十 的字符 这是我
  • 让 Android 源中的应用程序编译到 system/app 而不是 data/app 中?

    我正在从源代码编译 Android ROM 并且我有几个可以编译的应用程序 但会编译到手机上的数据 应用程序中 它们可以通过手机设置卸载 我希望它们不可能从手机中卸载 并编译到系统 应用程序而不是数据 应用程序中 有什么建议吗 编辑 错别字
  • 以编程方式将项目添加到相对布局

    我一直在到处寻找这个问题的答案 我是 Android 新手 尝试通过 java 而不是 xml 以编程方式将项目添加到相对布局 我创建了一个测试类来尝试一下 但项目不断堆叠而不是正确格式化 我现在只想将一个 TextView 放在另一个下面
  • 如何创建看起来与 ContextMenu 完全相同的对话框?

    有时使用标准活动方法来创建上下文菜单并不方便 因为一个活动中可能有很多地方 但在不同的类中 需要显示上下文菜单 但从任何地方创建对话框都很容易 如何创建看起来与 ContextMenu 完全相同的对话框 我在哪里可以找到标准上下文菜单的布局
  • 从 android 发送数组并使用 Volley 在 PhP 服务器接收

    你好我想发送一个字符串值数组到 PhP 服务器和 PhP 解码并将它们存储在 PhP 变量中 这是我在 android studio 的代码 private void getEventDetailRespond RequestQueue r
  • 在带有效果的 Android 按钮中使用图像

    现在我在 StackOverflow 上遇到了相关问题 但不幸的是没有一个解决方案对我有用 这就是为什么我不得不单独问这个问题 我是 Android 新手 问题 我需要一个充当按钮的图像 现在我明白 这可以通过在标准按钮上使用图像或使用称为
  • Android RecyclerView:拖放多个ViewType

    I implement drag and drop for a RecyclerView it works well when have one View type but reset the RecyclerView when have

随机推荐

  • 从 android 发送数组并使用 Volley 在 PhP 服务器接收

    你好我想发送一个字符串值数组到 PhP 服务器和 PhP 解码并将它们存储在 PhP 变量中 这是我在 android studio 的代码 private void getEventDetailRespond RequestQueue r
  • 如何在 Perl 中捕获鲤鱼的输出?

    我正在编写一个 Perl 模块 并使用 carp 向调用程序抛出一个非致命警告 carp 警告工作正常 我正在检查输入参数是否满足特定条件 如果不满足条件 则使用 carp 发送警告 并且模块继续使用参数的默认值而不是调用程序的参数通过了
  • 获取此 contenteditable 元素中的当前行和行索引?

    我有一个这样的元素 span line 1 line 2 line 3 line 4 line 5 span 假设用户正在编辑 第 4 行 如何获取该 contenteditable 元素中的当前行和行索引 在插入符号位置 这是使用选择属性
  • Python 解释器优化

    假设我有一个字符串x Python 解释器是否足够聪明 能够知道 string replace x x 应转换为NOP 我怎样才能找到这个 是否有任何参考资料显示解释器能够根据句法分析动态执行哪种类型的优化 不 Python 不能对 NOP
  • 无法验证 sol-wallet-adapter 签名的消息

    Having 创建了一条签名消息 https github com project serum sol wallet adapter sign a message我不确定如何使用生成的签名来使用公钥验证消息 我的用例是 我想使用 Solan
  • Moq 中 Verabilible() 的用途是什么?

    目的是什么Verifiable 如果我验证一个Mock并忽略这一点它仍然验证SetUp Edit 我正在使用VerifyAll 这就是一切都被验证的原因 更改为后Verify 只有我的 Verifiable SetUp正在接受检查 附录 正
  • XML 模式 - 子元素依赖于可选属性的存在

    是否可以在 XSD 中定义以下场景 父元素有一个属性 是可选的 如果该属性不是 present in XML at least one child element must exists If the attribute is presen
  • scrollIntoView 滚动得太远

    我有一个页面 其中包含从数据库动态生成的带有 div 的表行的滚动条 每个表格行的作用就像一个链接 有点像您在视频播放器旁边的 YouTube 播放列表中看到的那样 当用户访问该页面时 他们所在的选项应该位于滚动 div 的顶部 此功能正在
  • 组合或扩展接口?

    我有两个接口 type Request interface Version string Method string Params interface Id interface type Responder interface NewSuc
  • 为移动设备设计网页界面

    如何使您的网站在标准浏览器和各种可用的移动设备上看起来都很好 目前 我尚未决定是尝试调整布局大小以使其适用于小型设备 还是为移动设备提供单独的 CSS 我的用例是一个国际象棋游戏 我希望整个棋盘都可用而无需向下滚动 你会推荐什么 基本上没有
  • 在带有效果的 Android 按钮中使用图像

    现在我在 StackOverflow 上遇到了相关问题 但不幸的是没有一个解决方案对我有用 这就是为什么我不得不单独问这个问题 我是 Android 新手 问题 我需要一个充当按钮的图像 现在我明白 这可以通过在标准按钮上使用图像或使用称为
  • 如何从我的 kubernetes 集群中删除/删除 calico cni

    我已经在数字海洋中安装了我的 kubernetes 集群 1master 3worker 问题是我在这个集群中安装了 flannel 和 calico 我想从集群中完全删除 calico 还是可以拥有多个 CNI 使用以下两个命令从节点中删
  • 使用 RaphaelJS 确定图像何时加载到 svg 中

    我正在尝试弄清楚如何确定 svg 图像何时加载到浏览器中 我正在使用 Raphael JS 并且我已经尝试过 var image paper image path 0 0 10 10 image node addEventListener
  • 将 LIVE SPEECH 与 Tkinter GUI 连接

    我想将 pocketsphinx livespeech 与 Python tkinter GUI 连接起来 这样 GUI 在前端可见 而 Livespeech 在后端工作 但是当我将 tkinter 代码与 livespeech 代码合并时
  • 如何使用 xstream 将 Hashmap 映射到 XML 中的键值属性

    我有以下实体 XStreamAlias entity public class MapTestEntity XStreamAsAttribute public Map
  • Rails 5 编写类似查询的最佳控制器操作

    我想通过客户名称进行 ajax 搜索查询 因此我使用了 like 子句 看到这个问题 https stackoverflow com questions 26094430 safe activerecord like query 我正在考虑
  • Firefox 通知是如何实现的?

    我想在 Firefox 扩展中实现一个通知机制 相当于 Firefox 的 保存密码 选项或弹出阻止警告 并在主窗口上方滑动黄色条 现在有人知道如何在 XUL 中实现这一点吗 谢谢你的帮助 你会想要使用通知框元素 https develop
  • 如何将数组传递给 bash 函数

    如何将数组传递给函数 为什么这不起作用 其他问题的解决方案对我不起作用 根据记录 我不需要复制数组 所以我不介意传递引用 我想做的就是循环它 ar a b c function test echo 1 echo ar a b c test
  • 如何让机器人加入语音频道discord.py

    我正在使用 Discord py 创建音乐机器人 但我在将该机器人连接到语音通道时遇到问题 我使用 Cog 将音乐功能与其他功能分开 commands command async def join voice self ctx channe
  • Proguard 损坏可绘制文件

    我对 proguard 有一个奇怪的问题 不知何故它破坏了我的有效可绘制文件 没有proguard的drawable显示可以 proguard 应该缩小 xml 可绘制对象吗 可绘制 wide btn round white xml