4

Android ART と、アプリのインストール プロセスで作成される「ネイティブ」コード ファイル .oat/.elf をいじっているときに、奇妙なことに気付きました。

私の理解では、デバイスが ART (Android >= 5.0) を使用している場合、アプリはコンパイル済みの oat ファイル (/data/dalvik-cache/arm64/) で開始されます。

そのため、アプリの使用済み fd をチェックして、そこにファイルが見つからなかったときにちょっと驚きました。通常の apk (/data/app//base.apk) のみが表示されます。

「ls -l /proc/PID/fd」のこの出力を確認してください

ここに画像の説明を入力

だから私はそれがそこにリストされていないだけかもしれないと思った. そこで、別の classes.dex を dex2oat ツールでコンパイルして、そのアプリの oat ファイルを自分で交換しました。

したがって、ファイルを変更した後でも、アプリは奇妙なメッセージやエラーなしで正常に起動します (logcat でも)。

これについての説明は何ですか?ART でアプリを起動するときに Android が行う詳細なプロセスは何ですか?

誰かが私のためにそれを片付けてくれることを願っています。どうもありがとう。

4

1 に答える 1

4

@Paschalis のコメントに基づいて、ここで調査したところ、oat ファイルは実際に Android 5.0 デバイス (エミュレーター) にメモリ マップされています。

a6af4000-a6af9000 r--p 00000000 1f:01 7366 /data/dalvik-cache/x86/data@app@my.app.works-1@base.apk@classes.dex

次の方法で確認します。

cat /proc/<PID>/maps | grep dex

残念ながら、これは Android 6.0 デバイス (Nexus 5 & arm-Emulator) には当てはまりません。

odex ファイルは/data/app/<APP>/oat/<ARCHITECTURE>/「base.odex」としてフォルダー内にあります

/data/app/app.app.works-1/oat/arm/base.odex

これについての有効な参考文献はまだ見つかっていません。これは実験と観察に基づいています。

于 2016-01-22T11:35:52.307 に答える