すごい個人的なメモです。整理してないので意味わかんないかも。すみません。
でも困ってる人には有効な情報かもしれないので、公開します。
前にAIRのAndroid用のANEを作った際に試行錯誤してつくりました。
普通のANEならわりとできるのだけど、外部のjarを埋め込んだり、Rを使うのをどうやるのかわからず。
検索するも、確かな情報が少なくビルドするだけで2日かかったなんてとても言えません、、。うわー。
これ使ってDropboxのSyncAPIをAndroidのネイティブUIを表示して操作+ASと連携するANEを作りました。
(仕事で作ったので公開できませんです、、)
(いろいろあって、ANE部分でネイティブUIを使ったのだけど、iOSもあわせると Android+iOS+AIRの3重開発!になるので、ネイティブUI使うのはあまりおすすめできないかも、、。でもAIRの上に表示させたり連携させるのは可能です。)
Androidのネイティブプロジェクト(Eclipse = Android Developer Toolsでの作業)
Project > Properties > 左側のAndroid > 画面の is Library のチェックをONにして
Androidライブラリプロジェクトにする
その際にライブラリのパッケージ名はaneのパッケージ名と同じにする必要がある
(Rを利用するため)
AndroidManifest.xmlの上の方の
<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
package=”ここにANEのパッケージ名をきちんとつける必要がある”
android:versionCode=”1″
android:versionName=”1.0″ >
↓
例)
<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
package=”com.myane.packagename”
android:versionCode=”1″
android:versionName=”1.0″ >
うまくいくとRを利用するときの各classでのimport文が以下のようになる
import com.myane.packagename.R;
書き出してjarにするときは、ファイルエクスプローラーのプロジェクトを選択。
右クリックしてExport
ダイアログが出るので、いったん全部のチェックをはずす。そのあとsrcのみチェックをいれて書き出す。
それ以外のmanifestとかresとかlibsとかはここで書き出しても意味ないです。(manifestはいらないし)
resとlibsはビルドのandroid用フォルダにそのままコピーします。あと必要な外部jarもそのandroid用フォルダにコピーします。
Rについて
AIR4.0からRが利用しやすくなっている
利用するためには、android用のplatform.xmlをビルド時につける必要がある。
(ビルド時のadtコマンドの引数にextension.xmlにも加えて追加指定する)
platform.xml内で、packagedResourceに自分のaneのパッケージ名をつけて
リソースのresフォルダを指定しておく。
ビルド時にはandroid用のフォルダに、Javaのプロジェクトからresフォルダをコピーしておく。
android用のplatform.xmlの例
<platform xmlns="http://ns.adobe.com/air/extension/4.0"> <packagedDependencies> <packagedDependency>android-support-v4.jar</packagedDependency> <packagedDependency>dropbox-sync-sdk-android.jar</packagedDependency> </packagedDependencies> <packagedResources> <packagedResource> <packageName>com.kumade.ane.dropboxaneandroid</packageName> <folderName>res</folderName> </packagedResource> </packagedResources> </platform>
参考URL
http://help.adobe.com/en_US/air/extensions/WSf268776665d7970d-2e74ffb4130044f3619-7ff8.html#WSA61FD03D-6F46-4ff9-A77A-9D47C47501F3
soフォルダはビルドするAndroid用フォルダの中のlibsフォルダの中にarmeabi-v7aフォルダをつくってその中にいれておく
http://help.adobe.com/en_US/air/extensions/WSf268776665d7970d-2482335412ffea65006-8000.html
その他フォルダもいらないかもしれないがlibsフォルダにいれておいた
各Rのリソースidは一意になるように、アプリ名_xxx とか名前が長くなってもやっとく方がよし。
あと、他言語対応も、Rのstringsでできた。
ビルド
resフォルダはビルド時にシェルスクリプト(build.sh <- 自作したものなので、気にしないでください)でコピーされているか確認 adtコマンドの例
各行末の\(バックスラッシュ)は改行したいのでつけています。これを削除して1行の長いコマンドにしても動きます。${変数名}はシェルスクリプト内の別のところで定義されてます。
adt -package \ -target ane ${ANEName} extension.xml \ -swc ${ASLibSwcName} \ -platform Android-ARM \ -platformoptions android_options.xml \ -C android . \ -platform iPhone-ARM \ -platformoptions ios_options.xml \ iosLib/Dropbox.framework \ -C ${iOSDir} . \ -platform default \ -C default .
Flash Builderでテストする際
プロジェクト設定で、ANEのチェックをはずす -> OKボタン(設定ダイアログ閉じる)
もう一度プロジェクト設定を開いて、ANEのチェックをつけなおす(なぜかそうしないとキャッシュが残ることがある)
R内のidについて
ResのR.layout.なんとかはidがネイティブと一致しているか確認した方がよい
//JavaでのANEの関数
FREContext arg0
int layoutId = arg0.getResourceId(“layout.activity_main”);
と
//Androidネイティブ
R.layout.activity_main
が一致すればOK
Andoridネイティブはこういうのもある
getResources().getIdentifier(“sample_action_menu”, “id”, getPackageName());
これはswitch文でR.layout.activity_mainを使うとcaseでコンパイルエラーになってしまったので、そのときの対策用。
■ 自作iPhoneアプリ 好評発売中!
・フォルメモ - シンプルなフォルダつきメモ帳
・ジッピー電卓 - 消費税や割引もサクサク計算!
■ LINEスタンプ作りました!
毎日使える。とぼけたウサギ