การย้ายตำแหน่งการติดตั้งบนอุปกรณ์ Android 5 Lollipop ที่ไม่รูท


12

ฉันมี Moto G (รุ่นที่ 2) ที่ใช้ Android 5.02 อยู่ การ์ด SD ภายในประมาณ 8Gb และฉันมีการ์ด SD ภายนอกที่มีพื้นที่ว่าง 16Gb

การย้ายแอปพลิเคชันไปยัง SDCARD จากเมนูแอปพลิเคชันจะย้ายไปยัง sdcard0 ซึ่งเป็นการ์ด SD ภายใน

คำสั่งเชลล์ 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:ฉันไม่ต้องการติดตั้งรอมแบบกำหนดเองหรือติดตั้งซอฟต์แวร์บุคคลที่สามเพื่อรูทโทรศัพท์

แก้ไข: ฉันสังเกตเห็นว่าข้อมูลแอปพลิเคชันถูกเก็บไว้ในโฟลเดอร์/storage/sdcard0/Androidดังนั้นฉันคิดว่าจะย้ายโฟลเดอร์นี้ไป/storage/sdcard1/และสร้าง symlink ด้วยวิธีนี้แทน:

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

สิ่งนี้จะทำงานหรือไม่

ขอบคุณ.

คำตอบ:


10

โดยทั่วไปการพูด: คุณไม่สามารถ อย่างน้อยก็ไม่มีการรูต
เหตุผลหลักที่ Android ไม่อนุญาตให้คุณติดตั้งแอปพลิเคชันลงในการ์ด SD ภายนอกของคุณคือ:

  1. ความปลอดภัย : มันเป็นเหตุผลหลักสำหรับข้อ จำกัด นั้น ระบบไฟล์พื้นฐานเช่น NTFS หรือ FAT (รุ่นใด ๆ ) ไม่อนุญาตให้มีการจัดการสิทธิ์เหมือน Unix
    ซึ่งหมายความว่า: แอปพลิเคชันใด ๆจะสามารถเขียนไปยังไฟล์ใดก็ได้บนที่เก็บข้อมูลนั้น
    เมื่อนึกถึงแอปที่เป็นอันตรายพวกเขาจะสามารถแทนที่แอปที่เหมาะสมด้วยแอปปลอม / ติดเชื้อทำให้โทรศัพท์ของคุณไม่สามารถใช้งานได้

  2. พื้นที่จัดเก็บข้อมูลที่ระเหยได้ : การ์ด SD ภายนอกของคุณไม่ปลอดภัยที่จะใส่ในอุปกรณ์ของคุณตลอดเวลา คุณสามารถดีดออกได้ทุกเวลาที่ทำให้การ์ด SD ของคุณไม่เหมาะสำหรับการจัดเก็บถาวร พิจารณาแอพที่ทำงานอยู่ใน SD การ์ดของคุณและคุณจะนำ แอพเหล่านั้นจะพังและแอพอื่น ๆ ที่บันทึกใน SD card ของคุณก็หายไปเช่นกัน คุณไม่สามารถใช้งานได้ในเวลานั้นและข้อมูลของแอพเหล่านั้นก็ได้รับผลกระทบจากเหตุผล # 1


ฉันมีพื้นหลัง linux ดังนั้นฉันจึงพิจารณาวิธีการนี้: ฉันสังเกตว่าตัวเลือกเมนูของแอปพลิเคชัน "ย้ายไปที่ SDCARD" สร้างโฟลเดอร์ที่เรียกว่า Android บน sdcard0 (ภายในหนึ่ง) ที่มีข้อมูลแอปพลิเคชันอยู่ จะสร้าง symlink (ใน sdcard0) เรียกว่า Android ไปยังโฟลเดอร์ชื่อ Android ใน sdcard1 หรือไม่
pr.nizar

