Android从Marketplace安装应用程序后,是否保留.apk文件?
Android是否会保留这些文件的标准位置?
答案 0 :(得分:115)
预安装的应用程序位于/system/app
文件夹中。用户安装的应用程序位于/data/app
。我想你不能访问,除非你有一个root电话。
我这里没有root手机,但请尝试使用此代码:
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]);
}
}
它确实列出了我的root htc magic和emu中的apks。
答案 1 :(得分:104)
您可以使用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
答案 2 :(得分:91)
如果您只想获取之前安装的某个APK文件,请执行以下操作:
您无需拔出手机,使用adb
或撰写任何内容。
答案 3 :(得分:25)
没有标准位置,但您可以使用PackageManager查找有关软件包的信息,您可以从中获取有关特定软件包的各种信息的ApplicationInfo类:其.apk的路径,其数据目录的路径,仅限资源.apk的路径(对于正向锁定的应用程序)等。请注意,根据您与其他应用程序的关系,您可能有也可能没有权限阅读这些目录;但是,所有应用程序都能够读取资源.apk(这也是非正向锁定应用程序的真正.apk)。
如果您只是在shell中浏览,目前非正向锁定的应用程序位于/data/app/.apk中。 shell用户可以读取特定的.apk,但它无法列出目录。在将来的版本中,命名约定会稍微改变,所以不要指望它保持不变,但如果你从包管理器获得.apk的路径,那么你可以在shell中使用它。
答案 4 :(得分:17)
预安装的应用通常位于/ 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
}
您还可以找到可提供此类信息的应用。它们很多。 Try this one (AppSender).
答案 5 :(得分:8)
如果您正在寻找特定应用的路径,那么快速而肮脏的解决方案就是只关注错误报告:
$ adb bugreport | grep 'dir=/data/app'
我不知道这会提供详尽的列表,因此首先运行该应用可能会有所帮助。
答案 6 :(得分:7)
您可以使用ADB提取应用。它们在/ data / App /中,我相信。
adb pull (location on device) (where to save)
请注意,您必须将手机设为root用户才能获取受版权保护的应用。
答案 7 :(得分:7)
从市场安装
市场的行为是否在安装后保留apk。安装后Google Play不会保留apk。其他第三方市场可能会有不同的行为。
从开发/调试工具安装(adb,eclipse,android studio)
当我们从调试工具安装apk时,直接调用hunterp$ file dinkle
dinkle: Mach-O universal binary with 2 architectures
dinkle (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
dinkle (for architecture arm64): Mach-O 64-bit dynamically linked shared library
或从eclipse / android studio安装apk,apk将被转移(adb install
)到公共可读写目录,通常是{{1 }}。之后,该工具将使用adb push
命令进行安装,它将在成功安装后删除/data/local/tmp/
中的临时apk。
我们可以从调试输出中获取这些信息,如下所示。
pm
系统如何保留apk
当然系统必须在某处存储所有apks。系统有三个地方可以保持apks基本不同类型的apks。
这些通常由制造商提供,包括用于系统运行的核心应用和谷歌服务,您可以在目录/data/local/tmp/
和$ adb install bin/TestApplication.apk
3155 KB/s (843375 bytes in 0.260s)
pkg: /data/local/tmp/TestApplication.apk
Success
下找到它们。
大多数apks属于这一类。这些apks通常由用户在市场上安装,或者/system/app
没有/system/priv-app
选项安装。您可以在目录adb install
下找到它们,以获取有根设备。
如果apk在其清单中的-s
的sdcard中启用其安装位置,则可以将该应用从系统的应用程序管理器菜单移至sdcard。这些apk通常位于sdcard /data/app
的安全文件夹中。
强制安装位置到SD卡的另一种方法是使用命令android:installLocation="auto"
。
请注意,预安装应用的文件不再位于单个/mnt/sdcard/asec
文件中。对于最新的Android发行版,目录adb install -s apk-to-install.apk
或.apk
中的每个预安装应用都有一个文件夹。
答案 8 :(得分:4)
如果您是root用户,请下载应用程序Root Explorer。 root用户的最佳文件管理器。 无论如何,System / app具有手机附带的所有默认apks,而data / apk包含您已安装的应用程序的所有apks。只需长按你想要的apk(在Root Explorer中),转到你的/ sdcard文件夹然后粘贴。
答案 9 :(得分:3)
使用此列出/ data / app /
下的所有.apksadb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
答案 10 :(得分:3)
在/ data / app中,但对于复制保护,我认为您无法访问它。
答案 11 :(得分:3)
你可以从任何一个中提取.apks:
adb pull / mnt / asec
答案 12 :(得分:1)
如果您正在使用eclipse转到DDMS,然后在那里使用文件资源管理器,您将看到System / Apps文件夹并且apks在那里
答案 13 :(得分:1)
.apk文件可以位于/ data / app /目录下。使用 ES文件资源管理器,我们可以访问这些.APK文件。
答案 14 :(得分:0)
获取apk
的另一种方法是在root设备上找不到 rom工具箱。
使用应用管理器进行备份,然后转到storage/emulated/appmanager
并选中系统应用备份或用户应用备份。
答案 15 :(得分:0)
要查找apk
,请从Play商店下载并安装蓝牙应用发件人。安装完成后,打开蓝牙应用程序发件人。它会显示设备中安装的所有应用(.apk)
,然后您可以通过蓝牙轻松将应用转移到PC。
答案 16 :(得分:0)
当我在模拟器上安装我的应用程序时,它在
中显示了我的.apk文件数据/应用 然后我用了 ls data / app //查看它是否存在或 不
安装应用程序后,只需使用ls命令vie shell并检查所需的目录,但这取决于您尝试安装的应用程序类型。我用这种方法Install 指出任何事情是错的。
答案 17 :(得分:0)
与在所选答案上写的内容相反,您不需要root,并且可以获取已安装应用的APK,这就是我在我的app(here)。例如:
List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);
然后,对于列表中的每个项目,您可以访问 packageInfo.applicationInfo.sourceDir ,这是已安装应用的APK的完整路径。
答案 18 :(得分:0)
我来这篇帖子是因为我想重新安装一些我非常喜欢的应用程序。 如果是这种情况,只需转到Google Play,然后查找“我的应用”,“所有”标签,您就会找到一种方法来重新安装一些您喜欢的应用。我遇到了一个问题,我找不到搜索一个应用程序,但它在我的应用程序中,所以我可以重新安装在我的新手机;)