在你的 Xamarin.Android APK 中启用 ProGuard

ProGuard 是一个用于构建过程的工具,用于优化和混淆 APK 的 Java 代码,还可以删除未使用的类。使用 ProGuard 时生成的 APK 将具有较小的尺寸,并且难以进行逆向工程(反编译)。

ProGuard 也可以在 Xamarin.Android 应用程序中使用,也会减少 APK 文件大小并混淆 Java 代码。但请注意,ProGuard 混淆仅适用于 Java 代码。要混淆 .NET 代码,开发人员应使用 Dotfuscator 或类似工具。

如何在 Xamarin.Android 应用程序中使用 ProGuard

首先,要在你的 Xamarin.Android 应用程序中启用 ProGuard,请转到你的项目属性 - > Android 选项 - >打包 - >启用 ProGuard,如下面的打印屏幕所示:

StackOverflow 文档

这可以在构建应用程序时启用 ProGuard。

默认情况下,Xamarin.Android 为 ProGuard 设置了自己的配置,可以在文件 obj/Debug/proguardproguard_project_references.cfgproguard_xamarin.cfg 中的 obj/Debug/proguardobj/Release/proguard 文件夹中找到。这三个文件组合为 ProGuard 的配置,它们在构建时由 Xamarin 自动创建。

如果开发人员希望进一步自定义 ProGuard 选项,他/她可以在项目的根目录中创建一个名为 proguard.cfg 的文件(其他名称也有效,只要扩展名为 .cfg)并将其 Build Action 设置为 ProguardConfiguration,如下图:

StackOverflow 文档

在文件中,可以插入自定义 ProGuard 选项,例如 -dontwarn-keep class

重要

截至目前(2017 年 4 月),通常下载的 Android SDK 具有旧版本的 ProGuard,在使用 Java 1.8 构建应用程序时可能会导致错误。构建时,错误列表显示以下消息:

Error
Can't read [C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v7.0\mono.android.jar] 
(Can't process class [android/app/ActivityTracker.class]  (Unsupported class version number [52.0] (maximum 51.0, Java 1.7))) [CREATEMULTIDEXMAINDEXCLASSLIST]

来源于此。

要解决此问题,你必须下载最新版本的 ProGuard( 此处 )并将 .zip 文件的内容复制到 android-sdk\tools\proguard\。这将更新 ProGuard 并且构建过程应该没有问题。

之后,你应该能够使用 ProGuard 成功构建 Xamarin.Android 应用程序。