ฉันจะดูไฟล์ค่ากำหนดที่แชร์โดยใช้ Android Studio ได้อย่างไร


107

ฉันใช้การตั้งค่าร่วมเพื่อจัดเก็บค่าบางอย่างสำหรับแอปของฉัน ฉันต้องการดูไฟล์ที่เก็บข้อมูลไว้ในโทรศัพท์ของฉัน ฉันพบหลายวิธีในการดำเนินการนี้ใน Eclipse แต่ฉันกำลังแก้ไขข้อบกพร่องใน Android Studio โทรศัพท์ของฉันรูทแล้ว ฉันอ่านว่าการเข้าถึงรูทเป็นสิ่งสำคัญในการอ่านไฟล์ประเภทนี้ หากไม่มีวิธีใดฉันจะค้นหาวิธีเข้าถึงข้อมูลผ่านโปรแกรมของฉันจากนั้นส่งออกไปยัง log cat หวังว่าฉันจะสามารถดูไฟล์บนโทรศัพท์ได้โดยตรงเพราะมันง่ายกว่ามาก ขอบคุณ.


ติดตั้ง ES File Explorer และเปิดใช้งานการเรียกดูรูท คุณจะสามารถเปิดได้โดยตรงบนโทรศัพท์จากนั้น
CurlyPaul

3
ลองใช้ adb pull เพื่อดึงไฟล์ไปยังเดสก์ท็อป adb pull /data/data/<packagename>/shared_prefs/prefs.xml
Lal

2
หรือ goto file explorer และในโครงสร้างไฟล์ให้ค้นหาโฟลเดอร์ข้อมูลของแอปของคุณใน /data/data/com.your-package/shared_prefs ไฟล์การตั้งค่าจะอยู่ที่นั่นเป็น XML คัดลอกจากอุปกรณ์และเพลิดเพลิน ที่มุมขวาบนของมุมมอง File Explorer มีปุ่มไอคอนสองปุ่มปุ่มหนึ่งมีดิสก์และปุ่มหนึ่งใช้กับโทรศัพท์มือถือ ปุ่มเหล่านี้จะช่วยให้คุณสามารถคัดลอกไฟล์จากและไปยังโทรศัพท์ / โปรแกรมจำลองได้ตามลำดับ
ลัล

1
ด้วยเหตุผลบางประการไฟล์ prefs xml ของฉันเรียกว่า <PACKAGENAME> _preferences.xml
JPM

คำตอบ:


98

จาก Android Studio ให้เริ่มการตรวจสอบอุปกรณ์ Android ไปที่ File Explorer และเรียกดู "/ data / data / <name of your package> / shared_prefs /" คุณจะพบ XML ที่นั่น ... และคุณสามารถคัดลอกเพื่อตรวจสอบได้

หากคุณมีอุปกรณ์ที่ไม่ได้รูทจะไม่สามารถทำได้โดยตรงจาก Android Studio อย่างไรก็ตามคุณสามารถเข้าถึงไฟล์ได้adb shellตราบเท่าที่แอปพลิเคชันของคุณเป็นเวอร์ชันแก้ไขข้อบกพร่อง

adb shell
run-as your.app.id
chmod 777 shared_prefs/your.app.id_preferences.xml
exit # return to default user
cp /data/data/your.app.id/shared_prefs/your.app.id_preferences.xml /sdcard

หลังจากนั้นคุณสามารถดึงไฟล์จากไดเร็กทอรี / sdcard ด้วย adb


ฉันไม่สามารถเข้าถึงโฟลเดอร์นี้จาก Device Monitor จำเป็นต้องรูทหรือไม่?
Marian Klühspies

2
วิธีที่สองใช้ได้กับอุปกรณ์ที่ไม่ได้รูท หลังจากคุณคัดลอกไฟล์ไปยัง sd card คุณสามารถออกจาก adb และเรียกใช้ adb pull "/ sdcard / your_preferences_file" และคุณจะได้รับไฟล์ xml ในไดเร็กทอรีปัจจุบันของคุณที่คุณสามารถตรวจสอบได้
Bebop_

4
คุณสามารถดึงข้อมูลนี้จากโปรแกรมจำลองที่ไม่มีรูทได้หากคุณสามารถแก้ไขข้อบกพร่องด้วยวิธีนั้น หากคุณใช้อุปกรณ์จริงคุณจะต้องรูท
Booger

