android从Marketplace安装应用程序后,是否保留.apk文件?
是否有标准位置Android将保留此类文件?
如果您正在寻找特定应用程序的路径,那么快速而肮脏的解决方案就是grep the bugreport:
$ adb bugreport | grep 'dir=/data/app'
我不知道这会提供详尽的列表,因此可能有助于首先运行该应用程序 .
您可以使用ADB拉取应用程序 . 他们在/ data / App /,我相信 .
adb pull (location on device) (where to save)
请注意,您必须将手机设为root用户才能获取受版权保护的应用 .
预安装的应用程序位于 /system/app 文件夹中 . 用户安装的应用程序位于 /data/app 中 . 我想你可以在这里使用root手机,但试试这个代码:
/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]); } }
它确实列出了我的root htc魔法和emu中的apks .
您可以使用包管理器( pm )而不是 adb shell 来列出包:
pm
adb shell
adb shell pm list packages | sort
并显示 .apk 文件的位置:
.apk
adb shell pm path com.king.candycrushsaga package:/data/app/com.king.candycrushsaga-1/base.apk
并 adb pull 下载apk .
adb pull
adb pull data/app/com.king.candycrushsaga-1/base.apk
如果您只想获得之前安装的APK文件,请执行以下操作:
从Google Play获取AirDroid
使用AirDroid从PC网络浏览器访问手机
转到应用并选择已安装的应用
点击"download"按钮从手机上下载该应用的APK版本
您不需要root手机,使用 adb 或任何东西 .
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”获取目录列表 . 但是在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).
Install from marketplace
市场的行为是否在安装后保留apk . 安装后Google Play不会保留apk . 其他第三方市场可能会有不同的行为 .
Install from development/debug tool (adb, eclipse, android studio)
当我们从调试工具安装apk,直接调用 adb install 或从eclipse / android studio安装apk时,apk将被转移( adb push )到公共可读写目录,通常是 /data/local/tmp/ . 之后,该工具将使用 pm 命令进行安装,它将在成功安装后删除 /data/local/tmp/ 中的临时apk .
adb install
adb push
/data/local/tmp/
我们可以从调试输出中获取这些信息,如下所示 .
$ adb install bin/TestApplication.apk 3155 KB/s (843375 bytes in 0.260s) pkg: /data/local/tmp/TestApplication.apk Success
How system keeps the apk
当然系统必须在某处存储所有apks . 系统有三个位置可以保持apks基本不同类型的apks .
这些通常是按制造商的设备发货,包括用于系统运行和谷歌服务的核心应用程序,您可以在目录 /system/app 和 /system/priv-app 下找到它们 .
/system/priv-app
大多数apks属于这一类 . 这些apks通常由用户在市场上安装,或者在没有 -s 选项的情况下由 adb install 安装 . 您可以在目录 /data/app 下找到它们以获取有根设备 .
-s
sdcard上的
如果apk在其清单中使用 android:installLocation="auto" 在sdcard中启用其安装位置,则可以将该应用程序从系统的应用程序管理器移至sdcard菜单 . 这些apks通常位于sdcard /mnt/sdcard/asec 的安全文件夹中 .
android:installLocation="auto"
/mnt/sdcard/asec
另一种强制安装位置为sdcard的方法是使用命令 adb install -s apk-to-install.apk .
adb install -s apk-to-install.apk
请注意,预安装应用程序的文件不再位于单个 .apk 文件中 . 有一个文件夹,其中包含最新Android版本目录 /system/app 或 /system/priv-app 中每个预安装应用程序的文件 .
如果您是root用户,请下载应用程序Root Explorer . root用户的最佳文件管理器 . 无论如何,System / app具有手机附带的所有默认apks,而data / apk包含您已安装的应用程序的所有apks . 只需长按你想要的apk(在Root Explorer中),转到你的/ sdcard文件夹然后粘贴 .
在/ data / app中,但对于复制保护,我认为您无法访问它 .
用它来列出/ data / app /下的所有.apks
adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
data / app
system / app
system / priv-app
mnt / asec(安装在SD卡中时)
你可以从任何一个中提取.apks:
adb pull / mnt / asec
如果您正在使用eclipse goto DDMS然后在那里存档资源管理器,您将看到System / Apps文件夹,而apks就在那里
.apk文件可以位于/ data / app /目录下 . 使用 ES File Explorer ,我们可以访问这些.APK文件 .
当我在模拟器上安装我的应用程序时,它显示我的.apk文件
data / app然后我使用ls data / app //查看它是否存在
安装应用程序后,只需使用ls命令vie shell并检查所需的目录,但这取决于您尝试安装的应用程序类型 . 如果有任何问题,我用这个方法Install点 .
在root设备上获取 apk 的另一种方法是使用 rom tool box .
apk
使用应用管理器进行备份,然后转到 storage/emulated/appmanager 并检查 system app backup 或 user app backup .
storage/emulated/appmanager
要查找 apk ,请从Play商店下载并安装Bluetooth App Sender . 安装完成后,打开蓝牙应用程序发件人 . 它将显示设备中安装的所有应用程序 (.apk) ,然后您可以通过蓝牙轻松将应用程序传输到PC .
(.apk)
与's written on the chosen answer, you don'需要root相反,可以获取已安装应用的APK,这就是我在我的应用上完成它的方式(here) . 例:
List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);
然后,对于列表中的每个项目,您可以访问 packageInfo.applicationInfo.sourceDir ,这是已安装应用程序的APK的完整路径 .
好吧,我来到这篇文章是因为我想重新安装一些我非常喜欢的应用程序 . 如果是这种情况,只需转到Google Play,然后查找“我的应用”,“所有”标签,您就会找到一种方法来重新安装一些您喜欢的应用 . 我遇到了一个问题,我找不到搜索一个应用程序,但它在我的应用程序中,所以我可以重新安装在我的新手机;)
19 回答
如果您正在寻找特定应用程序的路径,那么快速而肮脏的解决方案就是grep the bugreport:
我不知道这会提供详尽的列表,因此可能有助于首先运行该应用程序 .
您可以使用ADB拉取应用程序 . 他们在/ data / App /,我相信 .
请注意,您必须将手机设为root用户才能获取受版权保护的应用 .
预安装的应用程序位于
/system/app
文件夹中 . 用户安装的应用程序位于/data/app
中 . 我想你可以在这里使用root手机,但试试这个代码:它确实列出了我的root htc魔法和emu中的apks .
您可以使用包管理器(
pm
)而不是adb shell
来列出包:并显示
.apk
文件的位置:并
adb pull
下载apk .如果您只想获得之前安装的APK文件,请执行以下操作:
从Google Play获取AirDroid
使用AirDroid从PC网络浏览器访问手机
转到应用并选择已安装的应用
点击"download"按钮从手机上下载该应用的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”获取目录列表 . 但是在Android设备上,由于安全原因,您将无法在“/ data”文件夹中执行此操作 . 那你怎么弄清楚APK文件的完整路径?
您可以通过编写查询PackageManager的程序来获取所有安装的应用程序的完整列表 . 下面的简短代码片段:
您还可以找到可提供此类信息的应用 . 它们很多 . Try this one (AppSender).
Install from marketplace
市场的行为是否在安装后保留apk . 安装后Google Play不会保留apk . 其他第三方市场可能会有不同的行为 .
Install from development/debug tool (adb, eclipse, android studio)
当我们从调试工具安装apk,直接调用
adb install
或从eclipse / android studio安装apk时,apk将被转移(adb push
)到公共可读写目录,通常是/data/local/tmp/
. 之后,该工具将使用pm
命令进行安装,它将在成功安装后删除/data/local/tmp/
中的临时apk .我们可以从调试输出中获取这些信息,如下所示 .
How system keeps the apk
当然系统必须在某处存储所有apks . 系统有三个位置可以保持apks基本不同类型的apks .
这些通常是按制造商的设备发货,包括用于系统运行和谷歌服务的核心应用程序,您可以在目录
/system/app
和/system/priv-app
下找到它们 .大多数apks属于这一类 . 这些apks通常由用户在市场上安装,或者在没有
-s
选项的情况下由adb install
安装 . 您可以在目录/data/app
下找到它们以获取有根设备 .sdcard上的
如果apk在其清单中使用
android:installLocation="auto"
在sdcard中启用其安装位置,则可以将该应用程序从系统的应用程序管理器移至sdcard菜单 . 这些apks通常位于sdcard/mnt/sdcard/asec
的安全文件夹中 .另一种强制安装位置为sdcard的方法是使用命令
adb install -s apk-to-install.apk
.请注意,预安装应用程序的文件不再位于单个
.apk
文件中 . 有一个文件夹,其中包含最新Android版本目录/system/app
或/system/priv-app
中每个预安装应用程序的文件 .如果您是root用户,请下载应用程序Root Explorer . root用户的最佳文件管理器 . 无论如何,System / app具有手机附带的所有默认apks,而data / apk包含您已安装的应用程序的所有apks . 只需长按你想要的apk(在Root Explorer中),转到你的/ sdcard文件夹然后粘贴 .
在/ data / app中,但对于复制保护,我认为您无法访问它 .
用它来列出/ data / app /下的所有.apks
data / app
system / app
system / priv-app
mnt / asec(安装在SD卡中时)
你可以从任何一个中提取.apks:
如果您正在使用eclipse goto DDMS然后在那里存档资源管理器,您将看到System / Apps文件夹,而apks就在那里
.apk文件可以位于/ data / app /目录下 . 使用 ES File Explorer ,我们可以访问这些.APK文件 .
当我在模拟器上安装我的应用程序时,它显示我的.apk文件
安装应用程序后,只需使用ls命令vie shell并检查所需的目录,但这取决于您尝试安装的应用程序类型 . 如果有任何问题,我用这个方法Install点 .
在root设备上获取
apk
的另一种方法是使用 rom tool box .使用应用管理器进行备份,然后转到
storage/emulated/appmanager
并检查 system app backup 或 user app backup .要查找
apk
,请从Play商店下载并安装Bluetooth App Sender . 安装完成后,打开蓝牙应用程序发件人 . 它将显示设备中安装的所有应用程序(.apk)
,然后您可以通过蓝牙轻松将应用程序传输到PC .与's written on the chosen answer, you don'需要root相反,可以获取已安装应用的APK,这就是我在我的应用上完成它的方式(here) . 例:
然后,对于列表中的每个项目,您可以访问 packageInfo.applicationInfo.sourceDir ,这是已安装应用程序的APK的完整路径 .
好吧,我来到这篇文章是因为我想重新安装一些我非常喜欢的应用程序 . 如果是这种情况,只需转到Google Play,然后查找“我的应用”,“所有”标签,您就会找到一种方法来重新安装一些您喜欢的应用 . 我遇到了一个问题,我找不到搜索一个应用程序,但它在我的应用程序中,所以我可以重新安装在我的新手机;)