2013-11-01 4 views
19

als MH. in this question hingewiesen, muss GoogleAdMobAdsSdk-x.x.x.jar in ihrem Android-Projekt nicht mehr enthalten, wenn sie Google Play Services enthalten (siehe migration guide). Wie auch immer, ich möchte und habe Probleme.Verwenden Sie beide Play Services und AdMob SDK

Das Problem: Das Projekt google-play-services_lib enthält eine Definition für com.google.ads.AdRequest, die veraltet ist und einen privaten Konstruktor hat. Es endet im Klassenpfad vor dem AdMob-Jar (innerhalb des Eintrags "Android Private Libraries"). Wenn ich versuche, es in meinem Code zu verwenden, versucht es daher, den veralteten Code zu verwenden, was zu folgendem Fehler führt: The constructor AdRequest() is not visible. Ich sehe keine Möglichkeit, die Einträge in "Android Private Libraries" neu zu ordnen.

Warum möchte ich beide verwenden, fragen Sie? Ich habe ein einzelnes Bibliotheksprojekt mit vielen nützlichen Klassen, einschließlich einiger Hilfsklassen für die Bereitstellung von Play Services und AdMob. Einige meiner Apps, die dieses Bibliotheksprojekt verwenden, verwenden die AdMob-Hilfsklassen, jedoch keine Play Services.

+0

Können Sie nicht einen anderen Konstruktor verwenden, die in beiden Bibliotheken vorhanden ist? Ansonsten teile es in 2 Bibliotheken oder entferne das Admob nur Zeug und implementiere es direkt in deinen Apps (ich kann mir nicht vorstellen, dass es wirklich viel gemeinsamen Code gibt, da der Admob-Code so einfach ist). – William

+0

Soweit ich feststellen kann, ist der einzige Zweck der neuen, veralteten Klasse in der Play Services-Bibliothek, den Fehler zu verursachen, den ich erhalten habe. Die Klasse, die in der Services-Bibliothek verwendet werden soll, befindet sich in einem anderen Paket. Es erscheint mir seltsam, dass sie absichtlich die Kompatibilität zwischen zwei ihrer Produkte brechen würden.Meine einzige Vermutung ist, dass sie das eigenständige AdMob-Glas auslaufen lassen werden. Ich würde jedoch gerne einen Workaround finden, zumindest für den Moment. –

Antwort

18

Ich habe dies getestet und einige Änderungen sind erforderlich, damit dies über die Google Play-Dienste funktioniert.

An erster Stelle sollten Sie alle Importe entfernen, die auf alte com.google.ads.* verweisen, da sie sich jetzt auf com.google.android.gms.ads.* befinden.

Wie Sie erwähnt haben, müssen einige weitere Änderungen vorgenommen werden:

Sie können kein AdRequest die Art und Weise instanziiert es verwendet getan werden, aber eine AdRequest.Builder wie folgt verwendet:

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

Auch machen sicher, dass Sie den Namen des Pakets in allen Layouts ersetzen, so dass sie <com.google.android.gms.ads.AdView anstelle von <com.google.ads.AdView aufrufen.

Ich denke, das ist alles. Viel Glück!

+6

Vielen Dank für die Hinweise, aber dies sind Anweisungen zur Verwendung des neuen Play Services-Pakets. Ich frage, wie ich die alte .jar-Datei in einem Projekt verwenden kann, das auch Play Services enthält. –

+0

Verwenden Sie nicht das alte Glas. Verwenden Sie GPS und verwenden Sie die neue com.google.android.gms.ads.AdRequest-Klasse. Wenn Sie ein Projekt haben, das die anderen Teile von GPS nicht enthalten muss, dann trennen Sie diese APIs mit Proguard. – William

+0

@William Tatsächlich; "Du kannst nicht" scheint die Antwort auf meine Frage zu sein, von allem, was ich sehen kann. Als Reaktion auf den anderen Teil Ihres Kommentars scheint Proguard keinen sehr guten Job zu machen, die Services-Bibliothek zu strippen. In einem Projekt verwende ich es nur für AdMob, und ich bekomme immer noch eine Reihe von Klassen von .games, .maps, .plus und .wallet im fertigen Produkt. Aber jetzt bin ich auf einer Tangente, nehme ich an. –

6

Detaillierte Google Play-Dienste Migration für AdMob hier verfügbar: https://developers.google.com/mobile-ads-sdk/docs/admob/play-migration

+4

Ich suche keine Hilfe bei der Migration, um die neuen AdMob-Klassen zu verwenden. Vielleicht bemerken Sie sogar, dass ich diesen Link in meine ursprüngliche Frage eingefügt habe. Ich möchte die separate .jar-Datei in einem Projekt verwenden, das auch Google Play-Dienste verwendet. An dieser Stelle habe ich grundsätzlich aufgegeben, vorausgesetzt, es ist nicht möglich. –

+0

@EricSimonton Haben Sie jemals eine Lösung für Ihre ursprüngliche Frage gefunden? Ich habe auch das gleiche Problem ... –

+1

@IgorGanapolsky Nein, habe ich nicht. Die "Lösung" ist: Tu es nicht. Verwenden Sie entweder den Play-Dienst oder die .jar-Datei. Sie können nicht beide verwenden. (Außer vielleicht als sagis weist darauf hin, als eine temporäre Lösung, wenn nötig.) –

10

Sie können mit Google-Services v12 Spielen die überlappenden Namespaces nicht enthält. Er kann mit dem SDK-Manager des Android unter "Extras" -> "Google Play Services für Froyo" heruntergeladen werden. Diese Version wird zusammen mit dem eigenständigen AdMob-SDK bereitgestellt.

Mit der Zeit wird Google wahrscheinlich beides ablehnen.

Update: Google hat die deprecation of the stand alone AdMob SDK angekündigt, müssen Sie bei Google bewegen SDK Spielen:

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

Das ist interessant (und erwartet). Ich habe eine App, die ich sowohl in Google Play als auch in anderen Shops für solche Geräte ohne Zugriff auf Google Play bereitstellen kann. Die Vernachlässigung des alten ASK zwingt mich zu Google Play, weil ich außerhalb von Google Play keine Anzeigen mehr schalten kann. Netter Trick, Google. – Michael

+0

@Michael: Eigentlich funktionieren die Google Play-Dienste außerhalb des Google Play Stores einwandfrei. Die einzige Sache ist, dass wenn das Player-Gerät kein GPS hat, es die automatischen Updates der Bibliothek nicht erhalten wird, es sei denn, Sie drücken eine neue Version. –

+0

@Michael_A: Aber ist das GPS APK weiterverteilbar? – Michael