Неопределенная ошибка Dotfuscator в приложении Xamarin.Android - PullRequest
0 голосов
/ 14 ноября 2018

При запуске Dotfuscator в версии выпуска моего приложения Xamarin.Android, я получаю следующие ошибки: enter image description here

Если я отключаю Dotfuscator, то все работает нормально. Странная часть в том, что она отлично работает в предыдущей версии приложения. В этой новой версии приложения я добавил только несколько Android ContentProvider s и один пакет NuGet. Ничего больше. Есть идеи?


Обновление

Итак, как объясняет Джо Сьюэл, технически проблема не в Dotfuscator, а в Xamarin.Android. Система от Xamarin, генерируя классы Java, заполняет их имена из строк, извлеченных из файлов языка .NET Intermediary Language, без предварительной проверки, могут ли эти строки фактически использоваться в качестве имен классов Java.

В моем случае проблема была вызвана тем, что в моем проекте было два слишком много запутанных классов C #. Dotfuscator переименовывал одного из моих классов в do (после обычного цикла переименования: ab, ac, ad и т. Д.). Очевидно, что do нельзя использовать в качестве имени класса Java, потому что это зарезервированное ключевое слово Java, поэтому позже это вызвало синтаксическую ошибку в инструментах Xamarin. Удаление или использование Dotfuscator игнорировали любые два класса в моем проекте, из-за чего Dotfuscator не достигал имени do в своем цикле, и проблема была устранена. Поэтому до тех пор, пока эта ошибка не будет исправлена ​​в Xamarin.Android, существует такая вещь, как запутывание слишком большого количества классов в вашем проекте.

1 Ответ

0 голосов
/ 15 ноября 2018

Похоже, что Dotfuscator переименовывает тип в do, что безопасно для небиблиотечных проектов .NET Framework, поскольку промежуточный язык .NET не резервирует это слово.Затем «клейкий» код Xamarin.Android создает код Java на основе имен типов обфусцированной сборки .NET, и, поскольку do является зарезервированным словом в Java, это вызывает ошибки компилятора Java.

Чтобы обойтипроблема, вы могли бы использовать пользовательский интерфейс сообщества Dotfuscator, чтобы исключить тип, который переименовывается.Вы можете использовать файл карты переименования (например, DotfuscatorReports\Release\Renaming.xml), чтобы увидеть соответствие между исходными именами исходного кода и запутанными именами, в том числе с помощью встроенного инструмента декодирования .

Я работаю в команде Dotfuscator и отвечаю в этом качестве.Я также подал проблему с Xamarin , ссылаясь на этот вопрос относительно этих ошибок.

...