4
มองหาตัวสำรวจไฟล์อุปกรณ์ที่มุมล่างขวาของ AndroidStudio มันจะช่วยให้คุณเข้าถึงระบบไฟล์อุปกรณ์ได้ง่าย
Maksim Turaev

3
เมื่อใช้ Device File Explorer ฉันสามารถเข้าถึงการตั้งค่าที่ใช้ร่วมกันได้โดยไม่ต้องเข้าถึงรูท
Devansh Maurya

90

Device File Explorer ซึ่งเป็นส่วนหนึ่งของAndroid Studio 3.xนั้นดีมากสำหรับการสำรวจไฟล์ค่ากำหนดรายการแคชหรือฐานข้อมูลของคุณ

  1. Shared Preferences / data / data // ไดเร็กทอรี shared_prefs

ป้อนคำอธิบายภาพที่นี่

มันจะเป็นแบบนี้

ป้อนคำอธิบายภาพที่นี่

ในการเปิด Device File Explorer:

คลิก View> Tool Windows> Device File Explorer หรือคลิกปุ่ม Device File Explorer ในแถบหน้าต่างเครื่องมือ

ป้อนคำอธิบายภาพที่นี่


13
เปิด Device File Explorer (ขวาล่างของหน้าจอ)
Apit John Ismail

47

สเตโธ

คุณสามารถใช้http://facebook.github.io/stetho/เพื่อเข้าถึงค่ากำหนดที่ใช้ร่วมกันของคุณในขณะที่แอปพลิเคชันของคุณอยู่ในโหมดดีบัก ไม่มีราก

คุณสมบัติ:

  1. ดูและแก้ไข sharedpreferences
  2. ดูและแก้ไข sqLite db
  3. ดู heirarchy มุมมอง
  4. ตรวจสอบคำขอเครือข่าย http
  5. ดูสตรีมจากหน้าจอของอุปกรณ์
  6. และอื่น ๆ....

ป้อนคำอธิบายภาพที่นี่

การตั้งค่าพื้นฐาน:

  1. ใน build.gradle เพิ่ม compile 'com.facebook.stetho:stetho:1.5.0'
  2. ในการเพิ่ม onCreate () ของแอปพลิเคชัน Stetho.initializeWithDefaults(this);
  3. ใน Chrome บนพีซีของคุณไปที่chrome: // ตรวจสอบ /

UPDATE: ฟลิปเปอร์

Flipperเป็นทางเลือกใหม่จาก facebook มีคุณสมบัติเพิ่มเติม แต่สำหรับการเขียนเวลาสามารถใช้ได้เฉพาะกับ Mac เท่านั้นซึ่งยากกว่าเล็กน้อยในการกำหนดค่าและขาดการดีบักฐานข้อมูลในขณะที่ปรับปรุงตัวตรวจสอบเค้าโครงที่ปรับปรุงให้ดียิ่งขึ้น

คุณยังสามารถใช้คำแนะนำของ @Jeffrey:

  • เปิด Device File Explorer (ขวาล่างของหน้าจอ)
  • ไปที่ data / data / com.yourAppName / shared_prefs

สามารถใช้งานกับอีมูเลเตอร์ได้หรือไม่? ดูเหมือนจะทำให้มันใช้งานไม่ได้
EduardoMaia

@EduardoMaia มันควรจะ. ฉันใช้มันกับโปรแกรมจำลองทุกวัน คุณสามารถสร้างคำถามโดยใช้ภาพหน้าจอได้ดังนั้นฉันจะพยายามช่วยคุณ
Maksim Turaev

