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文件,请执行以下操作:
- 从Google Play获取AirDroid
- 使用AirDroid从您的PCnetworking浏览器访问您的手机
- 转到应用程序并select已安装的应用程序
- 点击“下载”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基本上保持不变。
- 为股票应用程序
这些通常是由设备制造出货,包括系统运行和谷歌服务的核心应用程序,你可以find目录/system/app
和/system/priv-app
。
- 用户已安装的应用
大多数apks都属于这个类别。 这些apks通常由用户从市场上安装,或者通过adb install
没有-s
选项。 您可以在根目录设备的/data/app
目录下find它们。
- 在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,但它在我的应用程序,所以我可以重新安装在我的新手机;)