programing

Realm Browser에서 Realm 파일을 표시하려면 어떻게 해야 하나요?

bestcode 2022. 9. 8. 22:06
반응형

Realm Browser에서 Realm 파일을 표시하려면 어떻게 해야 하나요?

방금 왕국을 발견해서 좀 더 자세히 알아보고 싶어서 샘플 어플리케이션을 만들어서 엉망진창으로 만들기로 했습니다.아직까지는 좋아.

하지만 아직 해결하지 못한 한 가지는 Realm Browser에서 내 데이터베이스를 보는 방법입니다.이것이 어떻게 행해지는가?

현재 Realm Browser는 디바이스에서 직접 데이터베이스에 액세스할 수 없으므로 에뮬레이터/전화기에서 데이터베이스를 복사하여 표시해야 합니다.이것은 ADB를 사용하여 실행할 수 있습니다.

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

.Realm.getInstance(new RealmConfiguration.Builder().build())는 . 입니다default.realm.

이 기능은 에뮬레이터 또는 디바이스가 루트에 연결되어 있는 경우에만 작동합니다.

Facebook에서 개발한 Stetho를 사용하여 Chrome 브라우저에서 Realm DB를 볼 수 있게 되었습니다.디폴트로는 Stetho에서는 SQLite, 네트워크, 공유 환경설정을 표시할 수 있습니다.단, 추가 플러그인을 사용하면 레름도 표시할 수 있습니다.

" " " "Application의 라이브러리가 및 있는 Chrome으로 이동합니다.chrome://inspect


여기에 이미지 설명 입력

★★★★★★★★★★★★★★★.Resources->Web Sql->default.realm


여기에 이미지 설명 입력

ADB 쉘 및 run-as 명령을 사용하여 루트 이외의 디바이스에서 파일을 가져올 수도 있습니다.

다음 명령을 사용하여 파일 폴더에 있는 your_database_file_name이라는 이름의 데이터베이스를 앱의 개인 저장소에서 가져올 수 있습니다.

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"

렐름 데이터베이스 파일을 adb로 매번 가져오는 것이 귀찮은 경우 안드로이드 코드에 내보내기 기능을 추가하면 렐름 데이터베이스 파일을 첨부하여 이메일을 보낼 수 있습니다.

다음은 예를 제시하겠습니다.

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

Android Manifest 파일에 다음 사용자 권한을 추가하는 것을 잊지 마십시오.

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

Android의 경우(단말기를 루팅할 필요가 없음)

장치에서 Realm 데이터베이스의 복사본을 가져오려면 Android Studio의 Device File Explorer로 이동하십시오.

를 해 ./data/data/your.package.name/files/.

여기서 *.realm 파일을 찾을 수 있습니다.오른쪽 버튼을 클릭한 후 다른 이름으로 저장.파일을 저장하기 전에 동기화해야 합니다.

Realm Browser 또는 다음 중 하나사용하여 *.realm 파일을 표시합니다.

여기에 이미지 설명을 입력하십시오.

회피책이 있습니다.디바이스 모니터에서 파일에 직접 액세스 할 수 있습니다.이 디렉토리는 에뮬레이터 또는 루트 디바이스를 사용하고 있는 경우에만 액세스 할 수 있습니다.

Android Studio의 경우:

선택한다.

메뉴 도구 → AndroidAndroid 장치 모니터 → File Explorer → data → data → (패키지 이름) → files → *db.html

디바이스에서 다음 파일을 꺼냅니다.

여기에 이미지 설명을 입력하십시오.

Android Studio 3 canary 1부터 Device File Explorer가 도입되었습니다.렐름 파일을 찾아야 합니다.그런 다음 (패키지 선택) → 영역 파일 선택 → 마우스 오른쪽 버튼을 클릭하여 저장합니다.

여기에 이미지 설명을 입력하십시오.

렐름 브라우저로 파일을 엽니다.이제 데이터를 볼 수 있습니다.

레름 파일에 직접 액세스 할 수 있습니다.여기 제가 사용한 솔루션이 있습니다.

먼저 '/data/data/packagename/files'에 있는 영역 파일을 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();
}

