Androidアプリ開発、今日のエラーまとめ(1)ー(6)分、2013年9月22日〜11月7日

Contents

Androidアプリ開発、今日のエラーまとめ(1)ー(6)分、2013年9月22日〜11月7日までのエラー記事

過去記事のまとめになります。
一箇所にまとめてみました。

【1】Androidアプリ開発、今日のエラー,AndroidManifest.xml、AndroidActivity.xmlの設定忘れ、Admob広告を表示させる,error、 エミュレータ 動かない,エミュレータを起動してもアプリが実行されない

http://enjoygoodtown.com/blog/4736.html

(1)ワーニング AndroidManifest.xml

Description Resource Path Location Type
Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the android.os.Build.VERSION_CODES javadoc for details. AndroidManifest.xml

android:targetSdkVersion=”18″
しました。

(2)android エミュレータ 動かない,エミュレータを起動してもアプリが実行されない

EclipseからAndroidエミュレータを起動してもアプリが実行されない
この記事を参考にしてようやくハローワールドが表示されました。

(3)intent 画面遷移で移動できない、AndroidActivity.xmlの設定忘れ

AndroidActivity.xmlに

(4)adView = new AdView(this, AdSize.BANNER, “ID-XXX”);でエラー

Could not find class ‘com.google.ads.AdView’, referenced from method com.AAA.bentannote2.MainActivity.onCreate

Admobのライブラリの挿入方法が教科書のヘルプであるグーグルの説明と異なり、変わったようです。

正しくは、
libs/GoogleAdMobAdsSdk-XXX.jarとなるように、GoogleAdMobAdsSdk-XXX.jarをコピーします。
私は手動で、コピペしました。
もし、すでに、教科書通りにGoogleAdMobAdsSdk-XXX.jarを挿入していたら、挿入済みを一旦削除してください。
すでに登録されているGoogleAdMobAdsSdk-XXX.jarがあるとエラーになります。

AdMobの使い方
Could not find class ‘com.google.ads.AdView’

(5)配列が初期化されていない

宣言だけして、初期化を忘れていました。
 myArray=new ArrayList();
宣言をしたら、どこにでもいいのでまず、初期化を書くように習慣づけたいと思います。

【1−2】アイフォンアプリをアンドロイドアプリに移植、コード比較、変換方法

http://enjoygoodtown.com/blog/4736.html
x-code,android アイフォンアプリを作ったのでアンドロイドアプリを作ってみよう

まずは簡単なアプリからはじめます。

アイフォンアプリのx-codeと比較しながらメモをとっていきます。
いずれ、アンドロイドアプリの作り方をすぐに忘れてしまいます。忘れても良いように書いておきます。

<アイフォンアプリをアンドロイドに移植開発>

アイフォンアプリは、スマートボードを利用してViewを作成すると便利です。アンドロイドは、1アプリで画面展開を一覧表示する機能はないので、1View1画面毎に表示して、作業をします。
レイアウトXMLがView画面に相当し、JAVAクラスからでもオブジェクトを作成できます。

 説明文中で、アイフォンアプリ、iOS, XCODE, objective-Cと書いた場合は、アイフォンアプリについての説明を記載したものです。アンドロイドアプリ、eclipse, JAVAと書いた場合は、アンドロイドアプリについての説明を記載したものです。
 開発環境、開発言語と細かく区別せず大きな枠で説明しています。解釈上意味不明なところがあると思います。

1.ログ出力

アイフォンアプリ,XCODEのログ出力
NSLog(@”DB is OK”);
DB is OK
と出力されます。

アンドロイド, JAVAのログ出力

画像

Log.d(“DB”, “OK”);
最初の引数はタグで、ログキャットのタグの列に表示されます。そして、第2引数はテキストの列に表示されます。
DB OK
として、列に別れて出力されます。こちらの方が見やすいかもしれません。

2.ボタンアクションコードの記載方法

XCODEの場合は、IBActionのメソッドに記載します。

