Como especificar adUnitId programaticamente para a AdMob?

Estou tentando definir adUnitId programaticamente para anúncios dos novos serviços do Google Play (antiga AdMob).

Eu tenho isso em XML (usado em um<include>):

<com.google.android.gms.ads.AdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/adView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ads:adSize="BANNER"/>

e isso em onCreate ():

AdView mAdview = (AdView)findViewById(R.id.adView);
    mAdview.setAdUnitId(((App)getApplication()).getAdmobKey());

    mAdview.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            super.onAdLoaded();
            findViewById(R.id.adView).setVisibility(View.VISIBLE);
        }
    });

    AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
            .build();
    mAdview.loadAd(adRequest);

E eu recebo:

O tamanho do anúncio e o ID do bloco de anúncios devem ser definidos antes que o loadAd seja chamado.

Portanto, a segunda opção era criar o anúncio programaticamente.

O novo XML:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:id="@+id/adView"
    />

O novo código:

AdView mAdview = new AdView(this);
...
((LinearLayout)findViewById(R.id.adView)).addView(mAdview);
mAdview.loadAd(adRequest);

Mas eu recebo o mesmo erro.

Tentei também herdar de com.google.android.gms.ads.AdView para criar uma exibição personalizada, mas é final.

Alguma sugestão?

questionAnswers(1)

yourAnswerToTheQuestion