Как использовать инструмент оптимизатора proguard с формами xamarin - PullRequest
0 голосов
/ 30 сентября 2019

Я хочу уменьшить размер файла .apk, поэтому я проверяю опцию Включить ProGuard в окне свойств проекта Android, но получаю ошибку времени компиляции

Ошибка «java.exe» с кодом 1.

Я пробовал несколько вещей, таких как

  • Размер головы уже 1G.
  • Целевая версия Android - 9.0 (пирог).
  • Конфигурация My Solutions в режиме выпуска.
  • Использование последнего файла ProGuard (6.1.1)
  • Добавлены proguard-android.txt, proguard-android-optimize.txt и proguard-project.txt в новом файле ProGuard.

Журнал:

1>------ Rebuild All started: Project: ProductStatus, Configuration: Release Any CPU ------
1>ProductStatus -> D:\New\SmartPad\Research\ProductStatus\ProductStatus\ProductStatus\bin\Release\netstandard2.0\ProductStatus.dll
2>------ Rebuild All started: Project: ProductStatus.Android, Configuration: Release Any CPU ------
2>  ProductStatus.Android -> D:\New\SmartPad\Research\ProductStatus\ProductStatus\ProductStatus.Android\bin\Release\ProductStatus.Android.dll
2>  No way to resolve conflict between "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" and "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e". Choosing "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" arbitrarily.
2>PROGUARD : warning : md5606e28f7ad4f2edd4892d456667ca4fb.EmdkWrapper: can't find superclass or interface com.symbol.emdk.EMDKManager$EMDKListener
2>PROGUARD : warning : mono.com.symbol.emdk.EMDKManager_EMDKListenerImplementor: can't find superclass or interface com.symbol.emdk.EMDKManager$EMDKListener
2>PROGUARD : warning : mono.com.symbol.emdk.EMDKManager_StatusListenerImplementor: can't find superclass or interface com.symbol.emdk.EMDKManager$StatusListener
2>PROGUARD : warning : mono.com.symbol.emdk.ProfileManager_DataListenerImplementor: can't find superclass or interface com.symbol.emdk.ProfileManager$DataListener
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.BarcodeManager_ScannerConnectionListenerImplementor: can't find superclass or interface com.symbol.emdk.barcode.BarcodeManager$ScannerConnectionListener
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.Scanner_DataListenerImplementor: can't find superclass or interface com.symbol.emdk.barcode.Scanner$DataListener
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.Scanner_StatusListenerImplementor: can't find superclass or interface com.symbol.emdk.barcode.Scanner$StatusListener
2>PROGUARD : warning : mono.com.symbol.emdk.scanandpair.ScanAndPairManager_StatusListenerImplementor: can't find superclass or interface com.symbol.emdk.scanandpair.ScanAndPairManager$StatusListener
2>PROGUARD : warning : mono.com.symbol.emdk.simulscan.SimulScanReader_DataListenerImplementor: can't find superclass or interface com.symbol.emdk.simulscan.SimulScanReader$DataListerner
2>PROGUARD : warning : mono.com.symbol.emdk.simulscan.SimulScanReader_StatusListenerImplementor: can't find superclass or interface com.symbol.emdk.simulscan.SimulScanReader$StatusListerner
2>PROGUARD : warning : md5606e28f7ad4f2edd4892d456667ca4fb.EmdkWrapper: can't find referenced class com.symbol.emdk.EMDKManager$EMDKListener
2>PROGUARD : warning : md5606e28f7ad4f2edd4892d456667ca4fb.EmdkWrapper: can't find referenced class com.symbol.emdk.EMDKManager
2>PROGUARD : warning : md5606e28f7ad4f2edd4892d456667ca4fb.EmdkWrapper: can't find referenced class com.symbol.emdk.EMDKManager
2>PROGUARD : warning : md5606e28f7ad4f2edd4892d456667ca4fb.EmdkWrapper: can't find referenced class com.symbol.emdk.EMDKManager
2>PROGUARD : warning : mono.com.symbol.emdk.EMDKManager_EMDKListenerImplementor: can't find referenced class com.symbol.emdk.EMDKManager$EMDKListener
2>PROGUARD : warning : mono.com.symbol.emdk.EMDKManager_EMDKListenerImplementor: can't find referenced class com.symbol.emdk.EMDKManager
2>PROGUARD : warning : mono.com.symbol.emdk.EMDKManager_EMDKListenerImplementor: can't find referenced class com.symbol.emdk.EMDKManager
2>PROGUARD : warning : mono.com.symbol.emdk.EMDKManager_EMDKListenerImplementor: can't find referenced class com.symbol.emdk.EMDKManager
2>PROGUARD : warning : mono.com.symbol.emdk.EMDKManager_StatusListenerImplementor: can't find referenced class com.symbol.emdk.EMDKManager$StatusListener
2>PROGUARD : warning : mono.com.symbol.emdk.EMDKManager_StatusListenerImplementor: can't find referenced class com.symbol.emdk.EMDKManager$StatusData
2>PROGUARD : warning : mono.com.symbol.emdk.EMDKManager_StatusListenerImplementor: can't find referenced class com.symbol.emdk.EMDKManager
2>PROGUARD : warning : mono.com.symbol.emdk.EMDKManager_StatusListenerImplementor: can't find referenced class com.symbol.emdk.EMDKManager$StatusData
2>PROGUARD : warning : mono.com.symbol.emdk.EMDKManager_StatusListenerImplementor: can't find referenced class com.symbol.emdk.EMDKBase
2>PROGUARD : warning : mono.com.symbol.emdk.EMDKManager_StatusListenerImplementor: can't find referenced class com.symbol.emdk.EMDKManager$StatusData
2>PROGUARD : warning : mono.com.symbol.emdk.EMDKManager_StatusListenerImplementor: can't find referenced class com.symbol.emdk.EMDKBase
2>PROGUARD : warning : mono.com.symbol.emdk.ProfileManager_DataListenerImplementor: can't find referenced class com.symbol.emdk.ProfileManager$DataListener
2>PROGUARD : warning : mono.com.symbol.emdk.ProfileManager_DataListenerImplementor: can't find referenced class com.symbol.emdk.ProfileManager$ResultData
2>PROGUARD : warning : mono.com.symbol.emdk.ProfileManager_DataListenerImplementor: can't find referenced class com.symbol.emdk.ProfileManager
2>PROGUARD : warning : mono.com.symbol.emdk.ProfileManager_DataListenerImplementor: can't find referenced class com.symbol.emdk.ProfileManager$ResultData
2>PROGUARD : warning : mono.com.symbol.emdk.ProfileManager_DataListenerImplementor: can't find referenced class com.symbol.emdk.ProfileManager$ResultData
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.BarcodeManager_ScannerConnectionListenerImplementor: can't find referenced class com.symbol.emdk.barcode.BarcodeManager$ScannerConnectionListener
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.BarcodeManager_ScannerConnectionListenerImplementor: can't find referenced class com.symbol.emdk.barcode.BarcodeManager$ConnectionState
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.BarcodeManager_ScannerConnectionListenerImplementor: can't find referenced class com.symbol.emdk.barcode.BarcodeManager
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.BarcodeManager_ScannerConnectionListenerImplementor: can't find referenced class com.symbol.emdk.barcode.ScannerInfo
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.BarcodeManager_ScannerConnectionListenerImplementor: can't find referenced class com.symbol.emdk.barcode.BarcodeManager$ConnectionState
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.BarcodeManager_ScannerConnectionListenerImplementor: can't find referenced class com.symbol.emdk.barcode.ScannerInfo
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.BarcodeManager_ScannerConnectionListenerImplementor: can't find referenced class com.symbol.emdk.barcode.BarcodeManager$ConnectionState
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.Scanner_DataListenerImplementor: can't find referenced class com.symbol.emdk.barcode.Scanner$DataListener
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.Scanner_DataListenerImplementor: can't find referenced class com.symbol.emdk.barcode.Scanner
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.Scanner_DataListenerImplementor: can't find referenced class com.symbol.emdk.barcode.ScanDataCollection
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.Scanner_DataListenerImplementor: can't find referenced class com.symbol.emdk.barcode.ScanDataCollection
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.Scanner_StatusListenerImplementor: can't find referenced class com.symbol.emdk.barcode.Scanner$StatusListener
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.Scanner_StatusListenerImplementor: can't find referenced class com.symbol.emdk.barcode.Scanner
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.Scanner_StatusListenerImplementor: can't find referenced class com.symbol.emdk.barcode.StatusData
2>PROGUARD : warning : mono.com.symbol.emdk.barcode.Scanner_StatusListenerImplementor: can't find referenced class com.symbol.emdk.barcode.StatusData
2>PROGUARD : warning : mono.com.symbol.emdk.scanandpair.ScanAndPairManager_StatusListenerImplementor: can't find referenced class com.symbol.emdk.scanandpair.ScanAndPairManager$StatusListener
2>PROGUARD : warning : mono.com.symbol.emdk.scanandpair.ScanAndPairManager_StatusListenerImplementor: can't find referenced class com.symbol.emdk.scanandpair.ScanAndPairManager
2>PROGUARD : warning : mono.com.symbol.emdk.scanandpair.ScanAndPairManager_StatusListenerImplementor: can't find referenced class com.symbol.emdk.scanandpair.StatusData
2>PROGUARD : warning : mono.com.symbol.emdk.scanandpair.ScanAndPairManager_StatusListenerImplementor: can't find referenced class com.symbol.emdk.scanandpair.StatusData
2>PROGUARD : warning : mono.com.symbol.emdk.simulscan.SimulScanReader_DataListenerImplementor: can't find referenced class com.symbol.emdk.simulscan.SimulScanReader$DataListerner
2>PROGUARD : warning : mono.com.symbol.emdk.simulscan.SimulScanReader_DataListenerImplementor: can't find referenced class com.symbol.emdk.simulscan.SimulScanReader
2>PROGUARD : warning : mono.com.symbol.emdk.simulscan.SimulScanReader_DataListenerImplementor: can't find referenced class com.symbol.emdk.simulscan.SimulScanData
2>PROGUARD : warning : mono.com.symbol.emdk.simulscan.SimulScanReader_DataListenerImplementor: can't find referenced class com.symbol.emdk.simulscan.SimulScanData
2>PROGUARD : warning : mono.com.symbol.emdk.simulscan.SimulScanReader_StatusListenerImplementor: can't find referenced class com.symbol.emdk.simulscan.SimulScanReader$StatusListerner
2>PROGUARD : warning : mono.com.symbol.emdk.simulscan.SimulScanReader_StatusListenerImplementor: can't find referenced class com.symbol.emdk.simulscan.SimulScanReader
2>PROGUARD : warning : mono.com.symbol.emdk.simulscan.SimulScanReader_StatusListenerImplementor: can't find referenced class com.symbol.emdk.simulscan.SimulScanStatusData
2>PROGUARD : warning : mono.com.symbol.emdk.simulscan.SimulScanReader_StatusListenerImplementor: can't find referenced class com.symbol.emdk.simulscan.SimulScanStatusData
2>PROGUARD : warning : there were 57 unresolved references to classes or interfaces.
2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2550,3): error MSB6006: "java.exe" exited with code 1.
========== Rebuild All: 1 succeeded, 1 failed, 0 skipped ==========