@EduardoMaia คุณสามารถลองทำสิ่งต่อไปนี้: 1. โคลนที่เก็บข้อมูล facebook stetho 2. นำเข้าโปรเจ็กต์นี้ไปที่ LATEST Android Studio (File-> Import -> "choose settings.gradle") 3. ตกลงที่จะอัปเดตปลั๊กอิน gradle 4. เริ่ม Android Emulator (ในกรณีของฉันคือ API 24) 5. เรียกใช้ stetho-sample (เลือกจากเมนูเรียกใช้การกำหนดค่าถัดจากลูกศรสีเขียว 6. บนพีซีของคุณเปิดเบราว์เซอร์ Chrome ล่าสุด 7. ไปโดย chrome: // ตรวจสอบที่อยู่ 8 เลือกโปรแกรมจำลองของคุณในรายการ 9. ในหน้าต่างที่เปิดให้ไปที่แท็บทรัพยากร 10. ค้นหาการตั้งค่าที่ใช้ร่วมกันของคุณภายใต้เมนู LocalStorage ทางด้านซ้าย 11. ในแอปพลิเคชันเล่นด้วยธงบูลีน
Maksim Turaev

ฉันแก้ไขปัญหาของฉันเมื่อวานนี้โดยไม่จำเป็นต้องดูคำนำหน้า แต่ฉันจะลองทีละขั้นตอนในวันอื่น ขอบคุณ.
EduardoMaia

16

Android Studio -> Device File Explorer (มุมล่างขวา) -> data -> data -> {package.id} -> shared-prefs

หมายเหตุ: คุณต้องเชื่อมต่ออุปกรณ์มือถือกับ android studio และแอปพลิเคชันที่เลือกควรอยู่ในโหมดดีบัก


14

คุณสามารถสร้างกิจกรรมพิเศษเพื่อวัตถุประสงค์ในการดีบัก:

@SuppressWarnings("unchecked")
public void loadPreferences() {
// create a textview with id (tv_pref) in Layout.
TextView prefTextView;
prefTextView = (TextView) findViewById(R.id.tv_pref);
    Map<String, ?> prefs = PreferenceManager.getDefaultSharedPreferences(
            context).getAll();
    for (String key : prefs.keySet()) {
        Object pref = prefs.get(key);
        String printVal = "";
        if (pref instanceof Boolean) {
            printVal =  key + " : " + (Boolean) pref;
        }
        if (pref instanceof Float) {
            printVal =  key + " : " + (Float) pref;
        }
        if (pref instanceof Integer) {
            printVal =  key + " : " + (Integer) pref;
        }
        if (pref instanceof Long) {
            printVal =  key + " : " + (Long) pref;
        }
        if (pref instanceof String) {
            printVal =  key + " : " + (String) pref;
        }
        if (pref instanceof Set<?>) {
            printVal =  key + " : " + (Set<String>) pref;
        }
        // Every new preference goes to a new line
        prefTextView.append(printVal + "\n\n");     
    }
}
// call loadPreferences() in the onCreate of your Activity.

สิ่งนี้มีประโยชน์มาก แต่ก็ไม่ตรงกับความต้องการของฉัน ฉันได้เพิ่มการแก้ไขที่อนุญาตให้มีไฟล์การตั้งค่าที่ใช้ร่วมกันหลายไฟล์
Christopher Rucinski

ขอบคุณฉันแค่มีปัญหาในการหาวิธียอมรับการแก้ไข
cYrixmorten

มันถูกคนอื่นปฏิเสธ พวกเขาบอกว่ามันควรจะเป็นคำตอบของมันเองดังนั้นฉันจึงใส่เป็นคำตอบใหม่ ตอนแรกฉันเพิ่งแก้ไขคำตอบของคุณเพราะฉันสามารถทำได้เมื่อเห็นคำตอบของคุณเท่านั้น
Christopher Rucinski

เอาล่ะ :-) ใช่เกิดขึ้นกับผมหลังจากนั้นก็จะต้องมีการตรวจสอบโดยผู้อื่น
cYrixmorten

10

นี่เป็นโพสต์เก่า แต่ฉันควรใส่คำตอบแบบกราฟิกที่นี่เนื่องจากคำถามเกี่ยวกับการดูSharedPreferences.xmlโดยใช้ Android Studio นี่มันไปแล้ว

ไปที่ Tools -> Android Device Monitor เปิดจอภาพอุปกรณ์โดยคลิก

ป้อนคำอธิบายภาพที่นี่

จากนั้นคุณต้องเลือกแท็บ File Explorer ในการตรวจสอบอุปกรณ์ ค้นหาโฟลเดอร์ข้อมูลและค้นหาโฟลเดอร์ข้อมูลอื่นในนั้น SharedPreferences.xmlมันจะมีโฟลเดอร์ที่มีชื่อของแพคเกจโปรแกรมประยุกต์ของคุณและจะมีที่ต้องการ

ป้อนคำอธิบายภาพที่นี่

เลือกSharedPreferences.xmlไฟล์จากนั้นดึงและบันทึกไฟล์ในคอมพิวเตอร์ของคุณโดยใช้ปุ่มที่มีเครื่องหมายที่มุมขวาบนของภาพด้านบน

