[課題] Terminalっぽいことを、してみたい。
私はxyzzyというEditorを愛用しています。xyzzyには、Editorからshellを操作する機能があります。
「KyoroTextにも、Shellモードが欲しいなぁ~」と考えていました。
ためしに実装してみたら、そこそこ動いたので簡単に紹介します。
[問題]
Googleを多様して、以下のような問題を解決できました。
-A Androidで、CLIアプリを動作させめ方法は?
-B cd した後の、現在参照しているフォルダを利用したい?
[A] Androidで、CLIアプリを動作させる方法は?
自分以外のAndroidアプリを起動する場合、通常は、Intentを使用します。
「cd」「ls」dateといった。/system/bin配下にあるネイティブアプリを動作させるには、
どうすれば良いのでしょうか? Intentで実現できるのでしょうか?
Runtimeクラス、ProcessBuilderクラスで実現できます。
細かな使い方は、Google先生に聞くと良いでしょう。
KyoroTextでは、以下のようなコードを書きました。
https://github.com/kyorohiro/KyoroHelloAndroid/tree/master/KyoroCommon/src/info/kyorohiro/helloworld/util/shell
CLIAppKicker
>
> CLIAppKicker#start(String command)
>
startを呼ぶとCLIアプリを起動します。
[B] cd した後の、現在参照しているフォルダを利用したい?
「Aの問題」が解決しました。なので、「ls」使いたい時は、「CLIAppKicker#start("ls")」
とすれば、「ls」が呼べます。
しかし、うまくいかない場合があります。
「cd」です。
以下のようなシナリオを考えてみましょう。
1. "/" にいる。
2. cd mnt とする。
3. cd sdcard
として、SDカード配下に移動したいとする。
1. CLIAppKicker#start("cd mnt")
2. CLIAppKicker#start("cd sdcard")
のようなコードで実現できそうです。しかし、
子プロセスの情報は引き継がれません。
1. CLIAppKicker#start("cd mnt")
---> /mntい移動する。
2. CLIAppKicker#start("cd sdcard")
--> /sdcardに移動する。
となり、思い通りの場所(/mnt/sdcard)に移動できません。
この問題は、CLIAppKicker#start("sh") とすることで解決できます。
KyoroTextでは、以下のようなコードを書きました。
https://github.com/kyorohiro/KyoroHelloAndroid/tree/master/KyoroCommon/src/info/kyorohiro/helloworld/util/shell
CmdSession.java
[気をつけた点]
topコマンドなど、プロセスが動作し続けるアプリでは、「InputStream#available() == 0」の状態で、InputStream#read()すると、次へ進まなくります。データが入力されるまで待機するためです。
なので、必ず、「InputStream#available() > 0」ことを確認してから、InputStream#read()する
ようにしました。
[次回]
テスト自動化はできた!!どのくらいテストできたか定量的に客観的にしりたい!!
どうすればよいでしょうか?
次回はEMMAというテストカバレッジツールを使用する方法について解説します。
2013年1月27日日曜日
KyoroText で使用されている技術 その11
登録:
コメントの投稿 (Atom)
mbedtls dart の 開発を始めた web wasm ffi io flutter
C言語 で開発した機能を、Dart をターゲットとして、Web でも サーバーでも、そして Flutter でも使えるようにしたい。 そこで、mbedtls の 暗号化の部分を Dart 向けのPackageを作りながら、 実現方法を試行錯誤する事にした。 dart...
-
[課題] Low Memory Killer を意図的に発生させたい Androidには、ヒープが涸渇すると使われていないアプリをKillする機能があります。 この記事では、意図的にヒープを枯渇させて、この状態をつくる方法について説明します。 単純にヒープを大...
-
Dart の Native Extensions を利用して、 SDL を用いたマルチプラットフォームのゲーム開発環境を作れるか検証してみた。 結論からいくと、 「Mac 上で動作する SDL x Dart の アプリは動作させることが難しいよ」 と言うことです。 Wind...
-
Emscripten と OpenGLを使ってゲームを作ろうと思いたって、 まずは、SDL2の基本的な使い方を試していた。 しかし、今の所は、SDL 1系 の方が、良いと思いました。 SDL2があるのに、SDL1 を選ぶのはなぜか? # 201...
0 件のコメント:
コメントを投稿