Mar*_*mro 125
您可以使用package manager(pm)adb shell来列出包:
adb shell pm list packages | sort
Run Code Online (Sandbox Code Playgroud)
并显示.apk文件的位置:
adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk
Run Code Online (Sandbox Code Playgroud)
并adb pull下载apk.
adb pull data/app/com.king.candycrushsaga-1/base.apk
Run Code Online (Sandbox Code Playgroud)
Mac*_*rse 118
预安装的应用程序位于/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]);
}
}
Run Code Online (Sandbox Code Playgroud)
它确实列出了我的root htc魔法和emu中的apks.
小智 91
如果您只想获得之前安装的APK文件,请执行以下操作:
您无需使用手机,使用adb或编写任何内容.
hac*_*bod 25
没有标准位置,但是您可以使用PackageManager来查找有关包的信息,您可以从中获取ApplicationInfo类,其中包含有关特定包的各种信息:.apk的路径,数据目录的路径,路径到资源专用.apk(对于转发锁定的应用程序)等.请注意,根据您与其他应用程序的关系,您可能有也可能没有权限阅读这些目录; 但是,所有应用程序都能够读取资源.apk(这也是非正向锁定应用程序的真正.apk).
如果您只是在shell中浏览,目前非转发锁定的应用程序位于/data/app/.apk中.shell用户可以读取特定的.apk,但它无法列出目录.在将来的版本中,命名约定会稍微改变,所以不要指望它保持不变,但是如果你从包管理器获得.apk的路径,那么你可以在shell中使用它.
小智 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
}
Run Code Online (Sandbox Code Playgroud)
您还可以找到可提供此类信息的应用.它们很多. 试试这个(AppSender).
如果您正在寻找特定应用程序的路径,那么快速而肮脏的解决方案就是grep the bugreport:
$ adb bugreport | grep 'dir=/data/app'
Run Code Online (Sandbox Code Playgroud)
我不知道这会提供详尽的列表,因此可能有助于首先运行该应用程序.
您可以使用ADB拉取应用程序.他们在/ data/App /,我相信.
adb pull (location on device) (where to save)
Run Code Online (Sandbox Code Playgroud)
请注意,您必须将手机设为root用户才能获取受版权保护的应用.
从市场安装
市场的行为是否在安装后保留apk.安装后Google Play不会保留apk.其他第三方市场可能会有不同的行为.
从开发/调试工具安装(adb,eclipse,android studio)
当我们从调试工具安装apk,直接调用adb install或从eclipse/android studio安装apk时adb push,通常会将apk传送到公共可读和可写目录/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
Run Code Online (Sandbox Code Playgroud)
系统如何保持apk
当然系统必须在某处存储所有apks.系统有三个位置可以保持apks基本不同类型的apks.
这些被制造的设备通常都是,包括系统运行和谷歌服务的核心应用程序,你可以在目录中找到它们/system/app和/system/priv-app.
大多数apks属于这一类.这些apks通常由用户在市场上安装或adb install无需-s选择.您可以在/data/app根目录设备的目录下找到它们.
如果apk android:installLocation="auto"在其清单中的sdcard中启用其安装位置,则可以从系统的应用程序管理器菜单将应用程序移动到SD卡.这些apks通常位于sdcard的安全文件夹中/mnt/sdcard/asec.
另一种强制安装位置为sdcard的方法是使用该命令adb install -s apk-to-install.apk.
请注意,预安装应用程序的.apk文件不再包含在单个文件中.有一个文件夹包含目录中每个预安装应用程序/system/app或/system/priv-app最新Android版本的文件.
小智 5
如果您已 root,请下载应用程序 Root Explorer。根用户的最佳文件管理器。无论如何,系统/应用程序拥有手机附带的所有默认apk,而数据/应用程序拥有您已安装的应用程序的所有apk。只需长按您想要的 apk(在 Root Explorer 中),进入您的 /sdcard 文件夹并粘贴即可。
| 归档时间: |
|
| 查看次数: |
405125 次 |
| 最近记录: |