Как я могу исправить эту проблему? Я хочу исправить выше error не только предупреждения.

Proguard

Ответы [ 3 ]

0 голосов
/ 15 октября 2019

Попробуйте установить параметр связывания в свойствах проекта Android на «Нет», чтобы проверить, работает ли он.

0 голосов
/ 16 октября 2019

Выполните следующие шаги

  • Сначала вам нужно добавить proguard.cfg на уровень вашего проекта Android.
  • Измените действие сборки файла proguard.cfg на ProguardConfiguration
  • Измените кодировку файла proguard.cfg с помощью Notepad ++ на UTF-8

Если вы получаете предупреждения, вам нужно использовать атрибут -dontwarn, как показано ниже

-dontwarn com.symbol.emdk.**
-dontwarn org.apache.http.**
-dontwarn com.appdynamics.eumagent.runtime.**

Вам необходимоудалить / решить предупреждение, потому что это приводит к ошибке выше. Приведенный выше код удалит все ваши предупреждения.
Если после выполнения приложения вы получаете исключение, вам необходимо использовать атрибут -keep. как ниже для обязательных классов

-keep public class android.support.v7.widget.** { *; }
0 голосов
/ 09 октября 2019

Следуя совету по этой ссылке , я исправил проблему, обновив свой proguard вручную.

