在无根的Android 5 Lollipop设备上移动安装位置


12

我有一个搭载Android 5.02的Moto G(第二代)。内部SD卡约为8Gb,我有一个16GB可用空间的外部SD卡。

从应用程序菜单将应用程序移至SDCARD会将其移至内部SD卡sdcard0。

Adb Shell命令:

pm get-install-location

给我:

0[auto]

我试图通过以下方式设置安装位置:

pm set-install-location 2

但我收到此错误:

Error: java.lang.SecurityException: Package android does not belong to 2000

那就是我认为抱怨root权限。

并且因为它是尝试生产的版本:

adb root

给我:

 adbd cannot run as root in production builds

有什么方法可以设置应用程序将其数据安装到外部SD卡上吗?

PS:我不想安装自定义rom或安装第三方软件来启动手机。

编辑: 我注意到应用程序数据存储在folder中/storage/sdcard0/Android,所以我想到了将该文件夹移动到/storage/sdcard1/并以这种方式创建符号链接的方法:

ln -s /storage/sdcard1/Android /storage/sdcard0/Android

这会做的工作吗?

谢谢。

Answers:


10

基本上来说:您不能。至少不是没有生根
Android不允许您将应用程序安装到外部SD卡上的主要原因是:

  1. 安全性:这是该限制的主要原因。诸如NTFS或FAT(其任何版本)之类的基本文件系统不允许进行类似Unix的权限管理。
    这意味着:任何应用程序都可以写入该存储设备上的任何文件。
    考虑到恶意应用程序,他们将能够用伪造/已感染的应用程序替换适当的应用程序,使您的手机变砖并使其无法使用。

  2. 易失性存储:不安全地将外部SD卡始终插入设备。您可以随时弹出它,从而使SD卡不是永久存储的理想选择。考虑从SD卡运行的应用程序,然后将其弹出。这些应用只会崩溃,而保存在SD卡上的所有其他应用也将消失。您当时无法使用它们,并且这些应用程序的数据也受原因1的影响。


我有Linux背景,因此我考虑了这种方法:我注意到应用程序的菜单选项“ Move to SDCARD”在sdcard0(内部文件夹)上创建了一个名为Android的文件夹,上面有应用程序数据。将创建一个名为Android的符号链接(在sdcard0中)到sdcard1中一个名为Android的文件夹的方法是否可行?
pr.nizar 2015年

问题是:Android仅在中存储应用程序数据和obb/sdcard/sdcard0/Android。应用程序存储在一个.android_secure甚至root都无法访问的隐藏文件夹中(我在设备上对其进行了测试,甚至无法cd访问该文件夹)。
GiantTree 2015年

其实这正是我所需要的!让我想到的主要问题是数据,尤其是沉重的游戏。.与后来添加的数据相比,主要的应用程序没有那么大。所以您认为这可能有效?
pr.nizar 2015年

如果只是数据或obb,那么它肯定可以工作。至少在不sdcard_rw属于该root组或不具有用户特征的Android版本上sdcard_rw。但是,只要进行一些权限更改,您就可以解决该问题。
2015年

跑步ls -l /storage/sdcard0给了我这个lrwxrwxrwx root root 2015-04-20 15:59 sdcard0 -> /storage/emulated/legacy,跑步ls -l /storage/sdcard0/给了我这个 drwxrwx--x root sdcard_r 2014-12-20 18:16 Android..这是好消息还是坏消息?由于我不是root用户,因此我无法设置权限。
pr.nizar 2015年

6

基本上可以!;)

  • 首先,扎根手机!
  • 其次,在SD卡(Ext.4)> = 2GB中创建一个辅助分区,并将其设置为主分区。
  • 第三,从playstore下载并安装Link2sd应用。打开应用程序,然后我将要求您创建第二个分区的安装点。选择是。重启。

重新启动后,您安装的每个应用都会自动转到SD卡。

如果您不知道如何在Google中为指南创建分区搜索,则有很多方法


这实际上是我要避免的事情:安装第三方软件。:-)
pr.nizar 2015年

4

那是一段漫长的旅程,寻找不涉及生根的答案,但我最终还是这样:

  1. 解锁我的引导程序

  2. 在不安装的情况下在TWRP上引导:

    fastboot boot recovery.img
    
  3. 使用TWRP 安装Chainfire的 SuperSU。

  4. 终端仿真器adb的shell中:

    su
    pm set-install-location 2
    
  5. 从应用程序菜单中按Settings > Applications一下即可将Move to SDCARD其*-其数据和对象-移至外部SDCARD。

  6. 卸下SuperSU ......

完全取消root

不,我没有那样做!3 :)


0

转到此地址 http://developer.android.com/tools/help/shell.html#shellcommands

Android 5及更高版本不支持此功能 pm get-install-location

尝试备份您的apk并按照以下步骤操作

adb shell pm install -r -s <path of your apk>

adb shell pm install -r -s /storage/sdcard1/base.apk

-r表示使用现有数据重新安装apk,-s表示sdcard


Android 5及更高版本不支持此pm get-install-location ”-您怎么知道?试试这个:android.googlesource.com/platform/frameworks/base/+/…。它适用于Android 5.1.1。我在Android 5.0.2、5.1.1和6.0.1中支持此参数!
Firelord

抱歉,-s用于指定adb应该在哪个设备上运行(“ -s <serialNumber>”)。
Krzysztof Bociurko '16

-1

首先安装Adbd insecure(从xda-developers下载APK)。

在设备上安装后,将其打开并标记框:“启用不安全的adbd”。

现在,您可以更改安装应用程序的位置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.