Como posso visualizar o arquivo de preferências compartilhadas usando o Android Studio?

101

Estou usando preferências compartilhadas para armazenar certos valores para meu aplicativo. Eu gostaria de ver o arquivo onde as informações estão realmente armazenadas no meu telefone. Encontrei muitas maneiras de fazer isso no Eclipse, mas estou depurando no Android Studio. Meu telefone está enraizado. Eu li que ter acesso root é importante para ler esses tipos de arquivos. Se não houver maneira, procurarei como acessar as informações por meio do meu programa e gerarei como log cat. No entanto, espero que eu possa apenas visualizar o arquivo no telefone diretamente, pois é muito mais simples. Obrigado.

JayUser
fonte
Instale o ES File Explorer e habilite a navegação raiz. Você poderá então abri-lo diretamente no telefone.
CurlyPaul
3
tente usar adb pull para buscar o arquivo na área de trabalho. adb pull /data/data/<packagename>/shared_prefs/prefs.xml
Lal
2
OU vá para o explorador de arquivos e, na árvore de arquivos, encontre a pasta de dados do seu aplicativo em /data/data/com.your-package/shared_prefs. O arquivo de preferência estará lá, como um XML. Copie-o do dispositivo e divirta-se. No canto superior direito da visualização File Explorer, há dois botões de ícone - um com um disco e outro com um telefone celular. Esses botões permitirão que você copie arquivos de e para o telefone / emulador, respectivamente.
Lal
1
Por alguma razão, meu arquivo xml preferencial se chama <PACKAGENAME> _preferences.xml
JPM

Respostas:

95

No Android Studio, inicie o Android Device Monitor, vá para o File Explorer e navegue em "/ data / data / <nome do seu pacote> / shared_prefs /". Você encontrará o XML lá ... e também poderá copiá-lo para inspeção.

Se você tiver um dispositivo sem acesso root, não será possível fazer isso diretamente no Android Studio. No entanto, você pode acessar o arquivo com adb shell, desde que seu aplicativo seja a versão de depuração.

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

Depois disso, você pode puxar o arquivo do diretório / sdcard com adb.

George Dima
fonte
Não consigo acessar esta pasta do Device Monitor. O Root é necessário?
Marian Klühspies
2
O segundo método funciona para dispositivos sem acesso root. Depois de copiar o arquivo para o cartão SD, você pode sair do adb e executar adb pull "/ sdcard / your_preferences_file" e obterá um arquivo xml em seu diretório atual para inspecionar.
Bebop_
4
Você pode realmente obter essas informações de um emulador sem root, se puder depurar dessa forma. Se você estiver em um dispositivo físico, precisará de root.
Booger
3
procure o explorador de arquivos do dispositivo no canto inferior direito do AndroidStudio. Ele fornecerá acesso fácil ao sistema de arquivos do dispositivo
Maksim Turaev
2
Usando o Device File Explorer, posso acessar as preferências compartilhadas sem acesso root
Devansh Maurya
77

O Device File Explorer, que faz parte do Android Studio 3.x, é realmente bom para explorar seus arquivos de preferência, itens de cache ou banco de dados.

  1. Preferências compartilhadas / data / data // diretório shared_prefs

insira a descrição da imagem aqui

Parece algo assim

insira a descrição da imagem aqui

Para abrir o Device File Explorer:

Clique em Exibir> Janelas de ferramentas> Gerenciador de arquivos de dispositivos ou clique no botão Gerenciador de arquivos de dispositivos na barra da janela de ferramentas.

insira a descrição da imagem aqui

phnmnn
fonte
13
Abra o Device File Explorer (parte inferior direita da tela).
Apit John Ismail
47

Stetho

Você pode usar http://facebook.github.io/stetho/ para acessar suas preferências compartilhadas enquanto seu aplicativo está no modo de depuração. Sem raiz

