Next: Androidでの他のプログラムからのファイルアクセス, Previous: Android<でのEmacsの起動, Up: EmacstとAndroid [Contents][Index]
EmacsはAndroidシステム上で/assetsという名前の特別なディレクトリーを公開します。このディレクトリーにはGNUやUnixなら通常は/usr/share/emacsにインストールされるディレクトリーetc、lisp、infoが含まれています。Androidシステムではls
のLispエミュレーション(MS-Windowsでのls
のエミュレーションを参照)がデフォルトで有効になっています。システムに付属するls
のバイナリーはメーカーによって異なり、Emacsが求めるすべての機能は通常はサポートしていないからです。一部のAndroidシステムとともに配布されるls
のコピーの中には、-l
フラグさえ欠落していることが知られています。
Androidはパッケージの展開時にアプリケーションのパッケージ内容を展開せずに、“asset manager”という特別なインターフェイスを用いることをEmacsのようなプログラムに要求するためにこのディレクトリーが存在します。このような実装による結果として以下のような特性が生じます:
ls
のような)サブプロセスを/assetsディレクトリーから実行できない。current-directory
に/assets、/content/storage、あるいはそれらのサブディレクトリーをセットしてサブプロセスの実行を試みても、かわりにホームディレクトリーから実行されることになるだろう。
/assetsディレクトリー以外にも、Androidプログラムは通常は以下の4つのディレクトリーにアクセスできます:
exec-path
に追加されて、起動時にexec-directory
が作成される。このディレクトリーにはEmacs自体とともに実行可能なユーティリティーが含められる。
Despite ordinary installations of Android not having files within the (normally read-only) root directory named content or assets, you may want to access real files by these names if the Android installation in use has been customized. These files will conflict with the aforementioned special directories, but can nevertheless be accessed by writing their names relative to the “parent” directory of the root directory, as so illustrated: /../content, /../assets.
外部ストレージディレクトリーは/sdcardで見つけられます。アプリケーションデータディレクトリーは通常は/data/data/org.gnu.emacs/filesにシンボリックリンクされているとはいえ、その他のディレクトリーを固定的な位置で見つけることはできません(が以下を参照のこと)。
Androidの以前のバージョンでは、アプリケーションライブラリーディレクトリーはアプリケーションデータディレクトリーの親ディレクトリーにあるlibという名前のディレクトリーでした。このディレクトリーは現在ではランダムに生成された名前で/data/app配下に置かれることが多いようです。
Emacsと同じユーザーIDを共有するアプリケーション内で実行される(exec-directory
変数にアクセスできない)スクリプトの利便性のために、起動時にアプリケーションデータディレクトリーの親ディレクトリー配下の従来の場所にアプリケーションデータライブラリーへのをシンボリックリンクさせるために少なからぬ労力が費やされています。
If Emacs is reinstalled and the location of the app library directory consequently changes, that symlink will also be updated to point to its new location the next time Emacs is started by the system.
非常に古いバージョン(2.6.29)のLinuxカーネルを実行するAndroidデバイスでは、assetのファイルから読み込むために一時ファイル用ディレクトリーにEmacsがtemp~unlinkedで始まる名前のファイルを作成する必要があります。そのような名前のファイルは上書きされたり削除されるかもしれないので作成しないでください。
Android
11以降のAndroidシステムでは、アプリケーションによるopen
やreaddir
のようなファイル関連のシステムコールを用いた/sdcardディレクトリーへのアクセスが制限されています。
この“対象範囲別ストレージ(Scoped Storage)”と呼ばれる制限によって、おそらくシステムはより安全になります。これは残念なことにEmacsが必要な権限を保有していても、それらのディレクトリーのファイルにアクセスできないことを意味しています。ただありがたいことにOpen Handset Alliance版のAndroidでは、プログラムごとにこの制限www無効にすることができます。以下がシステムセッティングパネルでこれに相当するオプションです:
System -> Apps -> Special App Access -> All files access -> Emacs
このセッティングを適切に無効あるいは有効にしてEmacsに“Files and Media”の権限を付与すれば、通常通りEmacsは/sdcard配下のファイルにアクセスできるでしょう。一部のプロプライエタリーなバージョンのAndroidでは、これらのセッティングは用意されていません。