Como visualizo meu arquivo de território no navegador de domínios?


127

Acabei de descobrir o Realm e queria explorá-lo com mais detalhes, por isso decidi criar um aplicativo de exemplo e ter uma bagunça com ele. Por enquanto, tudo bem.

No entanto, uma coisa que ainda não consegui resolver é como visualizar meu banco de dados no Realm Browser. Como isso pode ser feito?


QUER A MANEIRA FÁCIL? Pule o log de caminho, comandos adb e dor de cabeça. @devsmash tem a resposta: stackoverflow.com/a/49705298/483520
— Nolan Amy

Respostas:


131

Atualmente, o Realm Browser não suporta o acesso a bancos de dados diretamente no dispositivo, portanto, você precisa copiar o banco de dados do emulador / telefone para visualizá-lo. Isso pode ser feito usando o ADB:

adb pull /data/data/<packagename>/files/ .

Esse comando puxará todos os arquivos de região criados usando Realm.getInstance(new RealmConfiguration.Builder().build()). O banco de dados padrão é chamado default.realm.

Observe que isso funcionará apenas em um emulador ou se o dispositivo estiver enraizado.


25
Você também pode registrar o caminho exato do seu aplicativo com: Log.d ("", "path:" + realm.getPath ());
— bmunk

39
Portanto, o Realm Browser para Mac é inútil. Quem usa o emulador
— Jemshit Iskenderov

10
Para dispositivos não-enraizados, este script funciona: gist.github.com/jk2K/a66ed67b252b880824b32dd4952d1b39
— jmartinalonso

3
Se você receber um erro como o arquivo não encontrado, execute o comando adb root primeiro antes de puxar o arquivo de região.
— Randy

Isso funciona após o uso do adb root, mas não importa o que eu faça, o arquivo de região diz que é criptografado ao usar o navegador de região. Sim, eu li sobre corrupção e coisas assim, mas nada que eu tento está funcionando. Algo mudou no reino?
— Mike Eixo

104

Agora você pode visualizar o Realm DB no navegador Chrome usando Stetho , desenvolvido pelo Facebook. Por padrão, o Stetho permite visualizar Sqlite, rede, preferências compartilhadas, mas com plug-in adicional aqui, também é possível visualizar o Domínio.

Depois de configurar sua Applicationclasse com as bibliotecas acima, enquanto o aplicativo estiver em execução e conectado, abra o navegador Chrome e navegue chrome://inspectpara ver


insira a descrição da imagem aqui

Então Resources->Web Sql->default.realm


insira a descrição da imagem aqui


2
Falha ao resolver: com.uphyca: stetho_realm: 0.8.0 Alguém pode me ajudar com isso? Sinto muito, eu não sou um usuário de mac, então parece que dessa maneira é o único que posso procurar no meu arquivo de banco de dados.
— precisa saber é o seguinte

4
Você adicionou o URL https://github.com/uPhyca/stetho-realm/raw/master/maven-repocomo mostrado aqui github.com/uPhyca/stetho-realm
— Jemshit Iskenderov

2
A culpa é minha, muito obrigado! Eu perdi isso. Agora funciona como deveria!
— precisa saber é o seguinte

1
Eu assisto as alterações da tabela "A" clicando em outra tabela e, em seguida, clicando na tabela "A" novamente @AlexKost
— Jemshit Iskenderov

1
veja este post se alguém tem problema com campos vendo: github.com/uPhyca/stetho-realm/issues/45 .... eu vejo os meus campos, mas há dados .... hmmm
— Mike6679

56

Você também pode extrair seu arquivo de qualquer dispositivo não raiz usando o shell ADB e o comando executar como.

Você pode usar estes comandos para extrair do armazenamento privado do seu aplicativo um banco de dados chamado your_database_file_name localizado na pasta files:

adb shell "run-as package.name chmod 666 /data/data/package.name/files/your_database_file_name"

