为什么Proguard要处理AndroidManifest.xml文件?

9
我看到一些无法解释的Proguard行为。
据我所知,Proguard不会注意Android清单文件。同样,在我的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.

如果在清单文件中没有提到类名,它将被剥离。 很好知道原因。

你有没有检查过<path-to-your-sdk>/tools/proguard/proguard-android.txt这个文件?通常里面包含了一些声明,可以防止Proguard完全破坏你的应用程序。 - Jens
是的,据我理解它不包含任何与BroadcastReceivers或清单相关的内容,或者我理解有误。 - lstipakov
sdk的定义通常包含类似以下内容:-keep public class * extends android.content.BroadcastReceiver,该内容可以防止广播接收器被混淆。 - Jens
1个回答

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

谢谢,Eric!这是否意味着我们不再需要为广播接收器、服务等手动添加“keep”指令了? - lstipakov
@Stipa 没错。SDK内部的默认配置应该提供所有通用设置,而aapt应该创建所有应用程序特定的配置(除了应用程序特定的反射)。 - Eric Lafortune

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接