依存するライブラリを探す
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
あらゆる広告で動くのか、逆に余分に取り込みすぎていないのかは正直わからないのですが、とりあえず、これを取り込むと動きます。
サポートライブラリのバージョンについてはAir SDKの対応しているバージョンとあわせる必要があります。詳しくは「Android向けANE作成で、サポートライブラリを取り込むときにエラーが出る場合の対処方法」を参照のこと。
アップデートにより、ローカルにaarファイルが自動でダウンロードされなくなり、以下の方法は使えなくなりました。Android/Google Play Servicesなどのaarファイルをダウンロードするを参考にしてGoogleのサイトからダウンロードしてください。
-----ここから-----
これらのライブラリは、Android SDKの中、support-v4は「sdk/extras/android/m2repository/com/android/support/support-v4」に、他は「sdk/extras/google/m2repository/com/google/android/gms/」 にあります。
必要なのは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/1*/*.aar | sort -nr |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代から検索して最新の物を検索しています。ver 20が出たら、修正の必要があります。
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
extension.xmlはこちらとほとんど同じです。
<?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
今回は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」)を書き込めば良いだけです。そうすれば、リソースファイルの取り込みは必要ありません。
しかし、全ての広告でリソースを使っていないのか、将来的にも使わないのかは正直分かりません。 気になるのでちゃんと取り込みたい、という人はこちらの「AndroidでのAdmobのANEの作成/リソースを取り込む」を参照してください。
リソースの取り込みは経験的に問題が生じやすいので、ここでは取り込まない方針でANEを作ります。
ぺージ情報 | |
---|---|
ぺージ名 : | AndroidでのAdmobのANEの作成_ANEの作成 |
ページ別名 : | 未設定 |
ページ作成 : | njf |
閲覧可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |
編集可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |