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의 경우:
선택한다.
메뉴 도구 → Android → Android 장치 모니터 → 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
설명:
- 「」의 합니다.
adb
Android > Project Structure > > Android SDK Location and append Android Studio를 참조하십시오.platform-tools
그 경로로. - 앱의 정규화된 이름을 사용하여
run-as
논쟁 - 영역 파일을 복사할 위치를 결정합니다.
NB: 파일을 구성할 때 파일 이름을 변경하지 않았기 때문에 파일 이름은 default.realm입니다.파일명은 다를 수 있습니다.
Android 영역 파일을 볼 수 있는 몇 가지 옵션이 있습니다.
예를 들어 @Christian Melchior가 OSX Realm Browser를 사용하여 단말기에서 렐름 데이터베이스를 가져와 Mac에서 열 수 있습니다.
제가 만든 서드파티제의 Android Realm Browser를 사용하면 렐름과 함께 Android 개발을 조금 더 쉽게 할 수 있습니다.앱은 장치에 있는 모든 레름 파일을 표시하며, 앱을 테스트하는 동안 모든 레름 파일을 실시간으로 볼 수 있습니다.
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
파일이 저장된다.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" ./
레퍼런스:
언급URL : https://stackoverflow.com/questions/28478987/how-do-i-view-my-realm-file-in-the-realm-browser
'programing' 카테고리의 다른 글
문자열 끝에서 서브스트링을 제거하려면 어떻게 해야 하나요? (0) | 2022.09.08 |
---|---|
UPDATE 쿼리에서 3개의 테이블 JOIN을 수행하려면 어떻게 해야 합니까? (0) | 2022.09.08 |
Python try...제외(쉼표 vs 'as' 제외) (0) | 2022.09.08 |
현재 사용하고 있는 CodeIgniter 버전은 무엇입니까? (0) | 2022.09.08 |
jQuery의 $.ready()에 상당하는 Vanilla JavaScript - 페이지/DOM이 준비되었을 때 함수를 호출하는 방법 (0) | 2022.09.05 |