AndroidでEmacs30.1をインストールして、Termuxとファイルスペースを共有させようとしたところ、かなり苦労した話。

By | 2025年10月1日 , Last update: 2025年10月11日

はじめに

Zenfone12 Ultraへの移行作業も大きなトラブルなく進み、いよいよTermux上でEmacsの設定作業を始めるか…

と思いつつ、そういえば「Androidで(Termuxに依存せずに動かせる)Emacsを探すこと。」が先代のスマホ(ROG Phone 5)の使用開始以来の課題となっていたことを思い出しました。

そこでAI… ではなくググってみたところ、

「Emacs 30.1からはAndroidで直接Emacsが使えるようになったらしい。[1]」

という情報を入手しました。

AndroidでEmacsが直接使えるようになれば、電池を消費しがちなTermuxを起動しておく必要性が少し小さくなるかもしれないという期待感と、Emacs自体の操作性の向上(特に日本語入力の操作パフォーマンスの向上)が期待できそうです。

そんなわけで、TermuxでのEmacsの設定作業を実施する前に、Emacs 30.1のAPKアプリをインストールすることにしました。

スポンサーリンク

作業手順の概要

Emacsの用途はファイルの編集に限定(=無理にEmacsの中だけで生活しようとしない。)し、編集したファイルについてはTermuxのファイルスペースに保存したいのですが、そのためにはEmacsのファイルスペースとTermuxのファイルスペースは相互に共有できるように設定することが必要になります。

EmacsのファイルスペースとTermuxのファイルスペースを相互に共有させるための設定はAndroidManifest.xmlの設定で実施する必要があります。

そこで、APKファイルをいったんデコンパイルしてからAndroidManifest.xmlを修正し、再度コンパイル及び(再)署名を実施します。

また、APKファイルのインストールには(再)署名後のファイルを使用します。

よって、作業手順は下記の通りに整理できます。

  1. APKファイルのダウンロード
  2. APKファイルのデコンパイル
  3. AndroidManifest.xmlの設定
  4. APKファイルの再コンパイル
  5. APKファイルへの署名
  6. アプリのアンインストール
  7. APKファイルのインストール
  8. 動作確認

サクサクと作業(?)

実際の作業は試行錯誤の連続で、TermuxとEmacsのインストールとアンインストールを繰り返した結果、前節に記載した手順に整理をすることができたわけです。


スポンサーリンク

しかし、本節ではあたかもミスなく前節の作業手順の通りに順調に作業が進んだかの如き書き様で、作業内容を書いていきます。

なお、APKファイルのデコンパイルから署名までの手順の実施のために使用するPCを「作業用PC」と書くことにします。

APKファイルのダウンロード

TermuxのAPKファイルはuptodownのサイトからら0.119.0-b1+monet37というVersionを作業用PCにダウンロードします。

また、EmacsはSourceForgeの”Android ports for GNU Emacs Files“のページからemacs-30.1-29-arm64-v8a.apkをダウンロードします。

この記事を最初に書いた時点(2025年9月)で最新版としてemacs-30.2-29-arm64-v8a.apkが登場していたようですが、いったん気にしないことにします。

古い署名の削除

作業用PCで下記のコマンドを実行し、前節でダウンロードしたAPKファイルから署名を削除します。

