2013-11-01 3 views
19

As MH. указав в this question, больше не нужно включать GoogleAdMobAdsSdk-x.x.x.jar в свой проект Android, если они включают службы Google Play (см. migration guide). Тем не менее, я хочу, и у меня проблемы.Используйте как Службы Службы, так и SDK AdMob

Проблема: проект google-play-services_lib включает определение для com.google.ads.AdRequest, которое устарело и имеет частный конструктор. Он попадает в путь класса перед банком AdMob (в записи «Частные библиотеки Android»), поэтому, когда я пытаюсь использовать его в своем коде, он пытается использовать устаревший, что приводит к ошибке: The constructor AdRequest() is not visible. Я не вижу возможности переупорядочивать записи внутри «Частных библиотек Android».

Почему я хочу использовать оба варианта, вы спрашиваете? У меня есть один проект библиотеки со многими полезными классами, включая некоторые классы полезности для работы как с Play Services, так и с AdMob. Некоторые из моих приложений, которые используют этот проект библиотеки, используют служебные классы AdMob, но не Службы Службы.

+0

Вы можете не использовать альтернативный конструктор, который доступен в обеих библиотеках? В противном случае разделите его на 2 библиотеки или удалите только материал Admob и внесите его прямо в свои приложения (я не могу себе представить, что на самом деле существует очень распространенный код, так как код Admob настолько прост). – William

+0

Насколько я могу судить, единственная цель нового, устаревшего класса в библиотеке Служб Службы - вызвать ошибку, которую я получил. Класс, который должен использоваться в библиотеке служб, находится в другом пакете. Мне кажется странным, что они намеренно нарушили бы совместимость двух своих продуктов.Мое единственное предположение, что они будут поэтапно отказываться от автономной банки AdMob. Я бы хотел найти обходное решение, по крайней мере, на данный момент. –

ответ

18

Я тестировал это, и некоторые изменения необходимы для того, чтобы это работало через Службы Google Play.

На первом месте вы должны удалить все импортные ссылки на старые com.google.ads.*, так как они теперь находятся на com.google.android.gms.ads.*.

Как уже упоминалось, некоторые изменения должны быть сделаны:

Вы не можете создать экземпляр AdRequest так, как раньше, чтобы быть сделано, но с использованием AdRequest.Builder следующим образом:

AdRequest adRequest = new AdRequest.Builder().build(); 

Кроме того, сделать убедитесь, что вы заменили имя пакета на всех макетах, поэтому они вызывают <com.google.android.gms.ads.AdView вместо <com.google.ads.AdView.

думаю есть. Удачи!

+6

Благодарим вас за указатели, но это инструкции по использованию нового пакета Служебных услуг. Я спрашиваю, как использовать старый .jar в проекте, который также включает Службы Службы. –

+0

Не используйте старую банку. Используйте GPS и используйте новый класс com.google.android.gms.ads.AdRequest. Если у вас есть проект, который не обязательно должен включать другие части GPS, попробуйте воспользоваться этими API, используя Proguard. – William

+0

@ Виллиам Действительно; «вы не можете», кажется, отвечать на мой вопрос, из всего, что я вижу. В ответ на другую часть вашего комментария Proguard, похоже, не очень хорошо справляется с работой библиотеки сервисов. В одном проекте я использую его только для AdMob, и я все еще получаю несколько классов из .games, .maps, .plus и .wallet в конечном продукте. Но теперь я полагаюсь на касательную. –

6

Подробного Google Play Services мигранты AdMob доступны здесь: https://developers.google.com/mobile-ads-sdk/docs/admob/play-migration

+4

Я не ищу помощь, чтобы использовать новые классы AdMob. Вы можете даже заметить, что я включил эту же ссылку в свой первоначальный вопрос. Я хочу использовать отдельный .jar в проекте, который также использует Службы Google Play. На данный момент я отказался, полагая, что это невозможно. –

+0

@EricSimonon Вы когда-нибудь находили решение своего первоначального вопроса? Я также столкнулся с тем же вопросом ... –

+1

@IgorGanapolsky Нет, не знаю. «Решение»: не делайте этого. Используйте либо Службу Службы, либо -jar. Вы не можете использовать оба. (За исключением, возможно, того, как указывает саги, в качестве временного решения, если это необходимо.) –

10

Вы можете использовать Google Play Services v12 который не включает перекрывающиеся пространства имен. Его можно загрузить с помощью Android SDK Manager в разделе «Дополнительно» -> «Службы Google Play для Froyo». Эта версия будет сосуществовать с автономным SDK AdMob.

Со временем Google, вероятно, осудит оба.

Update: Google объявил deprecation of the stand alone AdMob SDK, вы должны перейти в Google Play SDK:

On August 1, 2014, Google Play will stop accepting new or updated apps that use the old standalone Google Mobile Ads SDK v6.4.1 or lower. You must upgrade to the Google Play version of the Mobile Ads SDK by then.

+1

Это интересно (и ожидалось). У меня есть приложение, которое я разворачиваю в Google Play и других магазинах для этих устройств без доступа к Google Play. Устаревшая старая ASK заставляет меня в Google Play, потому что я больше не могу показывать рекламу за пределами Google Play. Хороший трюк, Google. – Michael

+0

@ Майкл: Фактически, службы Google Play прекрасно работают за пределами магазина Google Play. Единственное, что, если плеер не имеет GPS, он не получит автоматические обновления в библиотеку, если вы не нажмете новую версию. –

+0

@Michael_A: Но распространен ли распространенный GPS APK? – Michael

Смежные вопросы