universal-tools / UTNotificationsFeedback

7 stars 0 forks source link

Обновить PlayServiceResolver #68

Closed Bestlis closed 6 years ago

Bestlis commented 6 years ago

Доброе время суток!

Просьба обновить PlayServiceResolver, чтобы закачивало библиотеки версии 11.6.0. Обновил AdMob, а он с версией 11.0.4 не всегда хочет работать. Не отображаются статические объявления, только видео.

Или скажите, где указывается версия, я обновлю сам.

Bestlis commented 6 years ago

Я так понимаю версия библиотек у вас зашита в файле generate_gradle_prebuild.exe. Или нет?

yuriy-universal-ivanov commented 6 years ago

Здравствуйте @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

Bestlis commented 6 years ago

SDK обновлены до последней версии. Но все равно закачивает 11.0.4.

Bestlis commented 6 years ago

Когда я устанавливаю Play Servie Resolver который идет с плагином AdMob, то загружается версия 11.6.0. Но в этом случае идет превышение лимита 65536.

Bestlis commented 6 years ago

И еще: Play Service Resolver который идет с вашим плагином не закачивает никаких библиотек для AdMob. Пришлось вручную перетягивать из другого проекта необходимые либы.

yuriy-universal-ivanov commented 6 years ago

@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

Bestlis commented 6 years ago

Еще такой вопрос. Пытаюсь использовать 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 sys.exit(main()) File "Temp/PlayServicesResolverGradlePrebuild/generate_gradle_prebuild.py", line 468, in main generate_gradle_build(build_path, jsobj) File "Temp/PlayServicesResolverGradlePrebuild/generate_gradle_prebuild.py", line 215, in generate_gradle_build ignore=shutil.ignore_patterns("*.meta")) File "Temp/PlayServicesResolverGradlePrebuild/generate_gradle_prebuild.py", line 76, in merge_dir_tree paths = os.listdir(src) OSError: [Errno 2] No such file or directory: 'https://maven.google.com'

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 "", line 475, in File "", line 467, in main File "", line 214, in generate_gradle_build File "", line 75, in merge_dir_tree WindowsError: [Error 123] Синтаксическая ошибка в имени файла,: u'https://maven.google.com\.' generate_gradle_prebuild returned -1

exit code: -1

yuriy-universal-ivanov commented 6 years ago

Prebuild with gradle работает нормально у меня (по крайней мере в той версии Play Services Resolver, что поставляется с UTNotifications 1.6.3). Эта опция необязательна, отключена по-умолчанию в Play Services Resolver, и вы вполне можете ее отключить.

Bestlis commented 6 years ago

Да, только тот, который идет с вашим плагином закачивает старую версию 11.0.4.

yuriy-universal-ivanov commented 6 years ago

Здравствуйте @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: image Кроме того, не забудьте включить 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 решит вашу проблему.

yuriy-universal-ivanov commented 6 years ago

Плюс я зарепортил багу со своей ошибкой: https://github.com/googlesamples/unity-jar-resolver/issues/92 Ваша ошибка уже зарепорчена (я знаю, что вы в курсе - там ваш комментарий). Попробуем совместно попинать Google.

Bestlis commented 6 years ago

Да, Google уже ответил, что это их баг. Я когда делаю так, как вы написали, то у меня вырезает все либы Facebook. Получаю ClassNotFoundException.

Когда добавляю в Proguar -keep class com.facebook.* {;} то же самое, класс не найден. Уже все перепробовал.

yuriy-universal-ivanov commented 6 years ago

Скорее всего фейсбучные классы находятся в другом package. Либо реверс-инжинирить их плагины, или спрашивать в саппорте фейсбука. Можете также попробовать гуглить по словам Facebook Unity Proguard keep, наверняка многие используют Facebook SDK и Proguard в Unity.

Bestlis commented 6 years ago

Искал, и нашел, что нужно в Proguard добавить -keep class com.facebook....

yuriy-universal-ivanov commented 6 years ago

Первый же пункт выдачи в 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 (обе ссылки - официальные фейсбучные). Это их работа.

yuriy-universal-ivanov commented 6 years ago

Done in 1.7: https://assetstore.unity.com/packages/tools/integration/utnotifications-professional-local-push-notification-plugin-37767