在你的 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 應用程式。