AndroidアプリをAndroidを使って作る

材料

Androidタブレットにconnectbotをインストール

ちなみに私は下記端末+

8インチタブレット用キーボード付きケースで試しました

  • Androidマーケットからconnectbotで検索
  • インストール

しかし、、、ctrlやtab,escが効かないので vimで編集とかとてもしにくい状態

UbuntuCLI Android Development環境をつくる

sun-java6-binをインストール
 $ sudo vi /etc/apt/sources.list
 #下記を追加
 deb http://archive.canonical.com/ lucid partner
 $ sudo aptitude sun-java6-jdk ant apache vim git
android sdk linux x86をインストール

Download Android Studio and SDK tools
から android-sdk_r09-linux_x86.tgzをクリック

 $ tar xvzf android-sdk_r09-linux_x86.tgz
 $ sudo mv android-sdk-linux_x86/ /usr/share/android-sdk/
android sdk セットアップ
 $ export PATH=$PATH:/usr/share/android-sdk/tools/
 $ android update sdk -u

Installed Google APIs by Google Inc., Android API 8, revision 2
Downloading GALAXY Tab by Samsung Electronics., Android API 8, revision 1
GALAXY Tab用のSDK?もダウンロードしてる..

プロジェクトを作成してみる
 $ android create project -t 4 -p $PWD/KeyTest -k "la.zeg.android.keytest" -a KeyTest
 $ export PATH=$PATH:/usr/share/android-sdk/platform-tools/
 $ cd KeyTest/
 $ ant debug
 /usr/share/android-sdk/tools/ant/main_rules.xml:306: Execute failed: java.io.IOException: Cannot run program "/usr/share/android-sdk/platform-tools/aapt": java.io.IOException: error=2, No such file or directory

ん? No such file or directory

 $ cd /usr/share/android-sdk/platform-tools
 $ ./aapt
 -bash: ./aapt: No such file or directory

んー調べたら 下記をインストールしたらなおるみたい
64bit環境だからかな

 $ sudo aptitude install lib32z1-dev  lib32stdc++6  
 $ ./aapt 
 動くようになった
キーコードを調査するためのでもアプリつくる
 $ cd KeyTest
 $ vim 
 $ vim src/la/zeg/android/keytest/KeyTest.java
 package la.zeg.android.keytest;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.TextView;

public class KeyTest extends Activity implements KeyEvent.Callback
{
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
        }
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
                TextView t = (TextView)findViewById(R.id.textview);
                t.setText(""+keyCode);
                return super.onKeyDown(keyCode, event);
        }
}

こんな感じのでもアプリをつくって
apkを公開

 $ cp bin/KeyTest-debug.apk /var/www/

Tabletでアクセスしてダウンロード,インストール
調査すると

  • ALT:57
  • F2:82
  • Tab:61
  • Ctrl,ESC,F1:0

Ctrl,ESC,F1が同じコードが割り当てられているようだ
そこで

  • ALT->Ctrl
  • F2->ESC

として Tabのキーコードを変えてconnectbotを使いやすくする

connectbotの改造

android is01+ConnectBotでCTRLとESCが入力出来るようになりました - mk18のプログラミング日記を参考にさせていただいて
改造

 $ git clone https://github.com/kruton/connectbot.git

こんな感じに改造

 $ diff -c connectbot/src/org/connectbot/service/TerminalKeyListener.java connectbot_fr-809/src/org/connectbot/service/TerminalKeyListener.java 
*** connectbot/src/org/connectbot/service/TerminalKeyListener.java      2011-01-29 23:10:06.000000000 +0900
--- connectbot_fr-809/src/org/connectbot/service/TerminalKeyListener.java       2011-01-29 21:03:47.000000000 +0900
***************
*** 49,55 ****
        public final static int META_SHIFT_ON = 0x10;
        public final static int META_SHIFT_LOCK = 0x20;
        public final static int META_SLASH = 0x40;!       public final static int META_TAB = 0x80;
  
        // The bit mask of momentary and lock states for each
        public final static int META_CTRL_MASK = META_CTRL_ON | META_CTRL_LOCK;
--- 49,57 ----
        public final static int META_SHIFT_ON = 0x10;
        public final static int META_SHIFT_LOCK = 0x20;
        public final static int META_SLASH = 0x40;
!       //public final static int META_TAB = 0x80;
!       //zegenvs change TAB 128 -> 61
!       public final static int META_TAB = 0x3D;
  
        // The bit mask of momentary and lock states for each
        public final static int META_CTRL_MASK = META_CTRL_ON | META_CTRL_LOCK;
***************
*** 403,408 ****
--- 405,420 ----
                                bridge.redraw();
  
                                return true;
+                       case 57:        //ALT->CTL
+                               metaPress(META_CTRL_ON);
+                               bridge.redraw();
+                               return true;
+ 
+                       case 82:        //F1->ESC
+                               sendEscape();
+                               bridge.redraw();
+                               return true;
+ 
                        }
  
                } catch (IOException e) 

コンパイル
その前に
ProGuard | Official website
から ダウンロードしてproguard.jar を
connectbot/tools/proguard.jar
に配置
android target を変えないとコンパイルできなかったので7に変更

 $ android update project --target 7 --path $PWD
 $ ant proguard debug
 #またapacheで公開
 $ cp bin/ConnectBot-debug.apk /var/www

Tabletでアクセスしてダウンロード,インストール.
なんとか 出来ました
 以上