// For devices running an android version lower than Android 5.0 (Lollipop)
adb pull /data/data/package.name/files/your_database_file_name

// For devices running an Android version equal or grater
// than Android 5.0 (Lollipop)
adb exec-out run-as package.name cat files/your_database_file_name > your_database_file_name
adb shell "run-as package.name chmod 600 /data/data/package.name/files/your_database_file_name"

3
Acordado. Como podemos definir o aplicativo para depurável, podemos extrair o arquivo com isso sem raiz.
— precisa saber é o seguinte

existe alguma outra maneira de extrair banco de dados de apk não-depurável?
— JEGADEESAN S

se isso seria possível, todo o sistema operacional android seria completamente inseguro, há uma chance que poderia ser possível apenas em dispositivos enraizadas, mas eu nunca fiz isso
— Apperside

Isso pode não funcionar em dispositivos Samsung devido a suas implementações executadas de buggy.
— 21318 SkorpEN

Então, podemos usar isso para importar nosso domínio editado de volta ao seu lugar? adb exec-out run-as package.name cat files/your_database_file_name < your_database_file_name
— Ender

52

Se você tiver preguiça de obter o arquivo de banco de dados de regiões sempre com o adb, poderá adicionar uma função de exportação ao seu código android, que envia um email com o arquivo de banco de dados de regiões como anexo.

Aqui está um exemplo:

public void exportDatabase() {

    // init realm
    Realm realm = Realm.getInstance(getActivity());

    File exportRealmFile = null;
    try {
        // get or create an "export.realm" file
        exportRealmFile = new File(getActivity().getExternalCacheDir(), "export.realm");

        // if "export.realm" already exists, delete
        exportRealmFile.delete();

        // copy current realm to "export.realm"
        realm.writeCopyTo(exportRealmFile);

    } catch (IOException e) {
        e.printStackTrace();
    }
    realm.close();

    // init email intent and add export.realm as attachment
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("plain/text");
    intent.putExtra(Intent.EXTRA_EMAIL, "YOUR MAIL");
    intent.putExtra(Intent.EXTRA_SUBJECT, "YOUR SUBJECT");
    intent.putExtra(Intent.EXTRA_TEXT, "YOUR TEXT");
    Uri u = Uri.fromFile(exportRealmFile);
    intent.putExtra(Intent.EXTRA_STREAM, u);

    // start email intent
    startActivity(Intent.createChooser(intent, "YOUR CHOOSER TITLE"));
}

Não se esqueça de adicionar esta permissão de usuário ao seu arquivo de manifesto do Android:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

3
Isso é especialmente bom se você usar o Pushbullet . Em seguida, você pode enviar uma mensagem para o navegador Chrome e ele fará o download do arquivo. O arquivo pode ser aberto no Realm Browser
— ymerdrengene

1
Falha no Android 8.0
— EGHDK 23/08

42

Para Android (não é necessário fazer root no seu dispositivo)

Para obter uma cópia de qualquer banco de dados do Realm no seu dispositivo, vá para o Device File Explorer no Android Studio.

Navegue para /data/data/your.package.name/files/.

Lá você encontrará seus arquivos * .realm. Clique com o botão direito e, em seguida, em Salvar como . Certifique-se de sincronizar antes de salvá-los.

Use o Realm Browser ou qualquer um destes para visualizar arquivos * .realm:

Digite a descrição da imagem aqui


2
Esta solução simples, este deve agora ser a resposta
— Steven Elliott

Absolutamente. Este é o caminho. N
— Nolan Amy

Verifique se seu aplicativo está definido como debuggable false para visualizar os dados.
— Aman Verma

@AmanVerma É depuração USB nas Opções do desenvolvedor. Depuração USB deve estar habilitado para arquivo de uso de dispositivos Explorador
— krhitesh

Studio pode baixar reino do usuário Linux usando realm.io/products/realm-studio arquivo reino e aberto de lá
— B.shruti

