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?

Andy Joyce
fonte
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.

Christian Melchior
fonte
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

Jemshit Iskenderov
fonte
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"
Apperside
fonte
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" />
ruclip
fonte
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

krhitesh
fonte
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 FerramentasAndroidMonitor de dispositivo AndroidExplorador de arquivosdadosdados → (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.

Aveek
fonte
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.

Rooney
fonte
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.

Pedro Alvarez-Tabio
fonte
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)

Brugui
fonte
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/

Mehdi Sakout
fonte
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.

Inti
fonte
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.

SocialError
fonte
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
He Yifei 何 一 非
fonte