Closed Bestlis closed 6 years ago
Я так понимаю версия библиотек у вас зашита в файле generate_gradle_prebuild.exe. Или нет?
Здравствуйте @Bestlis ,
Нет, версии библиотек задаются в Assets/UTNotifications/Editor/Android/UTNotificationsDependencies.cs:
Google.VersionHandler.InvokeInstanceMethod(svcSupport, "DependOn", new object[] { "com.google.android.gms", "play-services-gcm", "LATEST" }, namedArgs: new Dictionary<string, object>()
{
{ "packageIds", new string[] { "extra-google-m2repository" } }
});
Google.VersionHandler.InvokeInstanceMethod(svcSupport, "DependOn", new object[] { "com.android.support", "support-v4", GetAndroidSupportPluginVersion() }, namedArgs: new Dictionary<string, object>()
{
{ "packageIds", new string[] { "extra-android-m2repository" } }
});
Как можно видеть, версии запрашиваются как "LATEST" (GetAndroidSupportPluginVersion пытается определить версию библиотеки такую же как Facebook SDK, если она установлена в проекте, в противном случае выставляет также LATEST). Попробуйте обновить соответствующие библиотеки в Android SDK, а затем выполнить резолюцию зависимостей: Assets -> Play Services Resolver -> Android Resolver -> Resolve Client Jars. Можете также попробовать прописать конкретные версии библиотек, которые вас интересуют.
Надеюсь, это поможет. Если нет - сообщите, будем разбираться что пошло не так.
С наилучшими пожеланиями, Юрий, Universal Tools team
SDK обновлены до последней версии. Но все равно закачивает 11.0.4.
Когда я устанавливаю Play Servie Resolver который идет с плагином AdMob, то загружается версия 11.6.0. Но в этом случае идет превышение лимита 65536.
И еще: Play Service Resolver который идет с вашим плагином не закачивает никаких библиотек для AdMob. Пришлось вручную перетягивать из другого проекта необходимые либы.
@Bestlis ,
Вы можете использовать любую версию Play Services Resolver, чем новее тем лучше (лучше совместимость с более новыми Android SDK). Конфигурация (какие библиотеки и каких версий вытягивать) задается отдельно от самоый Play Services Resolver, например для UTNotifications это уже упомянутый UTNotificationsDependencies.cs. Вы можете использовать новейшую версию Play Services Resolver.
Ограничение в 65536 методов - это отдельная проблема. Решение от представителей Unity смотрите тут: https://forum.unity.com/threads/too-many-method-references-max-is-65536.327064/page-3#post-3180106
Еще такой вопрос. Пытаюсь использовать Prebuild with gradle. В резульате во время выполнения получаю такую ошибку
Command completed: Failed to run '/usr/bin/python "Temp/PlayServicesResolverGradlePrebuild/generate_gradle_prebuild.py" -c "Temp/config.json" -b "Temp/GenGradle" -o "Assets/Plugins/Android/MergedDependencies"' stdout:
stderr:
Traceback (most recent call last):
File "Temp/PlayServicesResolverGradlePrebuild/generate_gradle_prebuild.py", line 476, in
exit code: 1
А на винде такую:
Command completed: Failed to run '"Temp\PlayServicesResolverGradlePrebuild\generate_gradle_prebuild.exe" -c "Temp\config.json" -b "Temp\GenGradle" -o "Assets/Plugins/Android\MergedDependencies"' stdout:
stderr:
Traceback (most recent call last):
File "
exit code: -1
Prebuild with gradle работает нормально у меня (по крайней мере в той версии Play Services Resolver, что поставляется с UTNotifications 1.6.3). Эта опция необязательна, отключена по-умолчанию в Play Services Resolver, и вы вполне можете ее отключить.
Да, только тот, который идет с вашим плагином закачивает старую версию 11.0.4.
Здравствуйте @Bestlis ,
У меня тоже не получилось заставить Prebuild with Gradle работать в последней PlayServicesResolver, но с другой ошибкой:
* What went wrong:
A problem occurred evaluating root project 'GenGradle'.
> Failed to apply plugin [id 'com.android.application']
> Malformed \uxxxx encoding.
Google обозначили данную фичу как "Experimental", и неспроста. Могу предложить вместо Prebuild with Gradle использовать минификацию в самой Unity: Кроме того, не забудьте включить User Proguard File и в файле правил proguard (по-умолчанию Assets/Plugins/Android/proguard-user.txt) добавить: -keep public class universal.tools.notifications. { ; }
Полагаю, также придется настроить игнор символов любых других библиотек с нативными плагинами, включая AdMob, так как Proguard не может определить зависимости, когда Java код вызывается из C# (ибо это реализовано через reflection).
Советую также связаться с Google насчет AdMob: версия PlayServicesResolver (разработанная Google), которую использует Unity SDK AdMob (разработанная Google) вызывает проблемы с переполнением лимита в 65K символов, и их средство по обходу этого ограничения не работает. К сожалению мы и правда тут ничего особо поделать не можем, все упирается в Google, их бага. Надеюсь решение с включением Proguard в Unity решит вашу проблему.
Плюс я зарепортил багу со своей ошибкой: https://github.com/googlesamples/unity-jar-resolver/issues/92 Ваша ошибка уже зарепорчена (я знаю, что вы в курсе - там ваш комментарий). Попробуем совместно попинать Google.
Да, Google уже ответил, что это их баг. Я когда делаю так, как вы написали, то у меня вырезает все либы Facebook. Получаю ClassNotFoundException.
Когда добавляю в Proguar -keep class com.facebook.* {;} то же самое, класс не найден. Уже все перепробовал.
Скорее всего фейсбучные классы находятся в другом package. Либо реверс-инжинирить их плагины, или спрашивать в саппорте фейсбука. Можете также попробовать гуглить по словам Facebook Unity Proguard keep, наверняка многие используют Facebook SDK и Proguard в Unity.
Искал, и нашел, что нужно в Proguard добавить -keep class com.facebook....
Первый же пункт выдачи в Google дает нам: https://github.com/facebook/facebook-android-sdk/blob/master/facebook/proguard-project.txt (легко можно заметить, что там далеко не только com.facebook.*). Но это обычный Facebook Android SDK. Четвертая ссылка выдачи про Facebook Unity SDK https://github.com/facebook/facebook-sdk-for-unity/blob/master/facebook-android-wrapper/proguard-project.txt, то есть можно дополнительно добавить
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
public *;
}
Для поддержки авторизации через WebView. Если все равно не работает, не стесняйтесь обращаться к ним через тот же GitHub (обе ссылки - официальные фейсбучные). Это их работа.
Доброе время суток!
Просьба обновить PlayServiceResolver, чтобы закачивало библиотеки версии 11.6.0. Обновил AdMob, а он с версией 11.0.4 не всегда хочет работать. Не отображаются статические объявления, только видео.
Или скажите, где указывается версия, я обновлю сам.