APK 배포시 Database정보 포함하기
앱을 설치할 때, 기본적으로 가지고 있어야 하는 초기데이터가 있습니다.
작업한 Database파일을 포함하여 배포하는 방법을 알아 보겠습니다.
※ /data/data/{package}/databases/*.db 파일은 기기의 Local영역이기 때문에 작업하던 파일은 함께 배포되지 않습니다.
Assets영역에 Database파일 복사하기
배포시 *.db파일을 함께 배포하기 위해 assets폴더를 만듭니다.
이 폴더의 파일은 배포파일 생성시 같이 포함되게 됩니다.
생성된 assets 폴더에 작업한 *.db파일을 복사합니다.
이렇게 파일만 복사하면 APK파일 생성시 함께 포함되어 생성이됩니다.
Assets 폴더에 있는 파일을 ~/databases/ 폴더로 복사하기
그런데, database정보를 읽으려면, /data/data/{package}/databases/ 영역에 파일이 존재해야 합니다.
이를 위해 프로그램 실행시 assets에 있는 *.db 파일을 위의 경로로 복사해 주면 됩니다.
저는 앱이 실행시 가장 먼저 실행되는 MainActivity에 로직을 넣어 처리해 보았습니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
copyDatabase(); // DB파일 복사
}
private void copyDatabase() {
String DB_PATH = "/data/data/" + getApplicationContext().getPackageName() + "/databases/";
String DB_NAME = "ReferenceBook.db";
try{
// 디렉토리가 없으면, 디렉토리를 먼저 생성한다.
File fDir = new File( DB_PATH );
if( !fDir.exists() ) { fDir.mkdir(); }
String strOutFile = DB_PATH + DB_NAME;
InputStream inputStream = getApplicationContext().getAssets().open( DB_NAME );
OutputStream outputStream = new FileOutputStream( strOutFile );
byte[] mBuffer = new byte[1024];
int mLength;
while( ( mLength = inputStream.read( mBuffer) ) > 0 ) {
outputStream.write( mBuffer, 0, mLength );
}
outputStream.flush();
outputStream.close();
inputStream.close();
}catch( Exception e ) {
e.printStackTrace();
}
}
소스의 내용은 간단합니다.
앱을 최초 설치시에는 폴더가 존재하지 않을 것이므로, 확인하여 없으면 폴더를 먼저 생성합니다.
그리고, 생성된 폴더에 InputStream과 OutputStream을 이용하여 파일을 복사합니다.
간단히 요약하자면...
1. assets 폴더를 생성하여 *.db파일을 함께 배포하고
2. 앱 실행시 assets폴더에 있는 *.db파일을 /data/data/{package/databases/ 폴더로 복사한다.
The End.
'Study > Android Studio' 카테고리의 다른 글
[Android] Activity 생명주기 - <작성중> (0) | 2021.02.04 |
---|---|
[Android] 드래그하여 화면 전환하기 (0) | 2021.02.03 |
[Android] Paly스토어에 앱 게시하기 (0) | 2021.01.30 |
[Android] 앱에 애드몹 광고 넣기 (0) | 2021.01.30 |
[Android] APK 파일 생성하기 (0) | 2021.01.30 |