ルート化されていないAndroid 5 Lollipopデバイスでのインストール場所の移動


12

Android 5.02を搭載したMoto G(第2世代)があります。内部SDカードは約8Gbで、16Gbの空き容量がある外部SDカードがあります。

アプリケーションのメニューからアプリケーションをSDCARDに移動すると、内部SDカードであるsdcard0に移動します。

Adbシェルコマンド:

pm get-install-location

私に与えます:

0[auto]

私はインストール場所を設定しようとしました:

pm set-install-location 2

しかし、私はこのエラーを受け取っています:

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

つまり、ルート権限について不平を言っていると思います。

そして、それはしようとしている生産ビルドだからです:

adb root

私に与えます:

 adbd cannot run as root in production builds

アプリケーションが外部SDカードにデータをインストールするように設定する方法はありますか?

PS:カスタムROMをインストールしたり、サードパーティのソフトウェアをインストールして電話をルート化したりしたくない。

編集: アプリケーションデータがフォルダーに保存されていることに気付いた/storage/sdcard0/Androidので、/storage/sdcard1/代わりにこのフォルダーに移動してこの方法でシンボリックリンクを作成することを考えました。

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

これは仕事をしますか?

ありがとうございました。

回答:


10

基本的に話すことはできません。少なくとも応援なしでは
Androidで外部SDカードにアプリケーションをインストールできない主な理由は次のとおりです。

  1. セキュリティ:それがその制限の主な理由です。NTFSやFAT(そのすべてのバージョン)などの基本的なファイルシステムでは、Unixのような権限管理は許可されていません。
    つまり、どのアプリケーションでもそのストレージ上の任意のファイルに書き込むことができます。
    悪意のあるアプリを考えると、彼らは適切なアプリを偽の/感染したアプリに置き換え、携帯電話をレンガにして使用不能にすることができます。

  2. 揮発性ストレージ:外部SDカードは常にデバイスに挿入するのは安全ではありません。SDカードを永続的なストレージの候補としてふさわしくないため、いつでも取り出すことができます。SDカードで実行中のアプリを検討し、取り出します。これらのアプリはクラッシュするだけで、SDカードに保存されている他のアプリもすべてなくなります。その時点でそれらを使用することはできず、それらのアプリのデータも理由1の影響を受けます。


Linuxのバックグラウンドがあるため、このアプローチを検討しました。アプリケーションのメニューオプション「Move to SDCARD」によって、sdcard0(内部フォルダー)にAndroidというフォルダーが作成され、アプリケーションデータがそこにあることに気付きました。sdcard1のAndroidというフォルダーへのAndroidというシンボリックリンク(sdcard0内)を作成しますか?
pr.nizar

問題は、Androidがアプリケーションデータとobbのみを保存すること/sdcard/sdcard0/Androidです。アプリケーションは、アクセスできない.android_secure場所と呼ばれる隠しフォルダーに保存されますroot(デバイスでテストしましたが、cdそのフォルダーにもアクセスできません)。
ジャイアントツリー

実際、それはまさに私が必要とするものです!これを考えさせる主な問題は、特に重いゲームのデータです。メインアプリケーションは、後で追加するデータに比べてそれほど大きくありません。それでうまくいくと思う?
pr.nizar

データまたはobbのみの場合は、確実に機能します。少なくとも、ユーザーにまったくsdcard_rw所属しないrootグループや機能を持たないAndroidバージョンではsdcard_rw。しかし、少し許可を変更すれば、それを整理することができるはずです。
ジャイアントツリー

ランニングls -l /storage/sdcard0は私にこれlrwxrwxrwx root root 2015-04-20 15:59 sdcard0 -> /storage/emulated/legacyls -l /storage/sdcard0/与え、ランニングは私にこれを与えた drwxrwx--x root sdcard_r 2014-12-20 18:16 Android..それは良いニュースか悪いニュースか?私はルートではないので、許可を設定することはできません。
pr.nizar

6

基本的にできます!;)

  • まず、携帯をルート化しましょう!
  • 次に、SDカード(Ext.4)> = 2GBにセカンダリパーティションを作成し、プライマリパーティションとして設定します。
  • 第三に、playstoreからLink2sdアプリをダウンロードしてインストールします。アプリを開くと、2番目のパーティションへのマウントポイントを作成するように求められます。はいを選択します。リブート。

再起動後、インストールするすべてのアプリが自動的にSDカードに移動します。

Googleでガイドのパーティション検索を作成する方法がわからない場合は、たくさんあります


それは実際に私が避けようとしていることです:サードパーティのソフトウェアをインストールします。:
pr.nizar

4

これは、応援を伴わない答えを探す旅でしたが、結局私は終わりました。

  1. ブートローダーのロック解除

  2. TWRPをインストールせずに起動:

    fastboot boot recovery.img
    
  3. TWRPを使用したChainfireのSuperSUのインストール。

  4. 以下からのターミナルエミュレータまたはADBのシェル:

    su
    pm set-install-location 2
    
  5. アプリケーションのメニューからSettings > ApplicationsプッシュMove to SDCARDするだけで、アプリケーション*(そのデータとobb)が外部SDCARDに移動します。

  6. SuperSUの削除......

完全なルート解除

いや...私はそうしなかった!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でこの引数をサポートしています!
消防士

申し訳ありませんが、adbが動作するデバイス-s指定するためのものです( " -s <serialNumber>")。
クシシュトフボシウルコ

-1

最初にAdbd insecureをインストールしますxda-developersからapkダウンロード)。

デバイスにインストールしたら、デバイスを開き、「安全でないadbdを有効にする」ボックスにマークを付けます。

これで、アプリをインストールする場所を変更できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.