다음으로 ADB 도구를 사용하여 다음과 같이 파일을 가져옵니다.

$ adb pull /sdcard/default.devault.devel.d

이제 Realm Browser에서 파일을 열 수 있습니다.

루트가 해결 .run-as internal 명령어adb 전화기에 .유일한 전제 조건은 대상 전화기에 앱의 디버깅 빌드를 설치해야 한다는 것입니다.

$ 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

로컬 디렉토리내의 임의의 전화기로부터 DB 의 카피를 입수할 수 있습니다.이 복사본은 Realm Browser 에 로드할 수 있습니다.

이제 에뮬레이터를 사용하는 경우 직접 액세스할 수 있습니다.

번째 에뮬레이터에 파일이 있는 경로를 기록합니다.@bmunk는 다음과 같습니다.

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

두 번째 검색 후 파일을 마우스 오른쪽 버튼으로 클릭하고 "다른 이름으로 저장"을 선택합니다. 대화상자에 파일이 실제로 시스템에 있는 경로가 나타납니다.

여기에 이미지 설명 입력 다른 이름으로 저장 대화 상자에서 경로를 복사할 수 있습니다.

그런 다음 Realm Studio의 "Open Local File" 대화상자에 경로를 붙여넣기만 하면 됩니다.

(이것은 Windows에서만 테스트하고 있습니다)

지금까지 2년 이상 렐름 브라우저는 모든 운영체제(mac, linux, windows)에서 사용할 수 있게 되었습니다.

https://docs.realm.io/sync/realm-studio

직진.

바로 사용할 수 있는 셸 스크립트입니다.패키지명과 adb 경로만 변경하면 스크립트는 필요한 작업을 수행합니다.

#!/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

상세한 것에 대하여는, http://medyo.github.io/2016/browse-populate-and-export-realm-database-on-android/ 를 참조해 주세요.

심플화:

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

설명:

  1. 「」의 합니다.adbAndroid > Project Structure > > Android SDK Location and append Android Studio를 참조하십시오.platform-tools그 경로로.
  2. 앱의 정규화된 이름을 사용하여run-as논쟁
  3. 영역 파일을 복사할 위치를 결정합니다.

NB: 파일을 구성할 때 파일 이름을 변경하지 않았기 때문에 파일 이름은 default.realm입니다.파일명은 다를 수 있습니다.

Android 영역 파일을 볼 수 있는 몇 가지 옵션이 있습니다.

  1. 예를 들어 @Christian Melchior가 OSX Realm Browser를 사용하여 단말기에서 렐름 데이터베이스를 가져와 Mac에서 열 수 있습니다.

  2. 제가 만든 서드파티제의 Android Realm Browser를 사용하면 렐름과 함께 Android 개발을 조금 더 쉽게 할 수 있습니다.앱은 장치에 있는 모든 레름 파일을 표시하며, 앱을 테스트하는 동안 모든 레름 파일을 실시간으로 볼 수 있습니다.

  3. Chrome 브라우저 Stetho를 사용할 수 있습니다.Setho의 사용 방법에 대한 자세한 설명은 @Jemshit Iskendero answer에서 제공합니다.

Realm Browser는 더 이상 사용되지 않습니다. 대신 Realm Studio를 사용하십시오.

여기서

파일 경로 보기

console.log(realm.path)

root로 adb 로그인

adb root

영역 파일을 로컬 dir로 가져옵니다.

adb pull /data/data/{app.identifier.com}/files/default.realm .

Realm Studio의 결과 보기

Realm 스튜디오의 결과 보기

여기 나 같은 게으른 사람들을 위한 껍데기가 있다:)

.realm파일이 저장된다.tmpRealm/옆에 있는 폴더.sh파일.

#!/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 ./

아니면 네가 원하는 대로tmpRealm/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" ./

레퍼런스:

  1. https://stackoverflow.com/a/28486297/2603230
  2. https://android.stackexchange.com/a/129665/179720

언급URL : https://stackoverflow.com/questions/28478987/how-do-i-view-my-realm-file-in-the-realm-browser

반응형