Android が Marketplace からアプリケーションをインストールした後、.apk ファイルは保持されますか?
Android がそのようなファイルを保持する標準的な場所はありますか?
Android が Marketplace からアプリケーションをインストールした後、.apk ファイルは保持されますか?
Android がそのようなファイルを保持する標準的な場所はありますか?
パッケージ マネージャー ( 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 pull
、apkをダウンロードします。
adb pull data/app/com.king.candycrushsaga-1/base.apk
プリインストールされたアプリケーションは、/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マジックとエミュのapkをリストします。
以前にインストールしたものの APK ファイルを取得したいだけの場合は、次のようにします。
adb
電話をルート化する必要も、を使用する必要も、何も書く必要もありません。
標準の場所はありませんが、PackageManager を使用してパッケージについて調べることができ、そこから取得できる ApplicationInfo クラスには、特定のパッケージに関するさまざまな情報 (.apk へのパス、データ ディレクトリへのパス、パス) があります。リソースのみの .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)。
マーケットプレイスからインストール
インストール後に apk を保持するかどうかは、マーケットプレイスの動作です。Google Play は、インストール後に apk を保持しません。他のサードパーティのマーケットプレイスでは、動作が異なる場合があります。
開発・デバッグツール(adb、eclipse、android studio)からインストール
デバッグ ツールから直接呼び出すadb install
か、Eclipse/Android Studio から apk をインストールすると、apk はadb push
読み取りおよび書き込み可能なパブリック ディレクトリ (通常は ) に転送 () され/data/local/tmp/
ます。その後、ツールはコマンドを使用してインストールし、インストールが成功した後にpm
一時 apk を削除します。/data/local/tmp/
これらの情報は、次のようなデバッグ出力から取得できます。
$ 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
それらは、ルート化されたデバイスのディレクトリの下にあります。
SD カード上のアプリ
apkandroid:installLocation="auto"
がそのマニフェストで SD カードのインストール場所を有効にすると、システムのアプリ マネージャー メニューからアプリを SD カードに移動できます。これらの apk は通常、sdcard のセキュア フォルダーにあります/mnt/sdcard/asec
。
インストール場所を sdcard に強制するもう 1 つの方法は、コマンドを使用することadb install -s apk-to-install.apk
です。
注意として、プリインストールされたアプリのファイルは、.apk
もはや単一のファイルではありません。/system/app
ディレクトリにプリインストールされているすべてのアプリまたは/system/priv-app
最新の Android リリースのファイルを含むフォルダーがあります。
特定のアプリのパスを探している場合、迅速で汚い解決策は、バグレポートをgrepすることです。
$ adb bugreport | grep 'dir=/data/app'
これが完全なリストを提供するかどうかはわかりませんので、最初にアプリを実行すると役立つ場合があります。
ADB を使用してアプリをプルできます。それらは /data/App/ にあると思います。
adb pull (location on device) (where to save)
コピー保護されたアプリをプルするには、電話をルート化する必要があることに注意してください。
/data/app にありますが、コピー防止のためにアクセスできないと思います。
ルート化されている場合は、アプリ Root Explorer をダウンロードします。ルート化されたユーザーに最適なファイル マネージャー。とにかく、System/app には電話に付属のすべてのデフォルトの apk があり、data/apk にはインストールしたアプリのすべての apk があります。(ルート エクスプローラーで) 必要な apk を長押しし、/sdcard フォルダーに移動して貼り付けます。
それらのいずれかから .apk を取得できます。
adb プル /mnt/asec
これを使用して、/data/app/ の下にあるすべての .apk を一覧表示します
adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
.apk ファイルは /data/app/ ディレクトリの下に配置できます。ES File Explorerを使用して、これらの .APK ファイルにアクセスできます。
Eclipse Goto DDMS を使用してからファイル エクスプローラーを使用している場合は、System/Apps フォルダーが表示され、apk がそこにあります。
を見つけるにはapk
、Play ストアから Bluetooth App Sender をダウンロードしてインストールします。インストールが完了したら、Bluetooth App Sender を開きます。デバイスにインストールされているすべてのアプリが表示(.apk)
され、Bluetooth を介してアプリを PC に簡単に転送できます。
選択した回答に書かれていることとは対照的に、ルートは必要ありません。インストールされているアプリの APK を取得することは可能です。これは、私が自分のアプリで行った方法です (こちら)。例:
List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);
次に、リストの項目ごとに、インストール済みアプリの APK のフル パスであるpackageInfo.applicationInfo.sourceDirにアクセスできます。
apk
root化されたデバイスで見つからないsを取得する別の方法は、 romツールボックスを使用することです。
アプリ マネージャーを使用してバックアップを作成してから、 system app backupまたはuser app backupstorage/emulated/appmanager
に移動して確認します。
エミュレーターにアプリをインストールすると、.apk ファイルが表示されました
data/app 次に、ls data/app //を使用して、存在するかどうかを確認しました
アプリをインストールしたら、シェルで ls コマンドを使用して目的のディレクトリを確認するだけですが、インストールしようとしているアプリケーションの種類によって異なります。 何か問題がある場合は、この方法を使用して Point をインストールしました。
とても気に入ったアプリを再インストールしたかったので、この投稿に来ました。このような場合は、Google Play にアクセスし、[マイ アプリ] タブの [すべて] を探してください。お気に入りのアプリを再インストールする方法が見つかります。1 つのアプリを検索しても見つからないという問題に直面しましたが、それは [マイ アプリ] にあったので、新しいモバイルに再インストールできました ;)