【问题标题】:Why proguard processes AndroidManifest.xml为什么 proguard 处理 AndroidManifest.xml
【发布时间】:2013-10-11 09:43:41
【问题描述】:

我看到一些无法解释的 Proguard 行为。

AFAIK proguard 不关注 android manifest。此外,在我的 proguard.cfg 中,我没有提到 BroadcastReceiver 相关的类。所以我认为应该去掉那些。

但是我在 bin/proguard.txt 中看到了一些奇怪的东西:

# view AndroidManifest.xml #generated:784
-keep class com.fiksu.asotracking.InstallTracking { <init>(...); }

并且该类(BroadcastReceiver 的后代)不会被剥离。理性对我没有任何意义:

[proguard] com.fiksu.asotracking.InstallTracking
[proguard]   is kept by a directive in the configuration.

如果清单中没有提到类,它会被剥离。

很高兴知道为什么。

【问题讨论】:

  • 你检查过&lt;path-to-your-sdk&gt;/tools/proguard/proguard-android.txt。这通常包含阻止 Proguard 完全破坏您的应用程序的声明。
  • 是的,据我了解,它不包含任何与 BroadcastReceivers 或清单相关的内容,或者我的解释有误。
  • sdk 定义通常包含如下内容:-keep public class * extends android.content.BroadcastReceiver,可防止接收器被破坏。

标签: java android optimization broadcastreceiver proguard


【解决方案1】:

构建过程运行工具aapt自动创建配置文件bin/proguard.txt,基于AndroidManifest.xml和其他xml文件。然后构建过程将配置文件传递给 ProGuard。所以ProGuard本身确实不考虑AndroidManifest.xml,但是aapt+ProGuard会考虑。

【讨论】:

  • 谢谢,埃里克!这是否也意味着我们不再需要手动为广播接收器、服务等添加“保留”指令了?
  • @Stipa 没错。 SDK 中的默认配置应提供所有通用设置,aapt 应创建所有应用程序特定配置(应用程序特定反射除外)。
猜你喜欢
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多