« 2010年4月 | トップページ | 2010年7月 »

2010年5月の2件の記事

2010.05.27

Android NDK r4

r3 では、build/host-setup.sh して、make APP=appname とやってたのが、
r4 では、アプリの Application.xml がある場所で ndk-build を実行する、
に変わってたので、メモ。

■android-ndk-r4-windows.zip を解凍して適当なところに置く
以下、C:\android-ndk に置いた場合

■path を設定する
ndk-build コマンド(解凍した直下にある)を使うようになったので、
そこに path を通しておく
[Win]+[R] → sysdm.cpl (Win7 以外は system.cpl か?)→ [詳細設定]タブ
→ [環境変数]ボタン→ ユーザかシステムかどちらかの PATH の最後に
C:\android-ndk を追加
(cygwin 上で .bashrc に
export PATH=$PATH:/cygdrive/c/android-ndk
を追加でもいいかな?)

■cygwin を起動して、アプリの Application.xml があるところで、

ndk-build

でコンパイルできる。
Application.xml があるディレクトリ以下に jni ディレクトリがあって、jni/Android.mk が
あることが前提。(r3 と同じ) 
あとは、

ndk-build –B

で、強制的にリビルド。

ndk-build V=1

で、詳細表示しながらビルド。
r3 と同じように、ndk のトップディレクトリでビルドするなら

ndk-build –C <project-path>

でできる。

| | コメント (1) | トラックバック (0)

2010.05.23

AdMob の設定方法

Android アプリへの登録方法が前から少し変わっていたので、メモ。

アカウントの取得方法などは、他のサイトに書かれてるので、適当にぐぐってください。

以下、Android アプリに広告を入れる方法。

AdMob に login してimage の、imageをクリック

■アプリ選択画面になるので、image をクリック

■App name: に適当に入れる(後で変更できる)

■Android Package URL: は、http://market.android.com/search?q=pname:<package name> とする。<package name> に自分のアプリのパッケージネームを入れる。
拙作の CPUMonitorMini の場合は、http://market.android.com/search?q=pname:ms.salt.cpumonitormini。(後で変更できる)

■Category: App description: は適当に。(後で変更できる)

■最後に、image を押すと、SDK のダウンロード画面に行く。
けど、既にダウンロードしてあれば必要無し。
アプリ名に依ってバイナリが変わる訳ではない。

imageに戻ると、リストに追加されているので、image をクリック

■アプリ名の下に、Publisher ID: が表示されているので、コピー
(以下、”abcdefghijklmno” と仮定する)

■アプリの AndroidManifest.xml の <application> </application> の直下に

<meta-data android:value="abcdefghijklmno" android:name="ADMOB_PUBLISHER_ID"/>

を追加。

■同じく、<manifest> </manifest> の直下に

<uses-permission android:name="android.permission.INTERNET" />

を追加。

■アプリのディレクトリに libs ディレクトリを作り、AdMob SDK に入っている admob-sdk-android.jar をコピー

■eclipse の Package Explorer で、アプリを右クリックして、[Refresh]

■同じく、eclipse の Package Explorer で、アプリを右クリックして、[Properties] → [Java Build Path] → [Libraries] タブ → [Add jars..] ボタン→先程コピーした admob-sdk-android.jar を選択→[OK] ボタンで閉じる

■res/values/attrx.xml を作る
アプリの res/values で右クリック→[New]→[Ohter..]→[Android XML File]→Fileに attrs.xml と入れて[Finish]→中身をヘルプ通りに

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="com.admob.android.ads.AdView">
<attr name="backgroundColor" format="color" />
<attr name="primaryTextColor" format="color" />
<attr name="secondaryTextColor" format="color" />
<attr name="keywords" format="string" />
<attr name="refreshInterval" format="integer" />
</declare-styleable>
</resources>

とする

■広告を入れたいレイアウトリソース(res/layout/foo.xml)の中のレイアウト(LinearLayout とか RelativeLayout とか)のタグの attribute に

xmlns:app=”http://schemas.android.com/apk/res/<package name>”

を追加し(<package name> はアプリのものに置き換える)、
要素として、

<com.admob.android.ads.AdView
android:id="@+id/ad"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
app:backgroundColor="#000000"
app:primaryTextColor="#FFFFFF"
app:secondaryTextColor="#CCCCCC"
/>

を追加する。
タグの attribute で指定した xmlns: の後の app と、要素の attribute の app を合わせればいいので、myapp とかにして説明しているところもあるけど適当でOK。

■個人的には、xml の inflation が微妙に遅いので使いたくない。。。
そういう場合は、java のコードで、

AdView adView = new AdView(this);
adView.setVisibility(android.view.View.VISIBLE);
adView.requestFreshAd();
adView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

mLinearLayout.addView(adView); // LinearLayout に追加

という感じで、LayoutView に add すれば OK。

xml での layout はすごくすごく便利なのだけど、inflation が遅いので気を付けましょう。
xml ファイルは、apk にした時点で binary に変換されてるけど、java の object になっている訳ではなく、inflateする時に java の object を生成しています。(と思っています。)
なので、直接 java のコードでガリガリ書いたものに比べると、数倍~十数倍ぐらいの時間がかかります。
(実際にベンチマークテストしたのは animation 用の xml だけですけどね。たいして複雑でもないのに、15倍ぐらいの時間がかかってました。)

まぁ、自前で xml を parse することを考えてみると、時間がかかるのは自明ですよね~

■あと、注意点は、横幅が 320 dot ないと、広告が全く表示されない、ということです。
レイアウト(LinearLayout や RelativeLayout)の attribute が、android:layout_width="wrap_content" だったりすると、中の要素で width が 320 dot になるものが無い限り広告は表示されないみたいです。
popup させた AlertDialog の中に入れようとしましたが、popup した時点で 300 dot ぐらいになるため、広告が全く表示されませんでした。その場合でも、landscape 表示にすれば、AlertDialog の中でも表示されたので、横幅に影響していると思われます。

| | コメント (4) | トラックバック (0)

« 2010年4月 | トップページ | 2010年7月 »