Androidは.apkファイルを保持しますか?もしそうならどこ?


187

Androidがマーケットプレイスからアプリケーションをインストールした後、それは.apkファイルを保持しますか?

Androidがそのようなファイルを保持する標準の場所はありますか?

回答:


125

プレインストールされたアプリケーションは/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マジックとemuにapkをリストします。


これは、モトローラドロイドのチャームのように機能しました。
グバトロン


私はそれらを読んで、彼らと一緒に物事をやりたいと思っています。幸い、それらは読みやすいです。
Gubatron

3
良い点は、ファイルが「リスト可能」であるだけでなく、読み取りも可能であるため、私の目的に合うことです。
Gubatron

/ data / appのAPKはPlayストアからダウンロードされたアプリにのみ対応することを他の場所で読みました。それは正しいですか、それともユーザーがインストールしたものを含んでいますか?
クリスチャン

135

パッケージマネージャー(pm)を使用してパッケージadb shellを一覧表示できます。

adb shell pm list packages | sort

そして、.apkファイルの場所を表示するには:

adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk

そして、adb pullAPKをダウンロードします。

adb pull data/app/com.king.candycrushsaga-1/base.apk

2
すべてのアプリには、パッケージ名と同じ名前のフォルダーがありますが、最後に「-1」または「-2」が付いています。
shadygoneinsane 2017年

ターゲットファイルのパスまたは名前を指定するには、adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
manikanta

95

以前にインストールしたもののAPKファイルを取得する場合は、次のようにします。

  1. Google PlayからAirDroidを入手する
  2. PCのWebブラウザーからAirDroidを使用して電話にアクセスします
  3. アプリに移動し、インストールされているアプリを選択します
  4. [ダウンロード]ボタンをクリックして、このアプリのAPKバージョンを携帯電話からダウンロードします

スマートフォンをルート化したり、を使用adbしたり、何かを記述したりする必要はありません。


2
これは実際には質問に答えないため、反対票を投じました。OPがADBを使用して、デバッグは許可されているが、パスワードを忘れた、または画面が壊れているデバイスで使用できるようにするにはどうすればよいでしょうか。
Hack5

ルート権限を取得されていないデバイスのapkファイルを取得する簡単な方法。
fahmi hammadi 2018年

ありがとう。賛成された原因は、次のように言うことによって質問に答えます:「/ dataにそれらを保持しますが、手順Xを実行した場合のみ」
NTG

26

標準の場所はありませんが、PackageManagerを使用してパッケージについて調べることができます。そこから取得できるApplicationInfoクラスには、特定のパッケージに関するさまざまな情報があります。その.apkへのパス、そのデータディレクトリへのパス、パスリソースのみの.apk(フォワードロックされたアプリの場合)など。他のアプリとの関係に応じて、これらのディレクトリを読み取る権限がある場合とない場合があります。ただし、すべてのアプリはリソース.apkを読み取ることができます(これは、前方ロックされていないアプリの実際の.apkでもあります)。

シェルをざっと見ているだけの場合、現在、前方ロックされていないアプリは/data/app/.apkにあります。シェルユーザーは特定の.apkを読み取ることができますが、ディレクトリをリストすることはできません。将来のリリースでは、命名規則が少し変更される予定なので、同じままにしてはいけませんが、パッケージマネージャーから.apkのパスを取得すれば、シェルで使用できます。


2
「フォワードロックアプリ」とは何ですか?
トニーチャン

1
これは、.apkをインストールして、そのアプリケーションによる読み取りのみを許可する権限で.apkをインストールした古いコピー防止メカニズムです。
12

18

プリインストールされたアプリは通常/ 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)。


9

特定のアプリのパスを探している場合、バグレポートをgrepするだけですばやく簡単に解決できます。

$ adb bugreport | grep 'dir=/data/app' 

これが完全なリストを提供するかどうかはわかりません。そのため、最初にアプリを実行すると役立つ場合があります。


9

マーケットプレイスからインストール

インストール後にapkを保持するかどうかは、マーケットプレイスの動作です。グーグルプレイはインストール後にAPKを保持しません。他のサードパーティマーケットプレイスでは、動作が異なる場合があります。

開発/デバッグツールからインストール(adb、eclipse、android studio)

