完璧なエラー

アバター
lriki
記事: 88
登録日時: 14年前

完璧なエラー

投稿記事 by lriki » 13年前

Android でアラートダイアログ使ってみました。
完璧だ・・・完璧すぎる・・・。
120901.png
120901.png (29.96 KiB) 閲覧数: 186 回
うん。アラートダイアログを表示できたことが。

まぁ待て落ち着くのだ。ダイアログの表示なんて管理人であるところの
きゅーさんが懇切丁寧に解説していらっしゃるではありませんか。
40秒で支度して余裕で表示できますよ!


否。今回重要なのはファイル名が main.cpp であるところだ。



・・・

というわけで、Myライブラリも Android 対応が着々と進んでいます。

まさか STL+例外+ダイアログ表示 のたったこれだけで半日も時間とられるとは思わなかったので
刹那的な意味を込めた「わーいっ!きゃっきゃっ!」なノリで日記を書くことに至りました。



で、メモなどを徒然と。

まず NDK で例外を有効にします。NDK はデフォの状態では例外が使えません。
Android.mk に以下を追加。これだけ。(ググればすぐに出てくるけど・・・)

LOCAL_CPPFLAGS := -fexceptions


次に STL を有効にします。多分ググってすぐに出てくるのは、Application.mk に以下を追加する方法。

APP_STL := stlport_static

だけどここでビルドしてみると、以下のようなエラーが山のように出てきます。

undefined reference to `__cxa_get_exception_ptr'
undefined reference to `__cxa_end_cleanup'
等々・・・

なんていうか、stlport_static は例外に対応してないみたいです。(゚∇゚ ;)!?
ドキュメント漁ってたら、コレが使えるみたいでした。

APP_STL := gnustl_static

ここまでで STL+例外 はOK。ログもしっかり取れました。


そしてボスはアラートダイアログ。
なにがボスっぽいかっていうと、メインスレッドでは呼び出せないっていうこと。
・・・うん。ダメだったんです。

今回は NDK の中でも Native 中の Native な NativeActivity なるものを使っています。
これは WindowsAPI のプログラミングのように自分でメッセージループを作る必要があるのですが、
ループがたった1秒以上行われないとその瞬間Android から「貴様・・・ハングアップしたな。切るぞ」と脅されます。
それが関わっているためか、アプリはダイアログを表示した瞬間に動作を停止します。
恐ろしいことです。

ただ、簡単に並列処理を行える機能があったことが幸いでした。
以下のような Java クラスを作って showMessageBox() を C++ 側から呼ぶことでちゃんと表示できました。

CODE:

public class MyActivity extends NativeActivity
{
	public void showMessageBox()
	{
		this.runOnUiThread(new Runnable()
		{
		    public void run()
		    {
		    	final AlertDialog.Builder builder = new AlertDialog.Builder(mThisActivity);
		        builder.setTitle("Title");        // タイトルを設定
		        builder.setMessage("Message");    // メッセージを設定

		        builder.setPositiveButton("OK", new DialogInterface.OnClickListener()
		        {
		            public void onClick(DialogInterface dialog, int which)
		            {
		                Log.d("Sample","OKを押した");
		            }
		        });

		        AlertDialog dialog = builder.create();
		        dialog.show(); 
		    }
		});
	}
}

NDK っていうところからしてあんまり需要無いと思うけど。誰かの助けになれば。



それにしても・・・windows ってホント恵まれてるなぁ・・・。

アバター
へろりくしょん
記事: 92
登録日時: 14年前

Re: 完璧なエラー

投稿記事 by へろりくしょん » 13年前

グズは嫌いだよ。

アバター
lriki
記事: 88
登録日時: 14年前

Re: 完璧なエラー

投稿記事 by lriki » 13年前

ひとがごみのようだー!

ISLe
記事: 2650
登録日時: 14年前

RE: 完璧なエラー

投稿記事 by ISLe » 13年前

どうしたんだいまるで戦だよ。
梨樹 さんが書きました:ループがたった1秒以上行われないとその瞬間Android から「貴様・・・ハングアップしたな。切るぞ」と脅されます。
ウォッチドッグタイマですね。
auのBREWアプリのときはms単位でしたね。
例えば、20個の中からランダムに3つ選ぶという処理を、
20個からランダムに1つ選ぶ→既に選んだものならやり直し→3つ選ぶまで最初から繰り返す
というふうにするくらいで落ちて(ケータイが再起動)ました。