Решение:

ProGuard живет в пределахAndroid SDK, но, похоже, нет механизма для обновления этого инструмента из Android SDK Manager. Для тех, кто сталкивается с той же проблемой, выполните следующие действия, чтобы решить эту проблему: -

  1. Загрузите zip-файл ProGuard, доступный по адресу: https://sourceforge.net/projects/proguard/files/. На момент написания последней версииProGuard был 6.2.0.

  2. ProGuard не имеет программы установки, поэтому вам нужно будет разархивировать файл и скопировать структуру папки proguard в папку, указанную в шагах ниже.

  3. Запустите SDK Manager и запишите путь в левом верхнем углу под опциями меню. В моем случае это был C: \ Users \ steve \ AppData \ Local \ Android \ android-sdk. Папка proguard находится в папке инструментов этого пути (в моем случае это был C: \ Users \ steve \ AppData \ Local \ Android \ android-sdk \ tools \ proguard).

  4. Закройте все среды разработки, которые могут обращаться к SDK, и переименуйте папку proguard в proguard.old.

  5. Скопируйте папку proguard новой версии в папку tools и переименуйте ее впри необходимости, proguard (в моем случае скопированная папка была переименована из proguard6.0.2).

  6. Наконец, скопируйте файлы конфигурации из папки proguard.old в новую папку. В моем случае это были: -

proguard-android.txt, proguard-android-optimize.txt и proguard-project.txt.

Очистите и восстановите свой проект с включенным ProGuard.
...