Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Android端末にEmacs風テキストエディタjedを移植する

Android端末に jed をインストールしたときの備忘録です。

jed について

jedは、Emacsに近い操作性を持つ軽量なテキストエディタです。
Emacsは内側にLispインタープリタを持っていますが、jedでは、S-LangというC言語風のインタープリタを内包していて、キーバインディングや挙動をS-Langで制御することが出来ます。

Android端末でLinuxコマンドライン ツールを動かすための方法

Jack Palevich 氏が作成、公開されている、Android Terminal Emulator (⇒GooglePlay*1) という端末ソフトをインストールします。

また、よく使うLinuxコマンド群(+環境)を入れるためには、いわゆるBusyBoxが必要になりますが、これはKBOX2を使用します。
KBOX2は、root権限のないAndorid端末上で Linuxに近い動作環境を実現します。

http://kevinboone.net/kbox2.html <---もはやリンク切れしています。今だとkboxを使うメリットはないので、Termuxとかに移行してください・・・身も蓋もありませんが・・・

Termux 参考リンク:DockerでTermuxのパッケージビルドを試す

(結局この記事は、jed+slangを野良ビルドするにはどうしたらいいか、というだけの記事になってしまってます。
 Termux上でのjedのビルド方法に関しては、そのうち記事を書きたいと思っています。)

注意事項とか

Android端末にroot権限は必要ありませんが、コマンドライン操作を行うためにキーボードが必須になります。

端末機種によっては、USB接続でPC用のUSBキーボードを接続することが出来ます。
(USB-microBからUSB Aメスに変換するケーブルが必要になります)

あるいは、Bluetooth接続のキーボードを使うこともできます。

物理キーボードが使えない時の妥協案としては、
Klaus Weidner 氏の Hacker's Keyboard (⇒GooglePlay*3 ) というソフトキーボードがお勧めです。
タブキーやコントロールキーをタッチ入力することが出来ます。

KBOX2用バイナリ―の クロスビルド環境の準備

まず、Ubuntu14.04LTSが走るLinux PCもしくはVMWarePlayerインスタンス等を用意します。

Android NDK をインストールします。インストール先は説明単純化の為

/usr/local/ndk/

とします。

NDK内の make-standalone-toolchain.sh を実行して、スタンドアロンなツールチェーンを $HOME/arm/toolchain に作ります。

/usr/local/ndk/build/tools/make-standalone-toolchain.sh --platform=android-19 --toolchain=arm-linux-androideabi-4.6 --install-dir=$HOME/arm/toolchain

ツールチェーンでビルドするための環境変数を設定します。 .bash_profile辺りの最後に追記でOKです。

export NDK_HOME=/usr/local/ndk
export NDK_PREFIX=$HOME/arm/android/libs

export NDK_HOST_ARM=arm-linux-androideabi
export NDK_TOOLCHAIN_ARM=$HOME/arm/toolchain

export PATH=$PATH:$NDK_HOME:$NDK_TOOLCHAIN_ARM/bin

jedとslang2のソースを入手します。

$ cd ~/arm
$ apt-get source jed
$ apt-get source slang2

slang2からビルドします。

$ cd slang2-2.2.4/
$ ./configure --host=$NDK_HOST_ARM --prefix=$NDK_PREFIX/$NDK_HOST_ARM
$ make
$ make install
$ cd ..

インストール先は、$HOME/arm/android/libs/arm-linux-androideabi/ 以下になります。

jedをビルドします。

$ cd jed_0.99.19/
$ ./configure --host=$NDK_HOST_ARM --prefix=$NDK_PREFIX/$NDK_HOST_ARM
$ make
$ make install

同じくインストール先は、$HOME/arm/android/libs/arm-linux-androideabi/ 以下になります。

slang2のビルドで起きる問題と対策

最初に躓くのが、./configure 出来ないことです。
これは autoconf/config.sub を別の新鮮なソースパッケージから取ってきて置き換えます。(vimとか)