ปัญหาคือ: ร้านค้าเฉพาะ Android การประยุกต์ใช้ข้อมูลและ obb/sdcard/sdcard0/Androidใน แอปพลิเคชันจะถูกเก็บไว้ในโฟลเดอร์ที่ซ่อนอยู่.android_secureซึ่งเรียกว่าไม่rootสามารถเข้าถึงได้ (ฉันทดสอบบนอุปกรณ์ของฉันคุณไม่สามารถแม้แต่cdจะไปยังโฟลเดอร์นั้น)
GiantTree

จริงๆแล้วนั่นคือสิ่งที่ฉันต้องการ! ปัญหาหลักที่ทำให้ฉันนึกถึงเรื่องนี้คือข้อมูลโดยเฉพาะกับเกมหนัก ๆ .. แอพพลิเคชั่นหลักนั้นไม่ใหญ่มากเมื่อเทียบกับข้อมูลที่เพิ่มในภายหลัง ดังนั้นคุณคิดว่ามันอาจใช้งานได้?
pr.nizar

หากเป็นเพียงข้อมูลหรือ obbก็สามารถใช้งานได้อย่างแน่นอน อย่างน้อยในเวอร์ชั่น Android ที่ไม่ได้sdcard_rwเป็นของrootกลุ่มหรือคุณสมบัติของผู้ใช้sdcard_rwเลย แต่ด้วยการเปลี่ยนแปลงสิทธิ์เล็กน้อยคุณควรจะสามารถแยกออกได้
GiantTree

วิ่ง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.. นั่นเป็นข่าวที่ดีหรือไม่ดี? เนื่องจากฉันไม่รูทฉันเชื่อว่าฉันไม่สามารถกำหนดสิทธิ์ได้
pr.nizar

6

โดยทั่วไปคุณสามารถ! ;)

  • อันดับแรกรูทโทรศัพท์ของคุณ!
  • ประการที่สองสร้างพาร์ติชันสำรองในการ์ด SD ของคุณ (Ext.4)> = 2GB และตั้งเป็นหลัก
  • สามดาวน์โหลดและติดตั้งแอพ Link2sd จาก playstore เปิดแอพและฉันจะขอให้คุณสร้างจุดเชื่อมต่อไปยังพาร์ติชั่นที่สองของคุณ เลือกใช่ Reboot

หลังจากรีบูตแอปทุกตัวที่คุณติดตั้งจะไปยังการ์ด SD โดยอัตโนมัติ

หากคุณไม่ทราบวิธีการสร้างพาร์ทิชันค้นหาคำแนะนำใน Google มีมากมาย


นั่นคือสิ่งที่ฉันกำลังพยายามหลีกเลี่ยง: การติดตั้งซอฟต์แวร์บุคคลที่สาม :-)
pr.nizar

4

นั่นเป็นการเดินทางเพื่อค้นหาคำตอบที่ไม่เกี่ยวข้องกับการรูท แต่ฉันสิ้นสุด:

  1. ปลดล็อก bootloader ของฉัน

  2. การบูตบนTWRPโดยไม่ต้องติดตั้ง:

    fastboot boot recovery.img
    
  3. การติดตั้งSuperSU ของ Chainfireด้วย TWRP

  4. จากTerminal Emulatorหรือเชลล์ของadb :

    su
    pm set-install-location 2
    
  5. จากเมนูของแอปพลิเคชันSettings > Applicationsเพียงแค่Move to SDCARDเลื่อนมัน * - ข้อมูลและ obb - ไปยัง SDCARD ภายนอก

  6. กำลังลบ SuperSU ......

unroot เต็ม

ไม่ ... ฉันไม่ได้ทำอย่างนั้น! 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 ขึ้นไปไม่รองรับการติดตั้งตำแหน่งน. " - คุณจะรู้ได้อย่างไร? ลองนี้: 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

-1

ขั้นแรกให้ติดตั้ง Adbd ที่ไม่ปลอดภัย ( ดาวน์โหลด apk จาก xda-developers )

เมื่อติดตั้งบนอุปกรณ์ของคุณแล้วให้เปิดและทำเครื่องหมายที่ช่อง: "เปิดใช้งาน adbd ที่ไม่ปลอดภัย"

ตอนนี้คุณสามารถเปลี่ยนตำแหน่งเพื่อติดตั้งแอพของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.