在你的 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,如下面的打印屏幕所示:
这可以在构建应用程序时启用 ProGuard。
默认情况下,Xamarin.Android 为 ProGuard 设置了自己的配置,可以在文件 obj/Debug/proguard
,proguard_project_references.cfg
和 proguard_xamarin.cfg
中的 obj/Debug/proguard
或 obj/Release/proguard
文件夹中找到。这三个文件组合为 ProGuard 的配置,它们在构建时由 Xamarin 自动创建。
如果开发人员希望进一步自定义 ProGuard 选项,他/她可以在项目的根目录中创建一个名为 proguard.cfg
的文件(其他名称也有效,只要扩展名为 .cfg)并将其 Build Action 设置为 ProguardConfiguration,如下图:
在文件中,可以插入自定义 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 应用程序。