답변:
현재 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
https://github.com/uPhyca/stetho-realm/raw/master/maven-repo
여기에 표시된대로 URL을 추가 했습니까? github.com/uPhyca/stetho-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 exec-out run-as package.name cat files/your_database_file_name < 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" />
장치에서 Realm 데이터베이스의 사본을 얻으려면 Android Studio의 장치 파일 탐색기 로 이동하십시오 .
로 이동하십시오 /data/data/your.package.name/files/
.
거기서 * .realm 파일을 찾을 수 있습니다. 마우스 오른쪽 단추를 클릭 한 다음 다른 이름으로 저장을 클릭 하십시오 . 저장하기 전에 반드시 동기화하십시오.
* .realm 파일을 보려면 Realm Browser 또는 이들 중 하나를 사용하십시오 :
해결 방법이 있습니다. 장치 모니터에서 파일에 직접 액세스 할 수 있습니다. 에뮬레이터 또는 루팅 된 장치를 사용하는 경우에만이 디렉토리에 액세스 할 수 있습니다.
Android Studio에서 :
고르다
메뉴 도구 → Android → Android 장치 모니터 → 파일 탐색기 → 데이터 → 데이터 → (귀하의 패키지 이름) → 파일 → * 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에서 파일을 열 수 있습니다.
다음은 쉘 run-as
내부에 존재 하는 명령 을 사용하여 휴대 전화를 근절 할 필요가없는 솔루션입니다 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의 "로컬 파일 열기"대화창에 경로를 붙여 넣으십시오.
(이것은 Windows에서만 테스트했습니다)
바로 사용할 수있는 쉘 스크립트입니다. 패키지 이름과 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 Studio를 사용하는 경우 파일> 프로젝트 구조> SDK 위치> Android SDK 위치 platform-tools
를보고 해당 경로를 추가하십시오 .run-as
인수에 앱의 정규화 된 이름을 사용하십시오.주의 : 파일을 구성 할 때 이름을 변경하지 않았기 때문에 파일의 이름이 default.realm입니다. 파일 이름이 다를 수 있습니다.
안드로이드 영역 파일을 볼 수있는 옵션이 거의 없습니다 :
@Christian Melchior는 OSX Realm Browser를 사용하여 장치에서 영역 데이터베이스를 가져 와서 Mac에서 열 수 있다고 말했습니다.
내가 만든 타사 Android Realm Browser 를 사용하여 안드로이드 개발을 좀 더 쉽게 할 수 있습니다. 앱은 장치의 모든 영역 파일을 표시하며 앱을 테스트하는 동안 모든 영역 파일을 실시간으로 볼 수 있습니다.
Chrome 브라우저를 사용할 수 있습니다 Stetho 자세한 설명 Setho 를 사용하는 방법은 @Jemshit Iskendero answer에서 제공합니다.
나 같은 게으른 사람들을위한 껍질이 있습니다 :)
.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" ./
참고: