안드로이드 개발 앱에서 만든 DB 소스로 추출하는 방법

안드로이드 개발

안드로이드 개발 앱에서 만든 DB 소스로 추출하는 방법

 

환경: Android Studio

 

앱에서 만든 DB 의 내용을 컴퓨터에서 확인하고 싶거나 스마트폰에 별도로 저장해야 되는 경우 소스에서도 가능합니다. 저는 Android Device Monitor File Explorer 에서 DB 를 추출하지 못할 때 사용했었습니다. 자주 사용할 일은 없겠지만 알아 두면 유용하게 써먹을 날이 있을 겁니다.

 

앱에서 만든 데이터베이스는 다음 폴더 주소에 있습니다. data > [앱 패키지명] > [databases] > [데이터베이스명] 으로 들어가서 폴더 안에 있는 addressbook.db 를 소스에서 다운받아 보겠습니다. 이것을 응용하면 안드로이드에서 관리하는 DB 도 다운로드가 가능합니다. 예를 들어 연락처 정보 같은 것들이죠. 하지만 스마트폰에 있는 연락처 정보는 접근할 수 없습니다.

안드로이드 개발 앱에서 만든 DB 소스로 추출하는 방법

 

먼저 앱에서 만든 DB 를 소스로 다운받기 위해서는 퍼미션이 필요합니다. 아래 두 가지 퍼미션을 AndroidManifest.xml 에 추가합니다

<!-- DB 조회를 위한 퍼미션 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

DB 에 저장한 내용은 다음과 같습니다. 소스로 다운 받은 DB 에 저장한 내용이 있는지 확인해 보겠습니다. DB 저장 소스는 소개하지 않겠습니다. 오늘은 DB 파일을 저장하는 내용만 포스팅 하겠습니다

안드로이드 개발 앱에서 만든 DB 소스로 추출하는 방법

 

소스는 다음과 같습니다. 버튼을 클릭하면 sqliteExport() 함수를 실행하게 됩니다. currentDBPath 에는 다운 받을 DB 주소를 넣고 backupDBPath 는 저장될 파일명을 입력합니다

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.example.gon.rstpclient.R;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;

public class DBExportActivity extends Activity implements View.OnClickListener {

    private Button mBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dbexport);

        mBtn = (Button) findViewById(R.id.btnExport);
        mBtn.setOnClickListener(this);
    }

    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnExport:
                sqliteExport();
                break;
            default:
                break;
        }
    }

    public void sqliteExport(){
        try {
            File sd = Environment.getExternalStorageDirectory();
            File data = Environment.getDataDirectory();

            if (sd.canWrite()) {
                String currentDBPath = "/data/com.example.gon.rstpclient/databases/addressbook.db";
                String backupDBPath = "contacts.sqlite";
                File currentDB = new File(data, currentDBPath);
                File backupDB = new File(sd, backupDBPath);

                if (currentDB.exists()) {
                    FileChannel src = new FileInputStream(currentDB).getChannel();
                    FileChannel dst = new FileOutputStream(backupDB).getChannel();
                    dst.transferFrom(src, 0, src.size());
                    src.close();
                    dst.close();
                }
                if(backupDB.exists()){
                    Toast.makeText(this, "DB Export Complete!!", Toast.LENGTH_SHORT).show();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

함수를 실행하고 나면 그림과 같이 스마트폰의 저장소 제일 상단에 파일이 생성됩니다. 소스에 있던 이름과 같죠. 이것을 컴퓨터로 옮깁니다. SQLite 브라우저로 내용을 확인하기 위해서입니다

안드로이드 개발 앱에서 만든 DB 소스로 추출하는 방법

 

SQLite DB 파일을 확인하는 방법은 여러가지가 있지만 저 같은 경우 아래 주소에서 다운 받을 수 있는 SQLite Browser for SQLite 유틸을 이용하고 있습니다.

http://sqlitebrowser.org/

안드로이드 개발 앱에서 만든 DB 소스로 추출하는 방법

 

[SQLite Browser for SQLite] 를 실행하고 [데이터베이스 열기] 메뉴를 눌러 소스에서 다운받은 “contacts.sqlite” 파일을 추가합니다. 그럼 위에서 보았던 DB 의 내용을 그대로 확인할 수 있습니다

안드로이드 개발 앱에서 만든 DB 소스로 추출하는 방법

저작자 표시 비영리 변경 금지
신고
Posted by 녹두장군


티스토리 툴바