我成功地将混淆器用于我的 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/