[java] Realm Browser에서 Realm 파일을 보려면 어떻게합니까?

방금 Realm을 발견하고 더 자세히 살펴보고 싶었으므로 샘플 응용 프로그램을 만들고 엉망으로 만들었습니다. 여태까지는 그런대로 잘됐다.

그러나 아직 해결하지 못한 것 중 하나는 Realm Browser에서 데이터베이스를 보는 방법입니다. 이것을 어떻게 할 수 있습니까?



답변

현재 Realm Browser는 장치에서 직접 데이터베이스에 액세스하는 것을 지원하지 않으므로 에뮬레이터 / 전화에서 데이터베이스를 복사하여보아야합니다. ADB를 사용하여 수행 할 수 있습니다.

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

이 명령은를 사용하여 생성 된 모든 Realm 파일을 가져옵니다 Realm.getInstance(new RealmConfiguration.Builder().build()). 기본 데이터베이스는이라고 default.realm합니다.

이것은 에뮬레이터에서만 작동하거나 장치가 루팅 된 경우에만 작동합니다.


답변

이제 Facebook에서 개발 한 Stetho를 사용하여 Chrome 브라우저에서 Realm DB를 볼 수 있습니다 . 기본적으로 Stetho에서는 Sqlite, 네트워크, 공유 환경 설정 을 볼 수 있지만 추가 플러그인을 사용하면 Realm도 볼 수 있습니다.

당신 구성한 후 Application응용 프로그램이 열려 크롬 브라우저와 탐색을 실행하고 연결되어있는 동안 것은, 위의 라이브러리와 클래스를 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의 장치 파일 탐색기 로 이동하십시오 .

로 이동하십시오 /data/data/your.package.name/files/.

거기서 * .realm 파일을 찾을 수 있습니다. 마우스 오른쪽 단추를 클릭 한 다음 다른 이름으로 저장을 클릭 하십시오 . 저장하기 전에 반드시 동기화하십시오.

* .realm 파일을 보려면 Realm Browser 또는 이들 중 하나를 사용하십시오 :

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


답변

해결 방법이 있습니다. 장치 모니터에서 파일에 직접 액세스 할 수 있습니다. 에뮬레이터 또는 루팅 된 장치를 사용하는 경우에만이 디렉토리에 액세스 할 수 있습니다.

Android Studio에서 :

고르다

메뉴 도구AndroidAndroid 장치 모니터파일 탐색기데이터데이터 → (귀하의 패키지 이름) → 파일 → * db.realm

장치에서이 파일을 가져옵니다.

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

Android Studio 3 카나리아 1부터 장치 파일 탐색기가 도입되었습니다. 여기서 영역 파일을 찾아야합니다. 그런 다음 (패키지를 선택하십시오) → 영역 파일을 선택하십시오 → 마우스 오른쪽 버튼을 클릭하고 저장하십시오.

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

Realm Browser에서 파일을 엽니 다. 이제 데이터를 볼 수 있습니다.


답변

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

먼저 ‘/ 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.realm.

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