ページへ戻る

− Links

 印刷 

AndroidでのAdmobのANEの作成_ANEの作成 のバックアップソース(No.6) :: NJF Wiki

xpwiki:AndroidでのAdmobのANEの作成_ANEの作成 のバックアップソース(No.6)

« Prev[5]  Next »[6]
*依存するライブラリを探す [#l19a4648]

AdmobのANEを制作するのに一番やっかいなのが、依存するライブラリを探して取り込むところです。

以前Eclipseでの開発ではライブラリがプロジェクトとして配布され、一つにまとまっていたため、探す必要はなかったのですが、Android Studioからは複数のライブラリが自動で取り込まれるようになったため、どれが必要で、それがどこにあるかを探さねばなりません。

Admobで使われているライブラリは、これで間違いない、という保証はないのですが、
プロジェクトの中間ファイルや、他の人の制作したANEなどを見る限り以下のもののようです。

-android-support-v4
-play-services-ads-lite
-play-services-ads
-play-services-base
-play-services-basement
-play-services-tasks

あらゆる広告で動くのか、逆に余分に取り込みすぎていないのかは正直わからないのですが、とりあえず、これを取り込むと動きます。

これらのライブラリは、Android SDKの中、support-v4は「sdk/extras/android/m2repository/com/android/support/support-v4」に、他は「sdk/extras/google/m2repository/com/google/android/gms/」
にあります。

サポートライブラリのバージョンについてはAir SDKの対応しているバージョンとあわせる必要があります。詳しくは「[[Android向けANE作成で、サポートライブラリを取り込むときにエラーが出る場合の対処方法]]」を参照のこと。

必要なのはjarファイルなのですが、全てaarファイルになっているので一つずつ解凍して、中からjarファイルを取り出さなければなりません。また、取り出したjarファイルの名前は全てclasses.jarなので名前も変更しなければなりません。

とても面倒なので、私は以下のshellを作って自動化しています。

 BASE_DIR="YOUR_SDK_ROOT/sdk/extras/google/m2repository/com/google/android/gms/"

 DIRS="play-services-ads-lite play-services-ads play-services-base play-services-basement play-services-tasks"

  ANE_WORK_DIR="YOUR_ANE_WORK_DIR"

  JAR_FILES=""
  for d in $DIRS
  do

    AAR_FILE=`ls  $BASE_DIR$d/*/*.aar | sort -r |sed -n -e 1p`

    FILE_NAME=`basename $AAR_FILE`

    cp $AAR_FILE ./

    yes|unzip $FILE_NAME

    RES_DIR_NAME=`echo $FILE_NAME | sed -e 's/.aar/_res/'`


    JAR_FILE_NAME=`echo $FILE_NAME | sed -e 's/.aar/.jar/'`


    if [ -e classes.jar ] ; then
 	mv classes.jar $ANE_WORK_DIR$JAR_FILE_NAME
    fi

    if [ -e res ] ; then
	mv res $RES_DIR_NAME
    fi

    JAR_FILES=$JAR_FILES" "$JAR_FILE_NAME
 done

 echo '---------------------------------------------------'

 for n in $JAR_FILES
 do
    echo '<packagedDependency>'$n'</packagedDependency>'
 done

こんな感じですが、verが10になるとソートの順番が変わってしまい、将来的に意図したように動かなくなるはずなので、その時は書き換える必要があります。android-support-v4は一つだけなので手でやっています。

また、このときbasememtを展開して出てくるresフォルダ内のvalues/values.xmlの中の「google_play_services_version」は後で使うのでメモしておいてください。例えば、ver9.2.1なら

 <integer name="google_play_services_version">9256000</integer>

となっています。

このようにして、以下のjarファイルをすべて用意してください。

-android-support-v4.jar
-play-services-ads-lite-9.2.1.jar
-play-services-ads-9.2.1.jar
-play-services-base-9.2.1.jar
-play-services-basement-9.2.1.jar
-play-services-tasks-9.2.1.jar

バージョン番号部分は適宜読み替えてください。

*extension.xml [#p2c141cc]

extension.xmlは[[こちら:http://njf.jp/cms/modules/xpwiki/?Android%E3%81%A7%E3%81%AEANE%E3%81%AE%E4%BD%9C%E6%88%90%2FANE%E3%81%AE%E4%BD%9C%E6%88%90#h6340912]]とほとんど同じです。

 <?xml version="1.0" encoding="utf-8" standalone="no"?>
 <extension xmlns="http://ns.adobe.com/air/extension/22.0">
    <id>ANEAdmob</id>
    <versionNumber>1.0.0</versionNumber>
    <platforms>
        <platform name="Android-ARM">
            <applicationDeployment>
                <nativeLibrary>classes.jar</nativeLibrary>
                <initializer>jp.njf.aneadmob.ANEAdmobFREExtension</initializer>
            </applicationDeployment>
        </platform>
    </platforms>
 </extension>

*platform-android.xml [#mdea83c4]

今回はandroidのライブラリの取り込み用のxmlファイルが一つ必要です。
内容は以下の通りです。

 <platform xmlns="http://ns.adobe.com/air/extension/22.0">
	<packagedDependencies>
		<packagedDependency>android-support-v4.jar</packagedDependency>
		<packagedDependency>play-services-ads-lite-9.2.1.jar</packagedDependency>
		<packagedDependency>play-services-ads-9.2.1.jar</packagedDependency>
		<packagedDependency>play-services-base-9.2.1.jar</packagedDependency>
		<packagedDependency>play-services-basement-9.2.1.jar</packagedDependency>
		<packagedDependency>play-services-tasks-9.2.1.jar</packagedDependency>
	</packagedDependencies>
 </platform>

ファイル名はなんでも良いのですが、「platform-android.xml」としておきます。
名前空間のバージョン(ここでは「22.0」)はextension.xmlのものと同じでないといけないので注意してください。

通常なら、これに加えてaarの展開で出たリソースファイルも指定するのですが、admobの広告に関しては、使っているリソースが一つだけ、マニフェストファイルで使う「@integer/google_play_services_version」のみです。なので、リソースファイルを取り込まなくても、マニフェストファイルにすでにメモしてもらった「google_play_services_version」の数字(ここの例なら「9256000」)を書き込めば良いだけです。そうすれば、リソースファイルの取り込みは必要ありません。


しかし、全ての広告でリソースを使っていないのか、将来的にも使わないのかは正直分かりません。
気になる方はリソースファイルを自力で取り込んでください。
リソースの取り込みは経験的に問題が生じやすいので、ここでは取り込まない方針でANEを作ります。

ちゃんと取り込みたい、という人はこちらの「[[AndroidでのAdmobのANEの作成/リソースを取り込む]]」を参照のこと。

*フォルダ構成とANEの作成コマンド [#cc5a69d7]

まずフォルダ構成はandroidフォルダの下にjarファイルとswfファイル、swcとxmlファイルはその上の階層に置きます。

&ref(admobAneFolder.jpg,mw:480,mh:360);

このフォルダに移動して、以下のコマンドを実行します。

 adt -package -target ane andAdmob.ane extension.xml -swc aneAdmob.swc -platform Android-ARM  -platformoptions platform-android.xml -C android .

これでANEが作成されるはずです。

----
-[[AndroidでのAdmobのANEの作成]]に戻る
-[[AndroidでのAdmobのANEの作成_swcの作成]]に戻る
-[[AndroidでのAdmobのANEの作成_ANEを実際に使う]]に進む

« Prev[5]  Next »[6]