recursos:

  1. visualizar e editar preferências compartilhadas
  2. ver e editar sqLite db
  3. ver ver hierarquia
  4. monitorar solicitações de rede http
  5. ver stream da tela do dispositivo
  6. e mais....

insira a descrição da imagem aqui

Configuração básica:

  1. no add build.gradle compile 'com.facebook.stetho:stetho:1.5.0'
  2. no onCreate () do aplicativo, adicione Stetho.initializeWithDefaults(this);
  3. no Chrome no seu PC, vá para chrome: // inspect /

ATUALIZAÇÃO: Flipper

Flipper é uma alternativa mais recente do Facebook. Ele tem mais recursos, mas por enquanto a escrita está disponível apenas para Mac, um pouco mais difícil de configurar e não tem depuração de banco de dados, enquanto traz um inspetor de layout extremamente aprimorado

Você também pode usar a sugestão de @Jeffrey:

  • Abra o Device File Explorer (parte inferior direita da tela)
  • Vá para data / data / com.yourAppName / shared_prefs
Maksim Turaev
fonte
Isso pode funcionar em emuladores? Não consigo fazer funcionar
EduardoMaia
@EduardoMaia Deveria. Eu uso com o emulador todos os dias. Você pode criar uma pergunta com capturas de tela, então tentarei ajudá-lo.
Maksim Turaev
@EduardoMaia Você pode tentar fazer o seguinte: 1. Clonar o repositório stetho do Facebook. 2. Importe este projeto para o LATEST Android Studio (Arquivo-> Importar -> "escolha as configurações.gradle") 3. Concorde em atualizar o plugin do Gradle. 4. Inicie o Android Emulator (no meu caso, API 24) 5. Inicie o stetho-sample (selecione-o no menu de configuração de execução ao lado da seta verde 6. No seu PC, abra o navegador Chrome 7 mais recente. Acesse chrome: // inspect address 8. escolheu seu emulador na lista. 9. Na janela aberta, vá para a guia Recursos. 10. Encontre suas preferências compartilhadas no menu LocalStorage no lado esquerdo. 11. No aplicativo, jogue com a bandeira booleana
Maksim Turaev
Corrigi meu problema ontem sem precisar ver as preferências compartilhadas. Mas vou tentar isso passo a passo outro dia. Obrigado.
EduardoMaia
14

Você pode simplesmente criar uma atividade especial para fins de depuração:

@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.
cYrixmorten
fonte
Isso foi muito útil, mas não se encaixou bem na minha necessidade. Eu adicionei uma edição que permite vários arquivos de preferência compartilhados
Christopher Rucinski
Obrigado, estou tendo problemas para descobrir como aceitar as edições
cYrixmorten
Foi negado por outros. Disseram que deveria ser sua própria resposta, então coloquei como uma nova resposta. Originalmente, acabei de editar sua resposta porque só fui capaz de fazer o que fiz quando vi sua resposta.
Christopher Rucinski de
Tudo bem :-) sim me ocorreu depois que teve que ser revisado por outros
cYrixmorten
13

Android Studio -> Device File Explorer (canto inferior direito) -> dados -> dados -> {package.id} -> preferências compartilhadas

Nota: Você precisa conectar o dispositivo móvel ao Android Studio e o aplicativo selecionado deve estar no modo de depuração

Niranjan
fonte
10

Este é um post antigo, mas achei que deveria colocar uma resposta gráfica aqui, pois a questão é sobre como visualizar SharedPreferences.xmlusando o Android Studio. Então aqui vai.

Vá para Ferramentas -> Monitor de dispositivo Android. Abra o monitor do dispositivo clicando nele.

insira a descrição da imagem aqui

Em seguida, você precisa selecionar a guia File Explorer no monitor do dispositivo. Encontre a pasta de dados e encontre outra pasta de dados dentro dela. Ele conterá uma pasta com o nome do seu pacote de aplicativos e ali estará o desejado SharedPreferences.xml.

insira a descrição da imagem aqui

Selecione o SharedPreferences.xmlarquivo e, em seguida, extraia e salve o arquivo em seu computador usando o botão marcado no canto superior direito da imagem acima.