HAVE_TERMIOS_H 周りがNDKでは微妙なので、ごにょごにょと手直しします。
(⇒ http://psp.dip.jp/web/upload/jed-ja/diff.sl2.txt )
Android OS はGUIが基本Java実装なので、下層のNDK周りにはlocaleは実装されていません。
なので、locale周りのライブラリ呼び出しを抑止します。

動的リンクライブラリ(libslang2.2.4.so)にするよりもstaticリンクのほうがよい場合は、

$ make static

により、libslang2.aを作って、静的リンクさせます。

jedのビルドで起きる問題と対策

slang2と同様、 autoconf/config.sub を別の新鮮なソースパッケージから取ってきて置き換えます。

環境変数JED_ROOT未定義の時に参照するディレクトリは、

/usr/lib/jed/(のlib/)

になるべきですが、クロスビルドでは、ホストOSのインストール先ディレクトリ名が残ってしまうので、ソースを手直ししてMake変数のJED_ROOTは無視するようにします。
TERMIOS周りも多少の手直しが必要になります。
(⇒ http://psp.dip.jp/web/upload/jed-ja/diff.jed.txt )

実行時、Ctrl+Sを押して検索するときに、require.slが無いというエラーは、
slangのslライブラリからrequire.slが読み込めていないのが原因です。
とりあえず、require.slだけでも、/usr/lib/jed/lib/ 以下にコピーしておくと回避できます。

jed 裏ワザ

KBOX2_shell を使わない状態(chrootする前のAndroid shell) から、jedを起動することが出来るようになりました。

これは、環境変数 JED_ROOT が未定義の場合のデフォルトのjedのディレクトリ:

/usr/lib/jed

が存在しない場合、

/data/data/jackpal.androidterm/kbox2/usr/lib/jed

を代替として参照するようにコードを追加しています。

環境変数 JED_ROOT で明示的に指定する場合はディレクトリ配置は自由です。

jed カスタマイズ

/home/kbox/.jedrc を用意して書きかえします。

雛形ファイルは /etc/jed.rc-sample に置いています。
(Mifes/Vz風味です)

下記の移植済みバイナリに同梱されているslファイルで、tagjumpコマンドを追加してありますので、grepの結果ファイルや、コンパイルエラーのstderr出力などをリダイレクトして、そのままファイルを開くことが出来ます。

移植済 Android(ARM) 版 テキストエディタ jed の入手先

以下のリンク先から入手してください

日本語を通すには、
$ export LANG=ja_JP.UTF-8

を実行するか、上記1行を /etc/profile に追記しておきます。

上記jed移植と同じ要領で、Linux上のコマンドライン ツールをAndroidに移植できます。

また、下記リンク先には、移植されたgccもありますので、小さなプログラムなら、端末上でビルドすることも一応できるようです。

KBOX2用の他のソフトウェアの入手先

KBOX2: coreutils , ssh , rsync , zsh , perl , gcc , make 等
-http://kevinboone.net/kbox2_downloads.html

KBOX2: libfakechroot.so の新しいバージョン(Android 4.2以上で必須)
-http://kevinboone.net/kbox2_diary.html

日本語対応Vim
-https://sites.google.com/site/fudist/Home/qfixhowm/other-service/howm-android

root取得済端末でLinuxユーザーランドを試したい場合

fakechrootではなく、普通のchrootを使用して、Ubuntu Linuxを試せます。

[続きを読む・・・]


2017年11月時点での追記:

ここまで書いていて、こう言うのもなんですけど・・・。

Android端末にLinux CUI環境が欲しいなら、現時点でお勧めは
GNURoot Debian一択です。(名前が紛らわしくてRoot権限が必要なDebianかと思って敬遠しておりました)

  • Google Playから一発導入出来ます。
  • Root 権限は要りません。
  • apt-getを使用して、好きなソフトを思う存分導入することが出来ます。(自家ビルドは全く不要)
  • CUI/GUIともサポート。

動作原理は proot を使用しているそうです。
お勧めです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
7
Help us understand the problem. What are the problem?