Android是否保留.apk文件? 如果是这样的话?

Android从市场安装应用程序后,它保持.apk文件?

Android有没有一个标准的位置来保存这些文件?

预安装的应用程序位于/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魔术和em ap中的apks。

如果您只想获取之前安装的某个APK文件,请执行以下操作:

  1. 从Google Play获取AirDroid
  2. 使用AirDroid从您的PCnetworking浏览器访问您的手机
  3. 转到应用程序并select已安装的应用程序
  4. 点击“下载”button,从您的手机下载这个应用程序的APK版本

你不需要根植你的手机,使用adb ,或写任何东西。

您可以使用包pipe理器( pm )而不是adb shell来列出软件包:

 adb shell pm list packages 

并显示.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 

没有标准的位置,但是你可以使用PackageManager来查找软件包,并且你可以从那里得到的ApplicationInfo类有关于特定软件包的各种信息:.apk的path,数据目录的path,path到资源专用的.apk(用于转发locking的应用程序)等。请注意,您可能有权或没有权限阅读这些目录,这取决于您与其他应用程序的关系; 然而,所有的应用程序都能够读取资源.apk(这也是非前向locking应用程序的真正的.apk)。

如果你只是在shell中寻找,目前非转发locking的应用程序位于/data/app/.apk。 shell用户可以读取特定的.apk文件,但不能列出目录。 在将来的版本中,命名约定会稍微改变,所以不要指望它保持不变,但是如果你从包pipe理器中得到.apk的path,那么你可以在shell中使用它。

预安装的应用程序通常位于/ system / app中,用户安装的应用程序位于/ data / app中。

你可以使用“adb pull”,但是你需要知道APK文件的完整path。 在模拟器上,您可以使用“adb shell”+“ls”来获取目录列表。 但是在Android设备上,由于安全原因,您将无法在“/ data”文件夹中执行此操作。 那么如何弄清楚APK文件的完整path呢?

您可以通过编写查询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 } 

你也可以find将提供这样的信息的应用程序。 有很多。 试试这个(AppSender)。

如果你正在寻找一个特定的应用程序的path,一个快速和肮脏的解决scheme是只grep错误报告:

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

我不知道这将提供一个详尽的清单,所以它可能有助于首先运行的应用程序。

您可以使用ADB提取应用程序。 他们在/ data / App /中,我相信。

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

请注意,您必须根据您的手机提取受版权保护的应用程序。

从市场安装

安装后是否保留apk是市场的行为。 安装后,Google Play不会保留apk。 其他第三方市场可能会有不同的行为。

从开发/debugging工具安装(adb,eclipse,android studio)

当我们从debugging工具安装apk时,直接调用adb install或从eclipse / android studio中,apk将被传输( adb push )到公共可读写目录,通常是/data/local/tmp/ 。 之后,工具将使用pm命令进行安装,安装成功后会删除/data/local/tmp/的临时apk。

我们可以从下面的debugging输出中获得这些信息。

 $ adb install bin/TestApplication.apk 3155 KB/s (843375 bytes in 0.260s) pkg: /data/local/tmp/TestApplication.apk Success 

系统如何保持apk

当然系统必须存储所有的地方。 系统有三个地方让不同types的apks基本上保持不变。

  1. 为股票应用程序

这些通常是由设备制造出货,包括系统运行和谷歌服务的核心应用程序,你可以find目录/system/app/system/priv-app

  1. 用户已安装的应用

大多数apks都属于这个类别。 这些apks通常由用户从市场上安装,或者通过adb install没有-s选项。 您可以在根目录设备的/data/app目录下find它们。

  1. 在SD卡上的应用程序

如果apk在其清单中使用android:installLocation="auto"在sdcard中启用安装位置,则应用程序可以从系统的应用程序pipe理器菜单移动到sdcard。 这些apks通常位于sdcard /mnt/sdcard/asec安全文件夹中。

另一种强制安装位置到SD卡的方法是使用命令adb install -s apk-to-install.apk

请注意,预安装应用程序的文件不再包含在单个.apk文件中。 有一个文件夹包含目录/system/app/system/priv-app中最新的android版本中每个预装应用程序的文件。

如果你是植根,下载应用程序的根资源pipe理器。 最好的文件pipe理器为根用户。 无论如何,系统/应用程序具有所有的手机随附的默认apks,数据/ apk包含所有已安装的应用程序。 只需长按你想要的apk(在Root Explorer中),进入你的/ sdcard文件夹,然后粘贴。

在/数据/应用程序,但复制保护我不认为你可以访问它。

使用这个来列出/ data / app /

 adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4 
  • 数据/应用
  • 系统/应用
  • 系统/ PRIV应用内
  • mnt / asec(安装在SD卡上时)

你可以从任何一个拉动.apks:

adb pull / mnt / asec

如果你正在使用eclipse转到DDMS,然后在文件浏览器那里你会看到系统/应用程序文件夹和apks在那里

.apk文件可以位于/ data / app /目录下。 使用ES文件资源pipe理器,我们可以访问这些.APK文件。

当我在模拟器上安装我的应用程序时,它显示了我的.apk文件

数据/应用程序然后我用ls数据/应用程序/ /看看它是否存在或不

安装你的应用程序后,只需使用ls命令vie shell并检查所需的目录,但这取决于你试图安装什么样的应用程序。 如果有任何错误,我使用这个方法来安装点。

另一种获取apk的方法是无法find的,在根设备上是使用ROM工具箱

使用应用程序pipe理器进行备份,然后转到storage/emulated/appmanager并检查系统应用程序备份用户应用程序备份

要find一个apk ,请从Play商店下载并安装蓝牙应用程序发件人。 一旦安装完成,打开蓝牙应用程序发件人。 它会显示您的设备中安装的所有应用程序(.apk) ,然后您可以轻松地通过蓝牙将应用程序传输到您的PC。

与所选答案上的内容相反,您不需要root,可以获取已安装应用程序的APK,这就是我在应用程序( 这里 )中完成的。 例:

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

然后,对于列表中的每个项目,都可以访问packageInfo.applicationInfo.sourceDir ,它是已安装应用程序的APK的完整path。

那么我来到这个职位,因为我想重新安装一些我喜欢的应用程序。 如果是这种情况,只需进入Google Play,然后查找“我的应用程序”,选项卡“全部”,然后您将find重新安装您喜欢的某个应用程序的方法。 我面临一个问题,我无法通过search一个应用程序find,但它在我的应用程序,所以我可以重新安装在我的新手机;)