JAVAの場合は、いくつかあります。
また、以下のコードは、少し、コードが長くなります。他にも、レイアウトxmlのボタンに記載してメソッドのように整理できる記載もあります。今回は書籍でよく見かけるコードにしました。

Button button;
button=(Button)findViewById(R.id.button1);
button.setOnClickListener(new View.ClickListerner(){
	public void onClick(View v){
	 //here
	}
});
        Button backButton;
	backButton=(Button)findViewById(R.id.backButton);
	backButton.setOnClickListener(new OnClickListener() {
			
	@Override
	public void onClick(View v) {
	// TODO Auto-generated method stub
				
	}
	});

と、メソッドの引数の中に、メソッドがあるように記載します。

3.データベース

アイフォンでは、PCで事前に作成したSQLite3のファイルをそのまま利用して読み込みます。
書き込みは、CoreDataが利用できます。なお、CoreDataのエンティティ(テーブルみたいなもの)が増えた場合は、インストールしたアプリを削除しないとアプリが起動しない場合があります。

アンドロイド
データベースSQLite3のファイルを参照のみの利用でも、assetフォルダに保管し、使用するときにSQLite3ファイル自体を一旦コピーしてから利用します。
そして、assetフォルダに配置するファイルは1MB以下にする必要があるとのこと。大きすぎるファイルは要注意です。分割するか圧縮する必要があるようです。

参考サイト
[Android Programming] sqliteのDBファイルをPCでつくってandroidで使う – ipreachableの日記

既存のDBをAndroidで使えるようにする方法 – hentekoのdev日記

SQLiteからの結果をListViewに表示する

既存のsqliteファイルをAndroidに組み込む : ナカノ製作所開発備忘録

Y.A.M の 雑記帳: Android あらかじめ作成した SQLite database をアプリに取り込む

4.オブジェクト、ボタン、ラベル、テキストエディット

 XCODEでは、ボタン等をViewに配置し、ヘッダーファイルにドラッグし紐付けします。プログラムで使用しないオブジェクトは紐付けの必要はありません。
 
 JAVAでは、レイアウトのXMLで配置し、クラスに宣言、命令を記載します。
なお、異なるクラスでも同じレイアウトXMLを利用できます。

5.レイアウトVIewの他クラスの利用

アイフォン
オブジェクトを自由に好きなように配置できます。

アンドロイド
レイアウトのXMLに別のレイアウトXMLのオブジェクトを利用できる
レイアウトの自由度は低い。まるでウェブブラウザーで表示するhtmlファイルです。
ただし、様々な画像サイズのタブレットに対応できる柔軟性を持っていますが、デザイン性が低くなるかもしれません。

6.クラスをまたがって変数を共有する

XCODEでは、デリゲートを使用します。

JAVAでは、Applicationを継承したクラスを作ります。
Activityにまたがってグローバルに変数などのオブジェクトを共有するには

7.画像、音声ファイル

アイフォン
プロジェクトのどの場所でもよいですが、フォルダをプロジェクトに作ってわかりやすく配置します。
例えば、pic/back, number, buttonなど。

アンドロイド

resフォルダに保存し、音声ファイルはres/rawに保存します。
wav,mp3,oggなどが利用できます。

8.エミュレータ

アイフォン
アイフォン、iPadのエミュレータが起動します。
レティナ対応のiPadは大きすぎるので、縮小して表示します。特に難しい設定はありません。

アンドロイド
どのターゲットのエミュレータを起動するのか設定し実行します。
もし、エミュレータが実行しても、アプリが起動しない場合は、、、、、を選択します。
ここが一番わかりにくかったです。

9.文字列の取得

アンドロイド
strings.xmlの文字列を取得したいとき
getString(R.string.year) yearはH25年度として登録

10 レイアウトに配置されたTextViewに、文字配列を与えてListViewに表示する

アイフォン
テーブルビューを使用します。