19

Existe uma solução alternativa. Você pode acessar diretamente o arquivo no monitor do dispositivo. Você pode acessar esse diretório apenas quando estiver usando um emulador ou dispositivo raiz.

No Android Studio:

Selecione

Menu Ferramentas → Android → Monitor de dispositivo Android → Explorador de arquivos → dados → dados → (Nome do seu pacote) → arquivos → * db.realm

Puxe este arquivo do dispositivo:

Digite a descrição da imagem aqui

No Android Studio 3 canary 1, o Device File Explorer foi introduzido. Você precisa procurar o arquivo de região aqui. Em seguida, (selecione seu pacote) → selecione o arquivo de região → Clique com o botão direito e salve.

Digite a descrição da imagem aqui

E abra o arquivo no Realm Browser. Você pode ver seus dados agora.


Obrigado. no entanto, é não trabalhar com verdadeira device.It só funciona com Emulator
— Pratham kesarkar

1
@prathamkesarkar, é por isso que escrevi emulador ou dispositivo raiz, porque você não pode obter acesso a essas pastas em um dispositivo normal.
— 214 Aveek

14

Você pode acessar o arquivo de região diretamente. Aqui está a solução que eu usei.

Primeiro, você pode copiar o arquivo de região localizado em '/ data / data / packagename / files' para Environment.getExternalStorageDirectory () + '/ FileName.realm':

public class FileUtil {
    public static void copy(File src, File dst) throws IOException {
        InputStream in = new FileInputStream(src);
        OutputStream out = new FileOutputStream(dst);

        // Transfer bytes from in to out
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
    }
}

