Przenoszenie miejsca instalacji na nierootowanym urządzeniu z systemem Android 5 Lollipop

12

Mam Moto G (2. generacji) z Androidem 5.02. Wewnętrzna karta SD ma około 8 Gb, a ja mam zewnętrzną kartę SD z 16 GB wolnego miejsca.

Przeniesienie aplikacji na SDCARD z menu aplikacji przenosi ją do sdcard0, czyli wewnętrznej karty SD.

Polecenie powłoki Adb:

pm get-install-location

daje mi:

0[auto]

Próbowałem ustawić lokalizację instalacji poprzez:

pm set-install-location 2

Ale otrzymuję ten błąd:

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

Uważam, że narzekam na uprawnienia roota.

A ponieważ jest to wersja produkcyjna próbująca:

adb root

daje mi:

 adbd cannot run as root in production builds

Czy jest jakiś sposób, aby aplikacje instalowały swoje dane na zewnętrznej karcie SD?

PS: Nie chcę instalować niestandardowej pamięci ROM ani instalować oprogramowania innej firmy, aby zrootować telefon.

Edycja: Zauważyłem, że dane aplikacji były przechowywane w folderze /storage/sdcard0/Android, więc pomyślałem o przeniesieniu tego folderu /storage/sdcard1/i utworzeniu w ten sposób dowiązania symbolicznego:

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

czy to zadziała?

Dziękuję Ci.

pr.nizar
źródło

Odpowiedzi:

10

Zasadniczo: nie możesz. Przynajmniej nie bez rootowania .
Główne powody, dla których Android nie pozwala na instalację aplikacji na zewnętrznej karcie SD to:

  1. Bezpieczeństwo : to główny powód tego ograniczenia. Podstawowe systemy plików, takie jak NTFS lub FAT (jakakolwiek jego wersja), nie pozwalają na zarządzanie uprawnieniami podobnymi do Uniksa.
    Oznacza to: każda aplikacja będzie mogła zapisać do dowolnego pliku w tym magazynie.
    Myśląc o złośliwych aplikacjach, byłyby w stanie zastąpić odpowiednie aplikacje fałszywymi / zainfekowanymi, blokując telefon i czyniąc go bezużytecznym.

  2. Pamięć ulotna : Zewnętrzna karta SD nie zawsze może być bezpiecznie włożona do urządzenia. Możesz go wysunąć w dowolnym momencie, co czyni kartę SD niezbyt dobrym kandydatem do trwałego przechowywania. Zastanów się, czy aplikacje nie działają na karcie SD, i wyjmij ją. Te aplikacje po prostu się zawieszają, a wszystkie inne aplikacje zapisane na karcie SD również zniknęły. Nie możesz ich używać w tym czasie, a na przyczynę tych danych ma również wpływ przyczyna 1.

GiantTree
źródło
Mam tło z linuksem, więc zastanowiłem się nad tym: zauważyłem, że opcja menu „Przenieś na SDCARD” utworzyła folder o nazwie Android na sdcard0 (wewnętrzny) z danymi aplikacji; czy utworzenie dowiązania symbolicznego (w sdcard0) o nazwie Android do folderu o nazwie Android w sdcard1 będzie działać?
pr.nizar
Problem jest: Android przechowuje jedyną aplikacją dane i OBB w /sdcard/sdcard0/Android. Aplikacje są przechowywane w ukrytym folderze o nazwie, do .android_securektórego nawet nie rootma dostępu (przetestowałem to na moim urządzeniu, nie można nawet cddo tego folderu).
GiantTree,
Właściwie to jest dokładnie to, czego potrzebuję! Głównym problemem, który sprawia, że ​​myślę o tym, są dane, szczególnie w przypadku ciężkich gier. Główne aplikacje nie są tak duże w porównaniu z danymi, które dodają później. Więc myślisz, że to może zadziałać?
pr.nizar
Jeśli to tylko dane lub obb, to na pewno działa. Przynajmniej na wersjach Androida, które nie sprawiają, że sdcard_rwnależą do rootgrupy lub w ogóle nie obsługują użytkownika sdcard_rw. Ale przy odrobinie zmian uprawnień powinieneś być w stanie to rozwiązać.
GiantTree,
Bieg ls -l /storage/sdcard0dał mi to, lrwxrwxrwx root root 2015-04-20 15:59 sdcard0 -> /storage/emulated/legacya bieg ls -l /storage/sdcard0/dał mi to drwxrwx--x root sdcard_r 2014-12-20 18:16 Android. Czy to dobra czy zła wiadomość? Ponieważ nie jestem rootem, uważam, że nie mogę ustawić uprawnień.
pr.nizar
6

Zasadniczo możesz! ;)

  • Najpierw zrootuj swój telefon!
  • Po drugie, utwórz dodatkową partycję na karcie SD (Ext.4)> = 2 GB i ustaw ją jako podstawową.
  • Po trzecie, pobierz i zainstaluj aplikację Link2sd z playstore. Otwórz aplikację, a poproszę cię o utworzenie punktu montowania do drugiej partycji. Wybierz Tak. Restart.

Po ponownym uruchomieniu KAŻDA zainstalowana aplikacja automatycznie przejdzie na kartę SD.

Jeśli nie wiesz, jak utworzyć wyszukiwanie partycji dla przewodnika w Google, jest ich wiele

Kanellis
źródło
Właśnie tego staram się unikać: instalowania oprogramowania innych firm. :-)
pr.nizar
4

To była dość podróż w poszukiwaniu odpowiedzi nie wymagającej rootowania, ale skończyłem:

  1. Odblokowanie mojego bootloadera

  2. Uruchamianie na TWRP bez instalacji:

    fastboot boot recovery.img
    
  3. Instalowanie SuperSU Chainfire z TWRP.

  4. Z emulatora terminala lub powłoki adb :

    su
    pm set-install-location 2
    
  5. Z menu aplikacji po Settings > Applicationsprostu pchanie Move to SDCARDprzenosi * - dane i obb - na zewnętrzną kartę SD.

  6. Usuwanie SuperSU ......

Całkowicie rozproszony

Nie ... nie zrobiłem tego! 3 :)

pr.nizar
źródło
0

Przejdź do tego adresu http://developer.android.com/tools/help/shell.html#shellcommands

Android 5 i nowsze wersje tego nie obsługują pm get-install-location

Spróbuj wykonać kopię zapasową apk i postępuj zgodnie z instrukcjami poniżej

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

Przykład

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

-r oznacza ponowną instalację apk z istniejącymi danymi, a -s oznacza sdcard

Akash Sarkar
źródło
System Android 5 i nowszy nie obsługuje tej lokalizacji po godzinach instalacji ” - skąd wiesz? Spróbuj tego: android.googlesource.com/platform/frameworks/base/+/… . To jest dla Androida 5.1.1. Mam poparcie dla tego argumentu w moim Androidzie 5.0.2, 5.1.1 i 6.0.1!
Firelord
Przepraszamy, ale -ssłuży do określenia, na którym urządzeniu adb powinien działać („ -s <serialNumber>”).
Krzysztof Bociurko
-1

Najpierw zainstaluj Adbd niezabezpieczone ( pobieranie apk od XDA-Developers ).

Po zainstalowaniu na urządzeniu otwórz je i zaznacz pole: „Włącz niepewne adbd”.

Teraz możesz zmienić lokalizację, aby zainstalować aplikacje.

Jherome
źródło