アンドロイド
(1)は、レイアウトxmllistview_row.xmlに配置されたtextView1、textView2に、マップのquestion, answerの文字列をそれぞれ与えます。
そして、このコードにはありませんが、listview.xmlのListViewに表示させるものです。
(2)は、マップなしの単純なArrayListを、listview_row.xmlに配置されたtextView1に配置させるものです。

(1)SimpleAdapter simpleAdapter=new SimpleAdapter(this, globals.contactArrayList, R.layout.listview_row,new String[]{"question, answer"}, new int[]{R.id.textView1,R.id.textView2});

(2)adapterQuestionString=new ArrayAdapter<String>(this, R.layout.listview_row,R.id.listRowTextView,globals.arrayPartStrings);

【2】Android 今日のエラー Intentのfinish()でエラー、textViewの初期化忘れ、強制終了、レイアウトXMLの記載ミス

http://enjoygoodtown.com/blog/4770.html

(1)Intentのfinish()でエラー、

画面遷移で、AからB画面へ移動し、B画面でボタンにfinish()を記載して実行するとA画面に戻ってエラーとなりました。
ActivityThread.performDestroyActivity(IBinder, boolean, int, boolean) line: 3273

B画面にpublic void onDestroy() {が記載されていたので、これをコメントにしました。
>正常になりました。
未だ試していないのですが、ADMOBを入れて正常に動作していないために、onDestroyでエラーになったおそれがあります。
まずは、正常に動作する方向で確認してからAdomobを入れていきます。
いまは、B画面でAdmobは正常に表示されていない状態でした。

(2)textViewの初期化忘れ

(TextView)findViewById(R.id.hobunWhichTextView);
初期化しました。

(3)突然エラーで強制終了、レイアウトXMLの記載ミス

>症状:AからBに画面遷移するとき、B画面が表示されずに強制終了する
数時間前の作業まで、正常に動作していると思っていたコードに追加作業をして、実行したら強制終了するようになった。
>対応:コメントにしながらどこまで表示されているのかをデバッグしました。
デバッガには、どこが悪いのか表示されているのか不明な状態。
宣言をしているところまでのコードにして徐々にコメント解除しながら、どこが悪いのかをかくにんします
>原因
backButton=(Button)findViewById(R.id.hobunBackButton);
のレイアウトXML側のR.id.hobunBackButtonの記載が違っていました。
 たぶん、どこかのタイミングで誤って文字の一部を削除してしまったみたいです。
 
コンパイルはエラーもなく、実行しても直ちに強制終了はなく、該当する画面が表示されたときに強制終了となりました。
こういったエラーの箇所を調べるのは難しいので、こまめに動作検証をしながら、コードを書いていくしかありません。

(4)admobエラー、広告を表示する領域が足りません。

Not enough space to show ad! Wants: <426, 66>, Has: <800, 0>
領域を確保して表示させます。が、なかなかうまく領域を確保するタグが組めません。試行錯誤になると思います。

【3】Android 今日のエラー、グローバル変数設定エラー、This version of the rendering library is more recent than your version of ADT plug-in、バックグラウンドからの復帰でエラー、Cursor cursor=db.rawQuery(selectQuery, null)

http://enjoygoodtown.com/blog/4811.html

(1)Activityにまたがってグローバルに変数などのオブジェクトを共有でエラー

何度コードをチェックして見てもグローバル変数を設定したところでエラーとなります。コードの記載が間違っているのかとなやっていて、
再度、参考サイトを参考にすると、AndroidManifest.xmlの設定を忘れていました。


AndroidManifest.xmlの中のapplicationタグの中に
android:name=”Globals”

これでOK。
なお、アイフォンのXCODEにはxmlはありませんので、グローバル変数を使うときにアンドロイドのような設定はありません。
デリゲートするだけです。

(2)配列に値が代入されていないのに、値を取り出そうとしていた

>値を代入した後に、値を取り出すように変更(コードをリライト、メソッド(関数)化したときに、順序がばらばらになってしまったという現象でした)

(3)onCreateにsetContentVIew() が記載されていないミス

>正しく記載

(4)指定したレイアウトに指定したオブジェクトボタンがなかった、または誤記

>必要なオブジェクトボタンと正しいオブジェクトを設定した。

(5)任意の画面に戻るとエラーになる。それは仕様です。

トップ、リスト、問題、答え。の順で画面を切り換えて移動して、答え画面で、リストに飛ぶIntentするとエラーとなります。そこで、intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONTは途中の画面に戻っても
エラーになりませんが、ここで、finish()の戻りが、変わってしまいます。
つまり、途中で流れを変えてしまいましたので、いままでの流れを変えてしまうことになりました。
そして、この流れが変わった状況で、画面遷移をするとまた、エラーになりました。
アンドロイドの仕様では、順番に移動し元に戻ることが基準になるようです。

そこで、案としては、答えの画面をダイアログにする。
または、トップ表紙を辞めてリスト画面を最初にする。
が考えられました。
トップは単に表紙の役割でしかないので、トップを止めれば良いのです。
しかし、なんとなくソフトとして突然学習が始まるのは、急すぎる気がします。

一応、答えからトップに戻る場合は、エラーになるという問題ありません。途中のリスト画面に戻ってしまうので問題が発生してしまうのです。

 いろいろと調べてみると、トップからリスト画面に移動するときに、Intent発行時にActivityスタックをクリアすれば良いという記載がありました。
 

Intent intent = new Intent(getApplicationContext(), 移動先のクラス.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

【Android】Intent発行時にActivityスタックをクリアする方法を参照
これで、試してみます。
だめなときは、トップ画面を止めようかと。
それでも上手くいかないときは、答え画面をやめて、ダイアログにしようと思います。

 

(6)This version of the rendering library is more recent than your version of ADT plug-in

新しくSDKをバージョンアップしたら、レイアウトが表示されなかった。

Click Help > Install New Software.
In the Work with field, enter: https://dl-ssl.google.com/android/eclipse/
Select Developer Tools / Android Development Tools.
Click Next and complete the wizard.

でインストール

(7)多重起動を禁止

AndroidManifestのactivity内
android:launchMode=”singleTask”
を追加してみた

これでどうなるか
だめですね。多重起動してる。
改善せず。

(8)sherlock を導入して、警告が表示されるのは自作のプロジェクトのlibs/android-support-v4.jarをEclipseから削除すれば
よいそうです。

ActionBarSherlockをアプリで使おうとして導入時”Jar mismatch! Fix your dependencies”と出た時の対処

(8)バックグラウンドからの復帰でエラー

Qlist.javaにintentするとエラーになってしまう。
他のアクティビティを表示させていて、バックグラウンドになってもエラーにはならないのに。

そこで、public void onDestroy()、onStop() など を入れました。

@Override
public void onUserLeaveHint(){
//ホームボタンが押された時や、他のアプリが起動した時に呼ばれる
//戻るボタンが押された場合には呼ばれない
finish();//ここで、Qlist.javaを終了させる
}
として、Qlistのアクティビティが起動していたら、強制的に終了させるようにしてみました。
すると、とりあえず、Qlist.javaのアクティビティのときにバックグラウンドになっても強制終了することはなくなりました。
しかし、今度は、タスクリストで、Qlist.javaのアクティビティが表示されるときには、アプリの最初の画面からになってしまいました。
これは、 onUserLeaveHint()のfinish()をコメントにすれば、すべて丸く納まるのか?
この点については、後日やってみようと思います。
まずは、onUserLeaveHintで、強制終了はなくなりました。
しかし、他にも問題がありました。他の画面のアクティビティでも終了していて、戻るでQlist画面が表示されません。

そこで、onStop()にfinish()を入れました。
でもこれだと画面が切り替わるとQLISTを削除終了します。

うーんと悩んでいてfinish()を入れずに、再度確認したら、強制終了しなくなりました。
もしかすると他のところを直していてそこが原因だったか?

とりあえず、このまま進めてみます。

(9)SQLiteでエラーCursor cursor=db.rawQuery(selectQuery, null);

の次の処理でエラーです。
>原因
単に検索結果が該当なしなだけでした。
検索結果が0なのに、配列から格納された以上の値を取得しようとしていました。
検索結果が0のときはなにもしないようにしました。

【4、5】今日のエラー AndEngine google play 関連のエラー,Box2d のアプリがエミュレータでエラー、APIのバージョンを上げる|admobのライブラリの追加忘れ|onAreaTouched(),IOnAreaTouchListenerが動かない|box2d衝突判定ContactListener が正常に動かない|プロジェクト名、パッケイージ名の変更したいときは

http://enjoygoodtown.com/blog/5024.html

android,google play 関連のエラー| apkをアップロードしようとしたら「zipalign が実行されていない APK をアップロードしました。APK で zipalign を実行し、もう一度アップロードする必要があります。」というエラー

eclipseからandroidアプリへのデジタル署名手順が必要らしい
1.”Android Tools” > “Export Signed Application Package…
を実行して、必要な情報を入力
2.指示に従って入力して、新しいAPKファイルを作成して、
3.アップロードして、
4.公開設定にすれば終わりです。
AM8:06

ただ、どのURLかいまわからない。
次のようになるそうです。

https://play.google.com/store/apps/details?id=com.example.application
https://play.google.com/store/apps/details?id=com.ドメイン.アプリ名

(1)box2dを使用してデバッグしようとするとエミュレータが “Emulator without GPU support detected”と表示してしまう

エミュレータでGPUを設定してもダメ。
PJ名は box2dtext
エミュレータは、API16 android 4.1.2ではエラー

実機でもエラーと思ったら、2回ダメで、その後、OK。一体何だったんだ。
でもエミュレータではエラーのまま。
API16 android 4.1.2ではエラー
>APIのバージョンを上げて API 18 android 4.3でOK

(2)プロジェクト名、パッケイージ名の変更したいときは

フォルダ名をfinderでコピーしておいてEclipseにインポートして、

マニフェストファイルを開いて変更したいcom.xxx.newnameにして
左側のsrcのところを右クリックしてRefactor > Renameにして、Upadate referencesとRename subpackagesをチェックします。

詳しくは以下のリンクを参考。
Eclipseのリファクタリング機能を活用する « Tech Booster
Androidのプロジェクト名・パッケージ名の変更 [Android] – phonybearの日記

(3)admobのライブラリの追加忘れ

アドモブの広告を追加しようとしたら、なかなかエラーが消えない。
よくよく考えたら、ADMOBのライブラリを追加していませんでした。

libs/GoogleAdMobAdsSdk-XXX.jarとなるように、GoogleAdMobAdsSdk-XXX.jarをコピーします。
私は手動で、コピペしました。
もし、すでに、教科書通りにGoogleAdMobAdsSdk-XXX.jarを挿入していたら、挿入済みを一旦削除してください。
すでに登録されているGoogleAdMobAdsSdk-XXX.jarがあるとエラーになります。

そして、activityj_main.xmlに
xmlns:ads=”http://schemas.android.com/apk/lib/com.google.ads”
を忘れずに。

(4)onAreaTouched(),IOnAreaTouchListenerが動かない

設定してもなぜか動かない、そして、アクションを起こしたいスプライトを正しくタップしているのに、ログにも出ない。
原因:該当のスプライトを登録していませんでした。
対応:registerTouchArea(sprite);として登録しました。

設定
setOnAreaTouchListener(MainScene.this);//dont forget

定義
boolean onAreaTouched

登録
registerTouchArea(sprite);

onAreaTouchedを使って、タップされたスプライトなどにアクションを与えたいとき、
設定して、定義してもどのスライトに対して、登録しないとコンパイルエラーや実行時のエラーがなくても正常に動作しません。
タッチ後のアクションを与えるのかがわからないからです。

これはonSceneTouchEvent(Scene, TouchEvent)と異なります。
onSceneTouchEventは、
設定
setOnSceneTouchListener(MainScene.this);
して、定義を書けば動きます。
この点が異なります。

(5)box2d衝突判定ContactListener が正常に動かない 

ContactListenerの記載自体は問題ありません。

問題だったのは、他のところで、衝突した際に、どのBODYかを判別するために
if (x2.getBody().getUserData().equals(“player”)として
bodyの登録情報を取得する際に、設定されていない場合に強制エラーとなるようです。
値が設定されていなければ、FALSEとなるのかと思いましたが、強制エラーでした。

そこで、
if (x1.getBody().getUserData()!=null && x1.getBody().getUserData().equals(“player”) )
として、nullチェックを入れるようです。
これで、強制的なエラーはなくなりました。

また、x1,x2のどちらに該当のBODYが入るかはわからないので、両方判定を入れた変えてOR
判定を入れます。最初は、どちらか一方にBODYーAにX1が入っていれば、残りの方にBODY-BにX2が入って相互に判定してくれると思っていましたが、そうではなくて、BODY-AにX2、BODY-BにX1という場合は、判定できないようでした。
つまり、どちらに入るかはきちんと判定できるようにしなくてはいけないようです。
結果として以下のようになりました。
woodRectangleは、Rectangleで接触したら赤色に変化するようにして、衝突判定を視覚的にわかるようにしたものです。

@Override
	        public void beginContact(Contact contact)
	        {
	            final Fixture x1 = contact.getFixtureA();
	            final Fixture x2 = contact.getFixtureB();
	            if (x1.getBody().getUserData()!=null && x2.getBody().getUserData()!=null ){
	            	if ( x1.getBody().getUserData().equals("hi") && x2.getBody().getUserData().equals("another") ||
	            			x1.getBody().getUserData().equals("another") && x2.getBody().getUserData().equals("hi") 
	            			){
		        		Log.d("contact", "contact_hi");
		        		woodRectangle.setColor(1.0f, 0.0f, 0.0f);
		        	}
	            	
	        	}
}

【6】今日のエラー、 andEngineをGLES2 Anchor Centerにして、box2dをインポートして、実行するとエラー

http://enjoygoodtown.com/blog/5146.html

(1)andEngineをGLES2 Anchor Centerにして、box2dをインポートして、実行するとエラー

andengineで作成したプロジェクトをインポートし、GLES2 Anchor Centerのandengineに切り替えようとしました。
つまり、andengineのライブラリのプロジェクトをインポートし、このライブラリを削除して、代わりにGLES2 Anchor Centerのandengineを選択し、box2dを追加しました。
するとbox2dにandengineがくっついてしまって、機能上2つのandengineが読み込まれた形になります。
この状態で実行するとエラーになりました。

Unable to execute dex: Multiple dex files define Lorg/andengine/AndEngine;
com.android.dx.util.DexException: Multiple dex files define Lorg/andengine/AndEngine;

どうやら、GLES2 Anchor Center.jarとbox2dをインポートするとandEngine.jarも読みこ込まれてしまって、android Anchor Center.jarとandroid.jarでほぼ同じものを見ている状態になりました。
実は、box2dをインポートするとandEngine.jar自動で読み込まれるので、box2dを手動のコピペでlibにペーストしてみました。

するとエラーは消えました。困ったときは、手動がよさそうです。
次に、box2dに問題がないかを確認します。

>結果として、anchor centerに対応してAndEngineとBox2dをそれぞれダウンロードして、この2つを利用することになりました。

(2)activety_main.xml正常にレイアウトが表示されない(未解決)

java.lang.NullPointerException
という警告が表示される。ただし、プログラムは正常に表示されます。
なお、ADMOBは正常に表示されます。

対応:よくわかりません。
うだうだ考えて先に進まないよりは、とりあえず、ノーマルなandEngineのみのひな形を用いいて再度プロジェクトを作成することにします。そして、Admob等の部分を追加して、エミュレータでテスト用の画面が表示できるところまでを確認してみます。

その後、box2dとGLES2 Anchor Centerのandengineに切り替えていきたいと思います。

つまり、
andengineでSpriteとADMOBの確認後
から
box2dとGLES2 Anchor Centerのandengineに切り替え
ということになります。

1.andengineでSpriteとADMOBの確認

書籍を参考にしてひな形をしたプロジェクトPJをインポートして、各種設定をする
ADMOBをコピペ
実行確認OK

2.andengineのライブラリを一旦リムーブして、GLES2 Anchor Centerのandengineを追加(座標系の変更)、結論はこのままでは失敗

GLES2 Anchor Centerのandengineの追加はプロパティから行った
実行後、スプライト画像が表示されるが、画像の中心が左下に移動している。これは、andengineのサンプルで、(0,0)のフル画面として表示させるためのものなので、本来であれば、画面いっぱいに画像が表示されるはず。
それが、左下に移動して4分の1しか表示されていない。

つまり、ライブラリを変えたことで、左下原点で、画像中心になったということか?
そうです。左下原点であり、画像中心座標に変わりました。
これで、coco2dと同じ座標系になりました。
ここで、ちょっとまた、こんがらがってきました。今まで、andengineは、左上原点、画像も左上基準でした。また、box2dも時計回りでポリゴンを作成していました。
今回のGLES2 Anchor Centerのandengineにより、cocos2dと同じようになります。

ちなみに、アンドエンジンのサンプルは標準のアンドエンジンを用いて作成されているので、左上原点が基準です。
ここらへんがちょっとややこしくなってきます。

andengine:左上原点、画像左上基準、下がY軸正(android,iOSと同じ)
andengine GLES2 Anchor Center:左下原点、画像中心基準、上がY軸正(cocos2dと同じ)

(3)(2)の続き、GLES2 Anchor Centerのandengineにbox2dのライブラリをインポートする方法

box2dのプロジェクトは、標準のAndEngineを利用しているので、そのままインポートをすると、標準のAndEngineを取り込んでしまいます。
そこで、box2dにGLES2 Anchor Centerのandengineを変更してから、プロジェクトに入れます。
このとき、box2dのインポートをしたプロジェクトはエラーが表示されますがこのままにしておきます。
もとのAndEngineに戻せばエラーは消えますが、今度は現在作成中のPJが、andEngineとGLES2 Anchor Centerのandengineの2つのライブラリになってしまい、エラーとなります。

(3.2) (3)の更に続き、The type org.andengine.entity.shape.IAreaShape cannot be resolved.

結論は、
ワークスペースで、GLES2 Anchor Centerのandengineと標準のandengineを分けることにしました。
これでやれば、ごちゃごちゃしなくなりそうです。すでに、ごちゃごちゃしてます。
ワークスペースを別に作ることで、いままでのプロジェクトのライブラリが重複することがなくなるそうです。

andengineのbox2dを一旦、ワークスペースから削除してから
新しくワークスペースを作成し、
GLES2 Anchor Centerのandengineと anchourcenterのbox2dをインポートします。

ただし、ワークスペースの切り替えが、エクリプスの再起動になるので、ウィンドウの切り替えのように瞬間的にはできません。こういう部分は不便です。

現在のワークスペースの構成

・andengine, 通常のアンドロイドアプリ作成のためのワークスペース
・GLES2 Anchor Centerのandengineとanchourcenterのbox2dのためのワークスペース
・他
という感じでワークスペースを構成しています。

関連記事

「スポンサーリンク」


ツイートツイート
カテゴリー: Androidアンドロイド携帯アプリ, iPhoneアイフォンアプリ開発 タグ: , , , パーマリンク