web-dev-qa-db-ja.com

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

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

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

174
Gubatron

プレインストールされたアプリケーションは/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をリストします。

115
Macarse

パッケージを一覧表示するには、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
106
Mariusz Jamro

以前にインストールしたもののAPKファイルを入手したいだけの場合は、次の手順を実行します。

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

あなたはあなたの電話を根絶する必要はありません、adbを使用すること、または何かを書くこと。

91
Jan Przybylo

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

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

25
hackbod

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

17
xmaslatte

特定のアプリのパスを探しているなら、迅速で汚い解決策はただバグレポートをgrepすることです:

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

これが網羅的なリストを提供することを私は知りません、それでそれは最初にアプリを走らせるのを助けるかもしれません。

8
tomwhipple

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

インストール後に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つの場所があります。

  1. ストックアプリ用

それらは通常、システム実行用のコアアプリやGoogleサービスなど、製造元によってデバイスに同梱されています。これらは、ディレクトリ/system/appおよび/system/priv-appにあります。

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

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

  1. sDカード上のアプリ

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ディレクトリには、プリインストールされたすべてのアプリのファイルを含むフォルダーがあります。

7
alijandro

あなたはADBでアプリを引っ張ることができます。それらは/ data/App /にあります。

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

あなたはコピー防止されたアプリを引っ張るためにあなたの電話を根絶しなければならないことに注意してください。

7
Bryan Denny

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

4
Tanzer

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

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
3
gilm
  • データ/アプリ
  • システム/アプリ
  • システム/ priv-app
  • mnt/asec(SDカードにインストールされている場合)

あなたはそれらのいずれかから.apksを引き出すことができます:

adb pull/mnt/asec

3
Ignorante

/ data/appにはコピー防止のためにアクセスできるとは思わない。

3
Robby Pond

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

2
vgokul129

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

1
Jawad Amjad

私のアプリをエミュレータにインストールした時、私の.apkファイルは

data/appそれからls data/app //を使ってそれが存在するかどうかを確かめた。

あなたがあなたのアプリをインストールした後にちょうどシェルを介してlsコマンドを使用して、所望のディレクトリをチェックしてください、しかしそれはあなたがどんな種類のアプリケーションをインストールしようとしているかによって異なります。私はこの方法を使って インストール 何か問題があればポイントします。

0
DeAviator

あなたが見つけることができないapksを得るためのもう一つの方法は、根ざしたデバイスでrom tool boxを使うことです。

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

0
load

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

0
Prem

選択した答えに書かれているものとは対照的に、ルートは必要ありません。インストールされたアプリのAPKを取得することができます。これはアプリで行った方法です( here )。例:

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

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

0

さて、私はこの記事にたどり着きました。気に入ったアプリを再インストールしたいからです。このような場合は、Google Playにアクセスし、[マイアプリ]、[すべて]タブの順に探してください。そうすれば、気に入ったアプリを再インストールすることができます。 1つのアプリを検索しても見つけることができないという問題に直面しましたが、それは私の新しいモバイルに再インストールすることができたので、My appsにありました。

0
Sergio Abreu