Realm을 안드로이드에 적용하고 Stetho 쓰려다가 빡친 사연
728x90
반응형

Realm은 모바일 DB로 각광을 받고 있는 오픈소스이다.

Local DB를 써야하는 상황에서 안드로이드 내부 sqlite가 있지만

Realm이 가진 직관적인 사용법에 매력을 느끼게 되어 이번에 사용하고 있다.


Realm DB를 Realm에서 제공하는 Realm Studio를 사용할 수 있지만

ADB 세팅하기 귀찮아서 뭐가 또 있는지 찾아보니

Stetho라는 것을 발견하였다.




A debug bridge for Android applications

위 문장으로 시작하는 Stetho 공식 홈페이지.
크롬 브라우저 기반으로 네트워크 추적이나 데이터 조회, Dump app 제공 등이 가능하다.

Realm의 경우에는 따로 세팅이 필요하다.
Stetho-Realm은 Github에서 가이드를 하고 있다.
Gradle 세팅하고 Initialize하면 끝인걸로 보여서 금방 하겠구나 했다.
하지만 1시간... 2시간....
그냥 손을 놨어야 했는데.



머리를 부여잡은 내 모습을 옆 직장동료도 봤으리라.

뭐라고 생각했을까.

빡침이 치밀어 오르는 것을 겨우 참고

누군가 해결해주기를 간절히 바라면서 StackOverFlow에 문제를 게시.

그리고 퇴근을 했다.


다시 출근을 했을 때 Realm-Java 담당자로 보이는 분이 솔루션을 달아주었고

광명과 같은 결과 화면을 볼 수 있었다. (기쁨 + 환희)


많은 분들의 혈압을 보호하기 위해

그 해결책을 여기에 남긴다.



App Gradle


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
apply plugin: 'realm-android'
 
android {
    compileSdkVersion 27
    defaultConfig {
        ...
        minSdkVersion 23
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }
 
dependencies {
    ...
    implementation 'com.android.support:multidex:1.0.3'
    ...
 
    // Stetho
    implementation 'com.facebook.stetho:stetho:1.5.0'
    implementation 'com.uphyca:stetho_realm:2.3.0'
}
cs



Project Gradle


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
buildscript {
    ...
 
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'
        ...
        classpath "io.realm:realm-gradle-plugin:5.3.1"
    }
}
 
 
allprojects {
    repositories {
        google()
        jcenter()
        ...
        maven {
            url 'https://github.com/WickeDev/stetho-realm/raw/master/maven-repo'
        }
    }
}
 
...
cs


App Gradle과 Project Gradle 내용이 stetho-realm github 페이지와 내용이 다를 것이다.

StackOverFlow의 답변가 얘기로는 아직 지원되지 않는 Realm 버전이 있다고 한다.

그래서 아직 공개되지 않은 2.3.0을 알려준 것으로 보인다.



AndroidManifest.xml


1
2
3
4
<application
    android:name=".MyApp"
    ....
</application>
cs



MyApp.java


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class MyApp extends Application{
 
    @Override
    public void onCreate() {
        super.onCreate();
 
        Realm.init(this);
        RealmConfiguration config = new RealmConfiguration.Builder().build();
        Realm.setDefaultConfiguration(config);
 
        // Stetho
        RealmInspectorModulesProvider provider = RealmInspectorModulesProvider.builder(this)
                                            .withDeleteIfMigrationNeeded(true)
                                            .build();
 
        Stetho.initialize(Stetho.newInitializerBuilder(this)
                .enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
                .enableWebKitInspector(provider)
                .build());
 
    }
 
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}
cs



attachBaseContext 부분은 무시해도 된다.

하지만 onCreate 부분을 적용해도 안될 경우에는

attachBaseContext를 넣어서 확인해보자.



위와 같이 영광스러운 화면을 영접할 수 있다.

하지만 아직 내 문제는 끝나지 않았다.

최초의 실행에서는 위와 같이 잘 실행되는데

DB에 변경이 있은 후에는 다음과 같은 이미지가 나타난다.



Detached from the target

이건 앞으로 나의 숙제.

일단은 Data를 봤으니 만족~





728x90
반응형