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