Pet*_*rdk 13 java android proguard embedded-resource
我成功地将proguard用于我的Android应用程序.
但是,有一个应用程序我遇到了麻烦.
此应用程序使用一个java库,该库具有.xml存储在包中的文件.
InputStream istream = Library.class.getResourceAsStream("resource.xml");
Run Code Online (Sandbox Code Playgroud)
禁用proguard时,此库非常有用.但是,运行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/*
Run Code Online (Sandbox Code Playgroud)
有关如何强制保留此xml文件的任何想法?
首先,事实证明使用ant和我的build.xml脚本根本不处理.xml资源文件.您需要手动将复制操作添加到build.xml,以便将资源文件复制到输出目录.
仍然,解决了这个问题后,proguard搞砸了我的工作.解决方案是:
-keeppackagenames the.package.where.the.file.is.kept
Run Code Online (Sandbox Code Playgroud)
这确保可以通过调用Library.class.getResource.找到.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" />
Run Code Online (Sandbox Code Playgroud)
在tools:keep中,列出要保留的布局。如果在代码中使用反射来获取可绘制对象,甚至可以保留特定的可绘制对象
tools:keep="@drawable/ico_android_home_infosperso"
Run Code Online (Sandbox Code Playgroud)
我更喜欢添加,tools:shrinkMode="strict"这样我就不会浪费任何资源,除非不能肯定地使用它。您可能需要查看此链接缩小您的代码。不要忘记将以下行添加到您的proguard规则中:
-keepattributes InnerClasses
-keep class **.R
-keep class **.R$* {
<fields>;
}
| 归档时间: |
|
| 查看次数: |
11471 次 |
| 最近记录: |