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 魔法和 emu 中的 apk。
如果您只想获取之前安装的 APK 文件,请执行以下操作:
你不需要root你的手机,使用adb
,或写任何东西。
没有标准位置,但是您可以使用 PackageManager 来查找有关包的信息,并且您可以从那里获得的 ApplicationInfo 类包含有关特定包的各种信息:其 .apk 的路径、其数据目录的路径、路径到仅资源的 .apk(用于前向锁定的应用程序)等。请注意,您可能有权也可能没有权限读取这些目录,具体取决于您与其他应用程序的关系;但是,所有应用程序都能够读取资源 .apk(对于非前向锁定应用程序来说,这也是真正的 .apk)。
如果您只是在 shell 中闲逛,当前非前向锁定的应用程序位于 /data/app/.apk 中。shell 用户可以读取特定的.apk,但它不能列出目录。在未来的版本中,命名约定会稍微改变,所以不要指望它保持不变,但是如果你从包管理器中获得 .apk 的路径,那么你可以在 shell 中使用它。
预装应用程序通常位于 /system/app 中,用户安装的应用程序位于 /data/app 中。
您可以使用“adb pull”,但您需要知道 APK 文件的完整路径。在模拟器上,您可以使用“adb shell”+“ls”获取目录列表。但在安卓设备上,由于安全原因,您将无法在“/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是市场的行为。安装后谷歌播放不保留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 保存在三个地方:
股票应用
这些通常由制造商在设备中发货,包括用于系统运行的核心应用程序和谷歌服务,您可以在目录/system/app
和/system/priv-app
.
用户安装的应用
大多数apk都属于这一类。这些 apk 通常由用户从市场安装或adb install
不带-s
选项安装。/data/app
您可以在根设备的目录下找到它们。
SD卡上的应用
android:installLocation="auto"
如果 apk在其清单中启用其在 sdcard 中的安装位置,则可以将应用程序从系统的应用程序管理器菜单移动到 sdcard。这些 apk 通常位于 sdcard 的安全文件夹中/mnt/sdcard/asec
。
强制安装位置到 sdcard 的另一种方法是使用命令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)
请注意,您必须 root 手机才能提取受版权保护的应用程序。
在 /data/app 但出于复制保护,我认为您无法访问它。
如果您是 Root 用户,请下载应用程序 Root Explorer。根用户的最佳文件管理器。无论如何,System/app 拥有手机自带的所有默认 apk,data/apk 拥有你已安装应用的所有 apk。只需长按您想要的 apk(在根资源管理器中),进入您的 /sdcard 文件夹并粘贴。
使用它来列出 /data/app/ 下的所有 .apks
adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
您可以从其中任何一个中提取 .apks:
adb 拉 /mnt/asec
.apk 文件可以位于 /data/app/ 目录下。使用ES File Explorer,我们可以访问这些 .APK 文件。
如果你使用 eclipse goto DDMS 然后文件资源管理器在那里你会看到 System/Apps 文件夹和 apk 在那里
当我在模拟器上安装我的应用程序时,它显示了我的 .apk 文件
data/app 然后我用 ls data/app //查看是否存在
安装应用程序后,只需使用 ls 命令 vie shell 并检查所需目录,但这取决于您尝试安装的应用程序类型。 如果有任何问题,我使用此方法安装点。
apk
在有根设备上获取找不到的 s 的另一种方法是使用rom tool box。
使用应用程序管理器进行备份,然后转到storage/emulated/appmanager
并检查系统应用程序备份或用户应用程序备份。
要查找apk
,请从 Play 商店下载并安装蓝牙 App Sender。安装完成后,打开蓝牙 App Sender。它将显示(.apk)
您设备中安装的所有应用程序,然后您可以通过蓝牙轻松地将应用程序传输到您的 PC。
与所选答案上所写的相反,您不需要 root,并且可以获得已安装应用程序的 APK,这就是我在我的应用程序上完成的方式(此处)。例子:
List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);
然后,对于列表中的每一项,您都可以访问packageInfo.applicationInfo.sourceDir,这是已安装应用的 APK 的完整路径。
好吧,我来这篇文章是因为我想重新安装一些我非常喜欢的应用程序。如果是这种情况,只需转到 Google Play,然后查找“我的应用程序”、“全部”选项卡,您就会找到一种方法来重新安装您喜欢的某些应用程序。我遇到了一个通过搜索一个应用程序找不到的问题,但它在我的应用程序中,所以我可以在我的新手机中重新安装;)