ฉันใช้โปรแกรมจำลองอุปกรณ์


1
ขอบคุณโพสต์ของคุณฉันได้เรียนรู้เกี่ยวกับdeveloper.android.com/studio/debug/device-file-explorerซึ่งเป็นวิธีใหม่ในการทำเช่นเดียวกับที่คุณอธิบายไว้ที่นี่
malarres

ดีใจมากที่รู้ว่าฉันสามารถช่วยได้! คุณเป็นที่ต้อนรับอย่างยิ่ง.
Reaz Murshed

5

เพื่อเปิดแชร์preferenceใน android studio

เปิดไฟล์ explorer ของอุปกรณ์จากข้อมูลด้านขวา> ข้อมูล>> shared_prefs

ค้นหารูปภาพที่แนบมาเพื่อดูคำอธิบายเพิ่มเติม


1
ภาพที่แนบมา
Mahmoud Mabrok

4

ไฟล์การตั้งค่าที่ใช้ร่วมกันเดียวหรือหลายไฟล์

หากคุณมีหลายShared Preferenceไฟล์นี่เป็นวิธีที่ดีในการแสดงไฟล์ทั้งหมด แต่คุณสามารถส่งชื่อไฟล์ได้เพียง 1 ชื่อ

  • loadSharedPrefs("pref_name");

  • loadSharedPrefs("shared_pref1", "shared_pref2", "shared_pref3");

เลือกข้อใดข้อหนึ่งต่อไปนี้ให้เหมาะกับความต้องการของคุณ ...

ค่าประเภทเดียว

public void loadSharedPrefs(String ... prefs) {

    // Logging messages left in to view Shared Preferences. I filter out all logs except for ERROR; hence why I am printing error messages.

    Log.i("Loading Shared Prefs", "-----------------------------------");
    Log.i("----------------", "---------------------------------------");

    for (String pref_name: prefs) {

        SharedPreferences preference = getSharedPreferences(pref_name, MODE_PRIVATE);
        for (String key : preference.getAll().keySet()) {

            Log.i(String.format("Shared Preference : %s - %s", pref_name, key),
                  preference.getString(key, "error!"));

        }

        Log.i("----------------", "---------------------------------------");

    }

    Log.i("Finished Shared Prefs", "----------------------------------");

}

ค่าหลายประเภท

public void loadSharedPrefs(String ... prefs) {

    // Define default return values. These should not display, but are needed
    final String STRING_ERROR = "error!";
    final Integer INT_ERROR = -1;
    // ...
    final Set<String> SET_ERROR = new HashSet<>(1);

    // Add an item to the set
    SET_ERROR.add("Set Error!");

    // Loop through the Shared Prefs
    Log.i("Loading Shared Prefs", "-----------------------------------");
    Log.i("------------------", "-------------------------------------");

    for (String pref_name: prefs) {

        SharedPreferences preference = getSharedPreferences(pref_name, MODE_PRIVATE);
        Map<String, ?> prefMap = preference.getAll();

        Object prefObj;
        Object prefValue = null;

        for (String key : prefMap.keySet()) {

            prefObj = prefMap.get(key);

            if (prefObj instanceof String) prefValue = preference.getString(key, STRING_ERROR);
            if (prefObj instanceof Integer) prefValue = preference.getInt(key, INT_ERROR);
            // ...
            if (prefObj instanceof Set) prefValue = preference.getStringSet(key, SET_ERROR);

            Log.i(String.format("Shared Preference : %s - %s", pref_name, key),
                  String.valueOf(prefValue));

        }

        Log.i("------------------", "-------------------------------------");

    }

    Log.i("Loaded Shared Prefs", "------------------------------------");

}

}

Logcat เอาต์พุต

Shared Preferenceค่าของฉันคือทั้งหมดStringแต่นี่คือผลลัพธ์โดยใช้วิธีใดวิธีหนึ่งจาก 2 วิธีข้างต้น ...

