攻撃は最大の防御なり

50代おやじの適当なブログです。

[Android] インストしたアプリは何処へ?

2011-10-17 08:32:47 | Android
今日はインストしたアプリは何処へ行くのかと言うお話です。

マーケットや野良apkからインストしたアプリは/data/appに保存されます。
この時のファイル名はアプリID+枝番.apkとなります。
以前、アプリIDは一意で被ることはないとお話しましたが何故枝番が振られているのでしょうか?
これはアップデート用で、もしXX-1.apkがインスト済みの場合は
アップデート版をXX-2.apkとしてインストしXX-1.apkを削除。
XX-2.apkがインスト済みの場合はアップデート版をXX-1.apkとして…
といった具合です。
ここに保存されているapkは引っこ抜いて他の端末に入れることも出来ます。

本当は実動作上の仕掛けを書こうかと思っていましたが、非常に複雑になってしまったのでさらっとにしておきます。
javaの実働部分は/data/dalvik-cache、アプリのネイティブライブラリや設定データは/data/dataの物が使われます。

最新の画像もっと見る

9 コメント

コメント日が  古い順  |   新しい順
Unknown (Unknown)
2011-10-26 12:49:05
どこで質問すべきか迷ったのですが、ここに致します。
システムアプリ、プリインストールアプリのバックアップはroot化することで可能になるのですが、リストアが普通にapkを実行するだけではインストールできません。

/system/app にそのまま設置するだけで良いものか、
もしくはdalvik-cacheの該当ファイルと/data/data/内の該当ファイルを削除後、/system/appにapkを設置して
再起動してシステムに上記のファイルを自動で作らせるかべきか…

色々と試しているのですが上手く行きません。
何か良い解決策はありますでしょうか?
ちなみにTitanium Backupの復元でも復元できませんでした。
返信する
Unknown (アレ)
2011-10-27 10:12:45
システムアプリって事は標準ROMに入っているapkとodexのセットの事ですかね?
odexの記事に書いてある内容にはちょっと語弊があって、実際は機種ではなくてそのROMセットに依存します。
ですので…

・標準ROMのapkをCyanogenModに移植
・バージョンが異なる標準ROM間のapk移植

これらはそのままでは動かず。細工してやる必要があります。
また、Titanium Backupを使ってもバックアップを取ったROMセット以外には戻せません。
返信する
Unknown (936)
2011-10-27 12:02:53
事の発端は標準ROMに入っている「電卓」をTitanium Backupでバックアップを取り、アンインストールして、復元を実行したのですが、復元中と表示されそのままループしました。

結果復元できず、Titanium Backupがバックアップしたtar.gzを解凍してCalculator.apkを実行したのですが「インストールされていません」と表示されインストールできず…。

/data/data/com.androoid.calculator2をディレクトリごと削除しCalculator.apkを/system/appに入れて再起動かけたのですが、起動できませんでした。

>これらはそのままでは動かず。細工してやる必要があります。
どのような細工をする必要があるのでしょうか??
返信する
Unknown (936)
2011-10-27 12:15:22
すいません。書き忘れました...
環境は同じROMセットでの話です。
Titanium Backupでアンインストール後再起動、
その後、復元へという流れです。
当然、復元できると思ったのですができず、彷徨っています。

CWMから削除前のシステム全体のバックアップで元に戻せたから良いのですが…。

何とかシステムアプリをアンインストールしても復元できる手順を確立したいです。
返信する
Unknown (アレ)
2011-10-27 17:17:07
電卓やってみました。
これはそもそもTitanium Backupの作りが悪いです。

TitaniumでアンインストするとCalculator.apkとCalculator.odexが削除されますが
バックアップ時にはCalculator.apkしか保存していないようです。
odexがあるリソースは必ずセットである必要があるので、apkだけでは意味を成しません。
なので…

アンインスト時

・Titaniumでバックアップを取る
・Calculator.apkとCalculator.odexを別途保存しておく

戻し時

・Calculator.apkとCalculator.odexを/system/appに突っ込む
・Titaniumでデータだけ戻す

これでOKです。
返信する
Unknown (936)
2011-10-27 21:19:28
動作検証と手順ありがとうございます^^
私の端末でも無事復元でいました!!
しかし、これほど有名なTitaniumなのにちょっと残念ですね。
動作的に実装するのは可能なような気もするのですが。

ちなみに、今回の手順はWikiに反映させて頂きました!!
http://hikaku.fxtec.info/htcEVO-ISW11HTwiki/wiki.cgi?page=root%B2%BD%A4%CB%A4%C4%A4%A4%A4%C6#p72

あと、前回質問したadb時の systemへの操作ですが、私の言葉が足らず、通常時でsystemへの操作を試みていました。
recovery時に同じことを行ったところ問題なくできました。
大変申し訳ありませんでした。
またこちらもWikiに反映しました。
http://hikaku.fxtec.info/htcEVO-ISW11HTwiki/wiki.cgi?page=root%B2%BD%A4%CB%A4%C4%A4%A4%A4%C6#p68

それでは、いつもありがとうございます。
今までの疑問が晴れました(^^♪
返信する
Unknown (アレ)
2011-10-27 22:01:15
私は通常bootもRecovery時と同じ振る舞いをするように変更しているので
正直、普通の状態では余り使っていないんですよね。

記事用に状態を戻してざっと検証してはいますが、たまに辻褄が合わない内容があると思います。
そんな場合は教えて頂けると嬉しいです。
返信する
Unknown (936)
2011-10-28 12:27:45
odexとapkの関係を調べました。
baksmali.jarで色々やり再コンパイルして…以下略。
こうすると確かに改Calculator.apkでインストール可能ですね。
勉強になりました。wikiには何となく載せられそうにないのでココだけにしておきますw
返信する
Unknown (アレ)
2011-10-28 15:07:07
deodexで重要なのは他機種のROMから抽出したリソースが移植可能になる事です。
私のSensationにはこうやってDHDから移植したiWnnが入っています。
返信する

コメントを投稿