Realm realm = null;
try {
    realm = Realm.getInstance(this);
        File f = new File(realm.getPath());
        if (f.exists()) {
            try {
                FileUtil.copy(f, new File(Environment.getExternalStorageDirectory()+"/default.realm"));
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
}
finally {
    if (realm != null)
        realm.close();
}

Segundo, use a ferramenta ADB para extrair esse arquivo assim:

$ adb pull /sdcard/default.realm.

Agora você pode abrir o arquivo no Realm Browser.


6

Aqui está uma solução que não requer que o seu telefone esteja enraizado, usando o run-ascomando presente no adbshell do aplicativo. A única condição prévia é que você deve ter uma compilação de depuração do seu aplicativo instalada no telefone de destino.

$ adb shell
$ run-as com.yourcompany.yourapp # pwd will return /data/data/com.yourcompany.yourapp
$ cp files/default.realm /sdcard
$ exit
$ exit
$ adb pull /sdcard/default.realm ~/Desktop # or wherever you want to put it

Você terá uma cópia do banco de dados de qualquer telefone dentro do diretório local, que poderá ser carregado no navegador de região.


1
caminho padrão do adb do mac ... / Biblioteca / Android / sdk / platform-tools #
— Francisco Castro

3

Agora você pode acessá-lo diretamente se estiver usando um emulador.

Primeiro, registre o caminho em que o arquivo está no emulador, como @bmunk diz:

Log.d(TAG, "path: " + realm.getPath());

Segundo Pesquise e clique com o botão direito do mouse no arquivo e escolha "Salvar como", na caixa de diálogo aparecerá a rota onde o arquivo realmente está no seu sistema.

insira a descrição da imagem aqui Você pode copiar a rota na caixa de diálogo Salvar como

E então, basta colar a rota na caixa de diálogo "Abrir arquivo local" do Realm Studio.

(Eu testei isso apenas no Windows)


1
Esta é a resposta mais útil, obrigado! Não mostra o caminho para o macOS, mas ainda é fácil localizar o arquivo.
— Maria

1

Aqui está o meu script shell pronto para uso. Apenas mude o nome do pacote e seus caminhos adb, o script fará o necessário.

#!/bin/sh
ADB_PATH="/Users/medyo/Library/Android/sdk/platform-tools"
PACKAGE_NAME="com.mobiacube.elbotola.debug"
DB_NAME="default.realm"
DESTINATION_PATH="/Users/Medyo/Desktop/"
NOT_PRESENT="List of devices attached"
ADB_FOUND=`${ADB_PATH}/adb devices | tail -2 | head -1 | cut -f 1 | sed 's/ *$//g'`
if [[ ${ADB_FOUND} == ${NOT_PRESENT} ]]; then
    echo "Make sure a device is connected"
else
    ${ADB_PATH}/adb shell "
        run-as ${PACKAGE_NAME} cp /data/data/${PACKAGE_NAME}/files/${DB_NAME} /sdcard/
        exit
    "
    ${ADB_PATH}/adb pull "/sdcard/${DB_NAME}" "${DESTINATION_PATH}"
    echo "Database exported to ${DESTINATION_PATH}${DB_NAME}"
fi

Mais detalhes nesta publicação do blog: http://medyo.github.io/2016/browse-populate-and-export-realm-database-on-android/


1

Mantendo simples:

/Users/inti/Library/Android/sdk/platform-tools/adb exec-out run-as com.mydomain.myapp cat files/default.realm > ~/Downloads/default.realm

Explicação:

  1. Encontre o caminho para sua adbinstalação. Se você estiver usando o Android Studio, consulte Arquivo> Estrutura do projeto> Local do SDK> Local do Android SDK e anexe platform-toolsa esse caminho.
  2. Use o nome completo do seu aplicativo para o run-asargumento
  3. Decida para onde você deseja copiar o arquivo de região

NB: O arquivo é chamado default.realm porque não mudei o nome ao configurá-lo - o seu pode ser diferente.


1

Você tem poucas opções para visualizar seus arquivos de domínio do Android:

  1. Como @Christian Melchior disse que você pode extrair seu banco de dados de região do dispositivo e abri-lo no seu Mac usando o OSX Realm Browser

  2. Você pode usar o Android Realm Browser de terceiros que eu criei, para facilitar o desenvolvimento do Android com o reino. O aplicativo mostrará todos os arquivos de região no seu dispositivo e você poderá visualizar todos os arquivos de região em tempo real enquanto estiver testando seu aplicativo.

  3. Você pode usar o navegador Chrome Stetho A descrição completa de como usar o Setho é fornecida pela resposta @Jemshit Iskendero.


0

Aqui está uma concha para pessoas preguiçosas como eu :)

O .realmarquivo será armazenado dentro da tmpRealm/pasta ao lado do .sharquivo.

#!/bin/sh
adb shell 'su -c "
cd /data/data/<packagename>/files
ls
rm -rf /data/local/tmp/tmpRealm/
mkdir /data/local/tmp/tmpRealm/
cp /data/data/com.arefly.sleep/files/* /data/local/tmp/tmpRealm
chown shell.shell /data/local/tmp/tmpRealm/*
"'
rm -rf ./tmpRealm/
adb pull /data/local/tmp/tmpRealm ./

Ou se você preferir deixar tmpRealm/o cartão SD:

#!/bin/sh
adb shell 'su -c "
cd /data/data/com.arefly.sleep/files
ls
mount -o rw,remount $EXTERNAL_STORAGE/
rm -rf $EXTERNAL_STORAGE/tmpRealm
mkdir $EXTERNAL_STORAGE/tmpRealm
cp /data/data/com.arefly.sleep/files/* $EXTERNAL_STORAGE/tmpRealm
"'
rm -rf ./tmpRealm/
# http://unix.stackexchange.com/a/225750/176808
adb pull "$(adb shell 'echo "$EXTERNAL_STORAGE"' | tr -d '\r')/tmpRealm" ./

Referência:

  1. https://stackoverflow.com/a/28486297/2603230
  2. https://android.stackexchange.com/a/129665/179720
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.