I/Loading Shared Prefs﹕ -----------------------------------
I/------------------﹕ -------------------------------------
I/Shared Preference : FAVORITE - 135397 Jurassic World
I/Shared Preference : FAVORITE - 87101 Terminator Genisys
I/Shared Preference : FAVORITE - 177677 Mission: Impossible  Rogue Nation
I/------------------﹕ -------------------------------------
I/Shared Preference : WATCHED - 177677 Mission: Impossible  Rogue Nation
I/Shared Preference : WATCHED - 157336 Interstellar
I/Shared Preference : WATCHED - 135397 Jurassic World
I/Shared Preference : WATCHED - 87101 Terminator Genisys
I/------------------﹕ -------------------------------------
I/Shared Preference : WILL_WATCH - 211672 Minions
I/Shared Preference : WILL_WATCH - 102899 Ant-Man
I/------------------﹕ -------------------------------------
I/Loaded Shared Prefs﹕ ------------------------------------

4

อีกวิธีง่ายๆคือใช้แอป root explorer บนโทรศัพท์ของคุณ

จากนั้นไปที่/data/data/package name/shared preferences folder/name of your preferences.xmlคุณสามารถใช้ES File Explorer , และไปยังอุปกรณ์ของคุณไม่ได้rootsd card


1
สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถาม จะวิจารณ์หรือการร้องขอคำชี้แจงจากผู้เขียนแสดงความคิดเห็นด้านล่างโพสต์ของพวกเขา - คุณสามารถแสดงความคิดเห็นในโพสต์ของคุณเองและเมื่อคุณมีเพียงพอชื่อเสียงคุณจะสามารถที่จะแสดงความคิดเห็นในโพสต์ใด- จากรีวิว
Luca Detomi

@LucaDetomi คุณรู้ไหมว่าฉันอยู่ที่นี่
user5291072

คำตอบของคุณถูกระบุว่าสั้นเกินไป คำตอบควรมีรายละเอียดที่ช่วยให้ผู้ใช้เข้าใจว่า "ทำไม" อาจเป็นคำตอบที่ดีและอาจเป็นคำตอบที่ดีที่สุด ฉันขอแนะนำให้คุณเพิ่มรายละเอียดเพิ่มเติมเพื่อช่วยให้เข้าใจหลักการและอาจจะปรับให้เข้ากับปัญหาอื่น ๆ ที่คล้ายคลึงกัน
Luca Detomi


3

ใน Device File Explorer ให้ทำตามเส้นทางด้านล่าง: -

/data/data/com.**package_name**.test/shared_prefs/com.**package_name**.test_preferences.xml

2

เรียกใช้แอปพลิเคชันใน Emulator หลังจากที่คุณใส่ข้อมูลบางส่วนเพียงแค่ปิดแอป

ตอนนี้เปิด DDMS หรือ Android Monitor แล้วเลือกโปรแกรมจำลองของคุณทางด้านขวาคุณจะเห็น File Explorer มองหาโฟลเดอร์ Data ในนั้นและมองหาแพ็คเกจแอปพลิเคชันของคุณที่คุณสร้างขึ้นซึ่งคุณจะพบไฟล์การกำหนดลักษณะที่แชร์เปิดอยู่ คุณจะเห็นไฟล์ XML คลิกและคลิกดึงไฟล์จากปุ่มอุปกรณ์ที่มุมขวาบน

ไฟล์ XML จะถูกบันทึกในตำแหน่งที่คุณต้องการจากนั้นคุณสามารถเปิดโดยใช้โปรแกรมแก้ไขใด ๆ เช่น notepad ++ และสามารถดูข้อมูลที่คุณป้อนได้


ในAndroid Studio 3.0ฉันพบในDevice File Explorer > data> data> (ชื่อแพ็คเกจ)> shared_prefs> (ชื่อแพ็คเกจ) _preferences.xml
Josselin

1

ฉันพบว่าคำสั่งเหล่านี้มีประโยชน์ในคอนโซลเสมอ:

  1. ค้นหาชื่อไฟล์ที่ถูกต้อง

    adb shell

    ls /data/data/com.your.package/shared_prefs

  2. รับไฟล์ไปยังไดเร็กทอรีท้องถิ่น

    adb pull /data/data/com.your.package/shared_prefs/the_file_you_want $local_dir

  3. ตรวจสอบใน$local_dirไฟล์.


1

หากคุณใช้โปรแกรมจำลองคุณสามารถดูsharedPrefs.xmlไฟล์บนเทอร์มินัลด้วยคำสั่งนี้:

  • adb root
  • cat /data/data/<project name>/shared_prefs/<xml file>

หลังจากนั้นคุณสามารถใช้adb unrootถ้าคุณไม่ต้องการให้อุปกรณ์เสมือนรูท

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