Unity Firebase Storage Mscorlib Stripping
Я использовал Firebase для Unity и знаю, что он все еще экспериментальный.
При сборке APK и уровне вскрытия Mscorlib выдается логическая ошибка, которая не позволяет выгрузить / выгрузить в хранилище
Вот ошибка
NotSupportedException: ..... etc.
System.Net.WebRequest.GetCreator (System.String prefix) [0x00000]in <filename unknown>:0
I/Unity (16919): at System.Net.WebRequest.Create (System.Uri requestUri) [0x00000] in <filename unknown>:0
I/Unity (16919): at Firebase.UnityHttpRequest+<SendUnityRequest>c__Iterator0.MoveNext () [0x00000] in <filename unknown>:0
Но когда установлено значение Disabled, это нормально. Но мне нужно это, чтобы уменьшить размер файла. Я использовал linker.xml для сохранения "System.Net.HttpRequestCreator", но я считаю, что это работает только для iOS?
Мой вопрос: действительно ли необходимо установить уровень очистки, чтобы отключить хранилище Firebase для работы в Unity?
1 ответ
Вы должны использовать IL2CPP с iOS, которая всегда включает разбор уровня байтов. На самом деле нет способа отключить разбор байтов с помощью IL2CPP. См. https://docs.unity3d.com/Manual/iphone-playerSizeOptimization.html. Разбор уровня байтов должен работать с Firebase Storage.
Если вы по какой-то причине не используете IL2CPP, то для прямого ответа на свой вопрос вы не можете использовать micro-mscorlib с Firebase Storage, поскольку для Firebase Storage требуются некоторые функции.Net. Вы должны быть в состоянии использовать другие параметры (на уровне байтов или модулей).
При использовании разграничения на уровне байтов (с IL2CPP или без него) вам не нужно указывать файл link.xml, так как единицы должны иметь возможность определять использование каждого класса.
--EDIT-- В нашем следующем выпуске у нас есть исправление для удаления байтов и байтов на уровне сборки. Если вы хотите попробовать обходной путь, есть несколько дополнительных записей link.xml, которые необходимы, чтобы не дать единству удалить лишние классы. Эти записи приведены ниже и будут автоматически добавлены в наш следующий выпуск SDK.
<assembly fullname="mscorlib">
<namespace fullname="Mono.Security.Cryptography" preserve="all"/>
<namespace fullname="System.Security" preserve="all"/>
<namespace fullname="System.Security.Cryptography" preserve="all" />
<namespace fullname="System.Security.Cryptography.X509Certificates" preserve="all" />
</assembly>
<assembly fullname="Mono.Security">
<namespace fullname="Mono.Security.Protocol.Tls" preserve="all"/>
<namespace fullname="Mono.Security.X509" preserve="all"/>
</assembly>
<assembly fullname="System">
<namespace fullname="System" preserve="all"/>
<namespace fullname="System.ComponentModel" preserve="all"/>
<namespace fullname="System.ComponentModel.EnumConverter" preserve="all"/>
<namespace fullname="System.Configuration" preserve="all"/>
<namespace fullname="System.Net" preserve="all"/>
<namespace fullname="System.Net.Configuration" preserve="all"/>
<namespace fullname="System.Net.NetworkInformation" preserve="all"/>
<namespace fullname="System.Net.Sockets" preserve="all"/>
<namespace fullname="System.Net.Security" preserve="all"/>
<namespace fullname="System.Runtime.ConstrainedExecution" preserve="all"/>
<namespace fullname="System.Runtime.InteropServices" preserve="all"/>
<namespace fullname="System.Runtime.Serialization" preserve="all"/>
<namespace fullname="System.Security.Cryptography" preserve="all" />
<namespace fullname="System.Security.Cryptography.X509Certificates" preserve="all" />
</assembly>
<assembly fullname="System.Core">
<namespace fullname="System.Security.Cryptography" preserve="all" />
</assembly>
<assembly fullname="System.Configuration">
<namespace fullname="System.Configuration" preserve="all" />
</assembly>