Usei um emulador de dispositivo.

Reaz Murshed
fonte
1
Graças à sua postagem, aprendi sobre developer.android.com/studio/debug/device-file-explorer, que é a nova maneira de fazer o mesmo que você está explicando aqui.
malarres
É bom saber que pude ajudar! Você é muito bem-vindo.
Reaz Murshed
4

Arquivos de preferência compartilhados únicos ou múltiplos

Se você tiver vários Shared Preferencearquivos, esta é uma boa maneira de mostrar todos eles, mas você também pode passar 1 nome de arquivo.

  • loadSharedPrefs("pref_name");

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

Escolha um dos seguintes para atender às suas necessidades ...

Valores de tipo único

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", "----------------------------------");

}

Valores de vários tipos

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", "------------------------------------");

}

}

Saída Logcat

Meus Shared Preferencevalores são todos String, mas esta é a saída usando um dos 2 métodos acima ...

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 ------------------------------------
Christopher Rucinski
fonte
4

Outra maneira simples seria usar um aplicativo root explorer em seu telefone.

Em seguida, vá para /data/data/package name/shared preferences folder/name of your preferences.xml, você pode usar o ES File explorer e vá para o rootdo seu dispositivo, não sd card.

user5291072
fonte
1
Isso não fornece uma resposta para a pergunta. Para criticar ou solicitar esclarecimentos de um autor, deixe um comentário abaixo de sua postagem - você sempre pode comentar suas próprias postagens e, assim que tiver reputação suficiente , poderá comentar em qualquer postagem . - Da avaliação
Luca Detomi
@LucaDetomi você sabe do que estou saindo daqui
user5291072
Sua resposta foi marcada como muito curta. As respostas devem conter detalhes que permitam aos usuários entender "por que" pode ser uma boa resposta e talvez a melhor. Eu sugiro que você adicione mais detalhes que ajudem a entender os princípios e talvez adaptá-los a outras questões semelhantes
Luca Detomi
4

Para abrir o compartilhado preferenceno Android Studio

Abra o arquivo do explorador de dispositivos do lado direito - dados> dados>> shared_prefs

encontre a imagem em anexo para mais descrição

Shwetank
fonte
3

No Android Studio 3 :

  • Abra o Device File Explorer (parte inferior direita da tela).
  • Vá para data / data / com.yourAppName / shared_prefs.

ou use o Android Debug Database

Jeffrey
fonte
2

Execute o aplicativo no emulador após inserir alguns dados, basta fechar o aplicativo.

Agora abra o DDMS ou Android Monitor e selecione seu emulador, no lado direito você pode ver o File Explorer, procure a pasta Data nela e procure seu pacote de aplicativo que você criou, onde você pode encontrar o arquivo de preferência compartilhado aberto nele, você pode ver o arquivo XML, clique nele e clique no botão puxar um arquivo do dispositivo no canto superior direito.

O arquivo XML será salvo no local desejado, então você pode abri-lo usando qualquer editor como o notepad ++ e pode visualizar os dados inseridos.

Naren
fonte
No Android Studio 3.0 , eu o encontrei em Device File Explorer > data> data> (package name)> shared_prefs> (package name) _preferences.xml
Josselin
2

No Device File Explorer, siga o caminho abaixo: -

/data/data/com.**package_name**.test/shared_prefs/com.**package_name**.test_preferences.xml
neelkanth_vyas
fonte
1

Sempre acho esses comandos úteis no console:

  1. Encontre o nome de arquivo correto

    adb shell

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

  2. Coloque o arquivo no diretório local

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

  3. Verifique no seu $local_dir.

Rosa
fonte
1

Se você estiver usando um emulador, poderá ver o sharedPrefs.xmlarquivo no terminal com estes comandos:

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

depois disso, você pode usar adb unrootse não quiser manter o dispositivo virtual com acesso root.

Rodrirokr
fonte