Next: , Previous: , Up: EmacstとAndroid   [Contents][Index]


H.3 AndroidでEmacsがアクセスできるファイル

EmacsはAndroidシステム上で/assetsという名前の特別なディレクトリーを公開します。このディレクトリーにはGNUやUnixなら通常は/usr/share/emacsにインストールされるディレクトリーetclispinfoが含まれています。AndroidシステムではlsのLispエミュレーション(MS-Windowsでのlsのエミュレーションを参照)がデフォルトで有効になっています。システムに付属するlsのバイナリーはメーカーによって異なり、Emacsが求めるすべての機能は通常はサポートしていないからです。一部のAndroidシステムとともに配布されるlsのコピーの中には、-lフラグさえ欠落していることが知られています。

Androidはパッケージの展開時にアプリケーションのパッケージ内容を展開せずに、“asset manager”という特別なインターフェイスを用いることをEmacsのようなプログラムに要求するためにこのディレクトリーが存在します。このような実装による結果として以下のような特性が生じます:

/assetsディレクトリー以外にも、Androidプログラムは通常は以下の4つのディレクトリーにアクセスできます:

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システムでは、アプリケーションによるopenreaddirのようなファイル関連のシステムコールを用いた/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では、これらのセッティングは用意されていません。

This page has generated for branch:work/master_4078d0fd3ee9e55c3da219aa6e7788ac6130697b, commit:d18a231220c4a6cb2583dcc09bf39ca635ef043f to check Japanese translation.