> zip -d emacs-30.1-29-arm64-v8a.apk “META-INF/*”
> zip -d termux-0-119-0-b1plusmonet37.apk “META-INF/*”

 


スポンサーリンク

削除済のAPKファイルは元のファイルに上書きされますが、気にしないことにします。

APKファイルのデコンパイル

事前準備

APKファイルのデコンパイルにはapktoolが必要ですので、ApktoolのWebサイトからJARファイルとバッチファイルを作業用PCのAPKファイルがあるフォルダにダウンロードします。

コマンド

作業用PCのAPKファイルがあるフォルダで下記のコマンドを実行します。

> apktool d termux-0-119-0-b1plusmonet37.apk -o termux_decompiled
> apktool d emacs-30.1-29-arm64-v8a.apk -o emacs_decompiled

 

上記のコマンドを実行すると、termux_decompiledにTermuxのAPKファイルの作成用のファイル群が、emacs_decompiledにEmacsのAPKファイルの作成用のファイル群がそれぞれ展開されます。

AndroidManifest.xmlの設定

termux_decompiled及びemacs_decompiledの直下にAndroidManifest.xmlというファイルがあることを確認し、そのmanitestタグの属性定義に下記の定義がなかったら追加します。

android:sharedUserId=”com.termux”

 


スポンサーリンク

この設定については最初Grokに訊いたところ「applicationタグに追加すべし。」との回答を得たので、applicationタグに設定してみたもののうまくいきませんでした。

その結果、半日ほどTermux及びEmacsのAPKファイルのインストールを繰り返してしまったのはここだけの話です。

APKファイルの再コンパイル

スポンサーリンク

作業用のPCのtermux_decompiled及びemacs_decompiledがあるフォルダで下記のコマンドを実行します。

再びapktoolの出番です。

> apktool b emacs_decompiled -o emacs-30.1-9-arm64-v8a-pandanote.apk
> call apktool b termux_decompiled -o termux-0-119-0-b1plusmonet37-pandanote.apk

 

APKファイルへの署名

事前準備その1: Android Studio SDK及びAndroid SDK Platform-Toolsのインストール

APKファイルへの署名を実施するために、Android Studio及びAndroid SDK Platform-ToolsをPCにインストールします。

APKファイルへの署名のために使用するファイルはAndroid Studio本体ではなくSDKに含まれているものを使用します。

当初の調査により得られた情報ではSDKは追加でインストールをする必要があるとのことでしたが、Android Studioをインストールした時点ですでにSDKがインストールされていました。

よって、すでにインストールされていたSDKをそのまま使用します。

また、Android SDK Platform-ToolsはダウンロードしてきたZIPファイルを展開して適切な場所に配置し、platform-toolsフォルダまでのパスを作業用PCのPATH環境変数に追加します。

事前準備その2: 署名用キーストアとキーの作成

APKファイルへの(再)署名のためのキー及びキーストアを下記のコマンドを作業用PC上で実行して作ります。

> keytool -genkey -v -keystore hoge.keystore -storepass <some_password> -alias hoge-20250925 -keypass <some_password> -keyalg RSA -validity 1000

 

上記のコマンドを実行するとhoge.keystoreという名前のキーストアの中にhoge-20250925という名前の有効期限1000日の鍵が作成されます。

アラインメント

続けて下記のコマンドを実行し、APKファイルの中身のアラインメントを揃えます。

> zipalign.exe -v -p 4 emacs-30.1-29-arm64-v8a-pandanote.apk emacs-30.1-29-arm64-v8a-aligned.apk
> zipalign.exe -v -p 4 termux-0-119-0-b1plusmonet37-pandanote.apk termux-0-119-0-b1plusmonet37-aliened.apk

 

コンパイルを一度やり直しているために、実行する意味がなくなっている可能性がありますが、記載しておきます。

いよいよ(再)署名

アラインメントが揃ったところで、下記のコマンドを実行してアプリに(再)署名します。

> apksigner.bat sign -ks hoge.keystore --ks-key-alias hoge-20250925 --out emacs-30.1-29-arm64-v8a-signed.apk emacs-30.1-29-arm64-v8a-aligned.apk
> apksigner.bat sign -ks hoge.keystore --ks-key-alias hoge-20250925 --out termux-0-119-0-b1plusmonet37-signed.apk termux-0-119-0-b1plusmonet37-aliened.apk

 

それぞれパスワードの入力を求められるので、鍵の作成時に設定したパスワードを入力します。

アプリのアンインストール

Termuxを先代のスマホから移行していたり、設定が正しくできていない状態のEmacsをインストールしてしまっていたりする場合には、以下の作業を実施し、アプリをアンインストールします。

  1. Zenfone12 Ultraの開発者向けオプションの有効化及び使用可能化を実施する。
  2. 下記のコマンドを実行し、アプリをアンインストールします。
    adb> adb uninstall com.termux
    adb> adb uninstall org.gnu.emacs

     

APKファイルのインストール

削除ができたら下記のコマンドを実行し、(再)署名したパッケージをインストールします。

adb> adb install -r termux-0-119-0-b1plusmonet37-signed.apk
adb> adb install -r emacs-30.1-29-arm64-v8a-signed.apk

 

動作確認

APKファイルのインストールができたところで、動作確認を実施します。

Termux側からログインして、Termux及びEmacsのファイルスペースのファイルまたはディレクトリのownerが同一であることを確認します。

署名が異なるとTermux及びEmacsのファイルスペースのファイルまたはディレクトリのownerが同一になりません。

まず、Termux側を確認します。

“ls -la”コマンドを実行して確認します。

上記の結果はTermuxのバックアップのリストア完了後のものですので、インストール直後には存在していなかったディレクトリ及びファイルが表示結果に含まれていますが、その点はご了承願います。

(動作確認時には”.termux”ディレクトリしか存在しないと思います。)

owner名が”u0_a419″であることを確認します。

次に、Emacs側を確認します。

Termux上で下記のコマンドを実行し、Emacs側のファイルスペースに入ります。

$ cd /data/data/org.gnu.emacs/files

 

(上記のコマンドを実行してディレクトリの移動に成功した時点でほぼ勝ち確定ではありますが、)

“ls -la”を実行します。

こちらもEmacsの設定を実施後の実行結果になりますので、インストール直後には存在していなかったディレクトリ及びファイルが表示結果に含まれていますが、その点はご了承願います。

owner名がTermux側と同じ”u0_a419″であることを確認します(ユーザ名の文字列自体は違っていてもOKです)。

これで、動作確認は完了です。

なお、fontsディレクトリの下に日本語のTTFフォントのファイルを入れておくと、Emacsで日本語を表示させることができます。

今回のインストールに使用したフォントはMoralerspaceです。

日本語入力の操作感はもともとのEmacsが持っている操作感にかなり近づいた感じがします。

まとめ

結果から遡って考えると、Termuxのバージョンは必ずしも上記のものでなくても良い気がしますが、事の成り行き上設定及びインストールに成功後はバージョンの入れ替えは実施していません。

Emacsもこの記事を最初に書いた時点(2025年9月)における最新版ではないバージョンを今回はインストールしているので、今後新しいバージョンをインストールする際には本記事の手順を最初から実施する必要がありそうです。

本記事に書いた内容以外のところでもかなりの紆余曲折があったものの動作確認自体は実施できたので、Termux側とEmacs側双方の設定及び先代のスマホからの資材の移行作業を実施していきます。

その顛末については別の記事でお送りする予定です。

もうしばらくお待ち願います。

この記事は以上です。

References / 参考文献

  1. Emacs 30.1 released