Androidのアプリ開発関連のブログ

layout.xmlでAdMob

制作中のテキストエディターも概ね完成してきたんで、AdMobつけてみたのだが、
前にブログエディターにAdMobをつけた際は、layout.xmlで設置するのがうまく行かなかったんだが、できた。
ググってもEclipseでのやり方ばかり出てきて、コマンドライン開発でのやり方が出てこないんだよね・・・

手元の開発環境では、
/opt/android-sdk/extras/google/google_play_services/libproject/google-play-services_lib
にAdMobのライブラリが存在するが、まず開発用のディレクトリにまるごとコピーする。

コピー先のディレクトリに対して、プロジェクトのアップデートを行う。
android update project -t 5 -p lib/google-play-services_lib
こんな感じで、-pオプションでコピー先のディレクトリを指定して、-tオプションでターゲットAPIレベルを変更する。
元のプロジェクトが「target=android-9」になってるんで、ターゲットAPIレベルを変更しないとダメぽい。

AndroidManifest.xmlの変更
<manifest>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <application>
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
    <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:theme="@android:style/Theme.Translucent"/>
  </application>
</manifest>
変更箇所のみでこんな感じ。

layout.xmlの編集
<LinearLayout
  xmlns:ads="http://schemas.android.com/apk/res-auto"
>
  <com.google.android.gms.ads.AdView
    android:id="@+id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    ads:adSize="SMART_BANNER"
    ads:adUnitId="AdMobのID"
  />
</LinearLayout>
ルート要素(ルートじゃなくても良いのかな?)でxmlnsを追加して、AdViewを設置。
LinearLayoutでコンテンツと並べて下にAdMobを設置しているが、AdMobは十分な領域サイズがないと表示されないので、
LinearLayoutで縦に並べる場合はLinearLayoutの子要素全てがandroid:layout_height="wrap_content"でないと表示されないので注意。

MainActivity.javaの編集
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
public void onCreate(Bundle savedInstanceState){
  AdView mAdView=(AdView)findViewById(R.id.adView);
  mAdView.loadAd(new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build());
}
変更箇所のみでこんな感じ。
ブログエディターの時はonCreate以外にonDestroyとかにも処理を書いたんだが、どうもonCreateだけでいいみたい。

これで表示された。