Androidがマーケットプレイスからアプリケーションをインストールした後、それは.apkファイルを保持しますか?
Androidがそのようなファイルを保存する標準的な場所はありますか?
プレインストールされたアプリケーションは/system/app
フォルダにあります。ユーザーがインストールしたアプリケーションは/data/app
にあります。私はあなたが根ざした電話を持っていない限りあなたはアクセスできないと思います。私はここに根ざした電話を持っていませんが、このコードを試してみてください。
public class Testing extends Activity {
private static final String TAG = "TEST";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
File appsDir = new File("/data/app");
String[] files = appsDir.list();
for (int i = 0 ; i < files.length ; i++ ) {
Log.d(TAG, "File: "+files[i]);
}
}
それは私の根ざしたhtcマジックとエミューでapksをリストします。
パッケージを一覧表示するには、adb Shell
の代わりにパッケージマネージャ(pm
)を使用します。
adb Shell pm list packages | sort
そして.apk
ファイルがどこにあるかを表示するため:
adb Shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk
そしてadb pull
はapkをダウンロードするためのものです。
adb pull data/app/com.king.candycrushsaga-1/base.apk
以前にインストールしたもののAPKファイルを入手したいだけの場合は、次の手順を実行します。
あなたはあなたの電話を根絶する必要はありません、adb
を使用すること、または何かを書くこと。
標準的な場所はありませんが、PackageManagerを使用してパッケージについて調べることができ、そこから取得できるApplicationInfoクラスには、特定のパッケージに関するさまざまな情報があります。その.apkへのパス、そのデータディレクトリへのパス、パス他のアプリとの関係に応じて、これらのディレクトリを読み取る権限がある場合とない場合があります。ただし、すべてのアプリがリソース.apkを読み取ることができます(これは、フォワードロックされていないアプリの実際の.apkでもあります)。
あなたがちょうどシェルであざけっているならば、現在非前方ロックのアプリは/data/app/.apkにあります。シェルユーザーは特定の.apkを読み取ることができますが、ディレクトリを一覧表示することはできません。将来のリリースでは、命名規則が少し変更されるので、それをそのまま使用しないでください。ただし、パッケージマネージャから.apkのパスを取得した場合は、シェルで使用できます。
プレインストールされたアプリは通常/ system/appにあり、ユーザーがインストールしたアプリは/ data/appにあります。
あなたは "adb pull"を使うことができますが、APKファイルのフルパスを知る必要があります。エミュレータでは、 "adb Shell" + "ls"を使ってディレクトリのリストを取得できます。しかし、Androidデバイスでは、セキュリティ上の理由から、 "/ data"フォルダでそれを実行することはできません。それでは、APKファイルのフルパスをどうやって把握するのですか?
PackageManagerに問い合わせるプログラムを書くことによってインストールされたすべてのアプリの完全なリストを得ることができます。下記の短いコードの抜粋:
PackageManager pm = getPackageManager();
List<PackageInfo> pkginfo_list = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES);
List<ApplicationInfo> appinfo_list = pm.getInstalledApplications(0);
for (int x=0; x < pkginfo_list.size(); x++){
PackageInfo pkginfo = pkginfo_list.get(x);
pkg_path[x] = appinfo_list.get(x).publicSourceDir; //store package path in array
}
そのような情報を提供するアプリを見つけることもできます。たくさんあります。 これを試してください(AppSender)。
特定のアプリのパスを探しているなら、迅速で汚い解決策はただバグレポートをgrepすることです:
$ adb bugreport | grep 'dir=/data/app'
これが網羅的なリストを提供することを私は知りません、それでそれは最初にアプリを走らせるのを助けるかもしれません。
マーケットプレイスからインストール
インストール後にapkを保持するかどうかは、マーケットプレイスの動作です。 Google Playはインストール後にapkを保持しません。他のサードパーティのマーケットプレイスでは、異なる動作が発生する場合があります。
開発/デバッグツール(adb、Eclipse、Android studio)からインストール
デバッグツールからapkをインストールし、adb install
を直接呼び出すか、Eclipse/Androidスタジオから、apkを読み取りおよび書き込み可能なパブリックディレクトリ(通常はadb Push
)に転送します(/data/local/tmp/
)。その後、ツールはpm
コマンドを使用してインストールし、インストールが成功すると/data/local/tmp/
の一時apkを削除します。
これらの情報は、次のようなデバッグ出力から取得できます。
$ adb install bin/TestApplication.apk
3155 KB/s (843375 bytes in 0.260s)
pkg: /data/local/tmp/TestApplication.apk
Success
システムがapkを保持する方法
もちろん、システムはすべてのapkをどこかに保存する必要があります。システムがapkを異なるタイプのapkの基本に保つための3つの場所があります。
それらは通常、システム実行用のコアアプリやGoogleサービスなど、製造元によってデバイスに同梱されています。これらは、ディレクトリ/system/app
および/system/priv-app
にあります。
ほとんどのapkはこのカテゴリに分類されます。これらのapkは通常、ユーザーによって、またはadb install
オプションなしの-s
によってマーケットプレイスからインストールされます。それらは、ルート化されたデバイスの/data/app
ディレクトリの下にあります。
ApkがマニフェストにAndroid:installLocation="auto"
を含むsdcardのインストール場所を有効にしている場合、システムのアプリマネージャーメニューからアプリをsdcardに移動できます。これらのapkは通常、sdcard /mnt/sdcard/asec
の安全なフォルダーにあります。
インストール場所を強制的にsdcardにする別の方法は、adb install -s apk-to-install.apk
コマンドを使用することです。
注として、プリインストールされたアプリのファイルは、単一の.apk
ファイルにはもうありません。最新のAndroidリリースの/system/app
または/system/priv-app
ディレクトリには、プリインストールされたすべてのアプリのファイルを含むフォルダーがあります。
あなたはADBでアプリを引っ張ることができます。それらは/ data/App /にあります。
adb pull (location on device) (where to save)
あなたはコピー防止されたアプリを引っ張るためにあなたの電話を根絶しなければならないことに注意してください。
あなたが根付いている場合は、アプリのルートエクスプローラをダウンロードしてください。根ざしたユーザーのための最高のファイルマネージャ。とにかく、システム/アプリは携帯電話に付属しているすべてのデフォルトのAPKを持っており、データ/ APKはあなたがインストールしたアプリのすべてのAPKを持っています。 (ルートエクスプローラで)あなたが望むapkを長押しするだけで、あなたの/ sdcardフォルダに移動して貼り付けるだけです。
これを使用して、/ data/app /の下にあるすべての.apkをリストします。
adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
あなたはそれらのいずれかから.apksを引き出すことができます:
adb pull/mnt/asec
/ data/appにはコピー防止のためにアクセスできるとは思わない。
.apkファイルは/ data/app /ディレクトリの下にあります。 ESファイルエクスプローラを使用すると、これらの.APKファイルにアクセスできます。
eclipse goto DDMSを使用していて、そこにファイルエクスプローラがある場合は、System/Appsフォルダとapksがあります。
私のアプリをエミュレータにインストールした時、私の.apkファイルは
data/appそれからls data/app //を使ってそれが存在するかどうかを確かめた。
あなたがあなたのアプリをインストールした後にちょうどシェルを介してlsコマンドを使用して、所望のディレクトリをチェックしてください、しかしそれはあなたがどんな種類のアプリケーションをインストールしようとしているかによって異なります。私はこの方法を使って インストール 何か問題があればポイントします。
あなたが見つけることができないapk
sを得るためのもう一つの方法は、根ざしたデバイスでrom tool boxを使うことです。
アプリマネージャを使用してバックアップを作成してからstorage/emulated/appmanager
に移動し、システムアプリのバックアップまたはユーザーアプリのバックアップのいずれかを確認します。
apk
を見つけるには、PlayストアからBluetooth App Senderをダウンロードしてインストールします。インストールが完了したら、Bluetooth App Senderを開きます。それはあなたのデバイスにインストールされているすべてのアプリ(.apk)
を表示します、そしてあなたは簡単にBluetoothを通してあなたのPCにアプリを転送することができます。
選択した答えに書かれているものとは対照的に、ルートは必要ありません。インストールされたアプリのAPKを取得することができます。これはアプリで行った方法です( here )。例:
List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);
次に、リストの各項目について、packageInfo.applicationInfo.sourceDirにアクセスできます。これは、インストール済みアプリのAPKの完全パスです。
さて、私はこの記事にたどり着きました。気に入ったアプリを再インストールしたいからです。このような場合は、Google Playにアクセスし、[マイアプリ]、[すべて]タブの順に探してください。そうすれば、気に入ったアプリを再インストールすることができます。 1つのアプリを検索しても見つけることができないという問題に直面しましたが、それは私の新しいモバイルに再インストールすることができたので、My appsにありました。