デバッグツールからapkをインストールするとき、直接呼び出すadb installか、eclipse / android studioから、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つあります。

  1. ストックアプリ用

    これらは通常、システム実行用のコアアプリやgoogleサービスを含め、デバイスごとにデバイスで出荷され、ディレクトリ/system/appおよびで見つけることができます/system/priv-app

  2. ユーザーがインストールしたアプリ

    ほとんどのAPKはこのカテゴリに分類されます。これらのapkは通常、ユーザーによって、またはオプションadb installなしでマーケットプレイスからインストールされ-sます。/data/appルート権限を取得されたデバイスのディレクトリの下にあります。

  3. SDカード上のアプリ

    APK android:installLocation="auto"がマニフェストでsdcard内のインストール場所を有効にすると、システムのアプリマネージャーメニューからアプリをsdcardに移動できます。これらのAPKは通常、SDカードの安全なフォルダにあります/mnt/sdcard/asec

    インストール場所をsdcardに強制する別の方法は、コマンドを使用することadb install -s apk-to-install.apkです。

注意点として、プレインストールされたアプリの.apkファイルは単一のファイルではなくなりました。ディレクトリ内のすべてのプリインストールされたアプリ/system/appまたは/system/priv-app最新のAndroidリリースのファイルを含むフォルダーがあります。


8

ADBでアプリをプルできます。/ data / App /にあると思います。

adb pull (location on device) (where to save)

コピー防止されたアプリをプルするには、スマートフォンをルート化する必要があることに注意してください。


5

/ data / appにありますが、コピー防止のため、アクセスできません。


2
では、Bluetooth経由でAPKを共有できるアプリはどのように機能するのでしょうか。どうやってやっているの?
リトルチャイルド

5

ルート権限を取得している場合は、ルートエクスプローラーアプリをダウンロードしてください。根ざしたユーザーにとって最高のファイルマネージャー。とにかく、システム/アプリには電話に付属のすべてのデフォルトのAPKがあり、データ/ apkにはインストールしたアプリのすべてのAPKがあります。(ルートエクスプローラーで)必要なAPKを長押しし、/ sdcardフォルダーに移動して貼り付けます。


4

これを使用して、/ data / app /の下にあるすべての.apksをリストします

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4

4
  • データ/アプリ
  • システム/アプリ
  • system / priv-app
  • mnt / asec(sdcardにインストールされている場合)

それらのいずれかから.apksをプルできます。

adb pull / mnt / asec


3

.apkファイルは/ data / app /ディレクトリの下にあります。ESファイルエクスプローラーを使用して、これらの.APKファイルにアクセスできます。


2

Eclipse goto DDMSを使用していて、そこにファイルエクスプローラーを使用している場合、System / Appsフォルダーが表示され、apksがそこにあります


0

エミュレータにアプリをインストールすると、.apkファイルが表示されました

data / app次に、ls data / app //を使用して、存在するかどうかを確認しました

アプリをインストールしたら、lsコマンドvie shellを使用して目的のディレクトリを確認しますが、インストールしようとしているアプリケーションの種類によって異なります。 問題がある場合は、この方法を使用してポイントをインストールしました。


私もapkを見つけようとしていますが、私が見つけたのは、すべてのapkを見つけることができないということです。インストールされているすべてのAPKを取得できませんでした。だから、あなたの電話を根絶し、Titanium Backupを使ってすべてのapkを取得し、あなたの電話をより制御する方がいいです
Jawad Amjad、2011年

0

apkルート化されたデバイスで、見つからないs を取得する別の方法は、romツールボックスを使用することです。

アプリマネージャーを使用してバックアップを作成してからstorage/emulated/appmanagerシステムアプリのバックアップまたはユーザーアプリのバックアップに移動して確認します。


0

を見つけるにはapk、PlayストアからBluetooth App Senderをダウンロードしてインストールします。インストールが完了したら、Bluetooth App Senderを開きます。(.apk)デバイスにインストールされているすべてのアプリが表示され、Bluetooth経由でアプリをPCに簡単に転送できます。


0

選ばれた解答に書かれているものとは対照的に、あなたはルートを必要としない、私が(私のアプリでそれをやった方法である、インストールされたアプリのAPKのを取得することが可能であるここ)。例:

List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);

次に、リストの各項目について、packageInfo.applicationInfo.sourceDirにアクセスできます。これは、インストールされているアプリのAPKの完全パスです。


-1

よく気に入ったアプリを再インストールしたかったので、この投稿にアクセスしました。これが当てはまる場合は、Google Playにアクセスし、[マイアプリ]、[すべて]タブを探してください。気に入ったアプリを再インストールする方法が見つかります。1つのアプリを検索しても見つからないという問題に直面しましたが、それは[マイアプリ]にあったため、新しいモバイルに再インストールできました;)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.