차근차근/Android

안드로이드 apk 파일 만들기

예쁜꽃이피었으면 2014. 12. 2. 11:17

http://www.gooday.kr/bbs/board.php?bo_table=android&wr_id=39&page


* APK 설치시 DB파일 포함 


안드로이드펍의 개굴딱지님의 Q&A에서 도움을 얻어 해결 했습니다. 

먼저 DB파일은 assests/databese/ 폴더에 추가 한 후 

MainActivity.onCreate() 함수에서 아래와 같이 추가 해 줬습니다. 


// DB파일 패키지 설치 폴더에 복사 
File outfile = new File( 
  "/data/data/[PackageName]/databases/Filename.db"); 

AssetManager assetManager = getResources().getAssets(); 
InputStream is = assetManager.open( 
  "database/Filename.db", 
  AssetManager.ACCESS_BUFFER); 
long filesize = is.available(); 

// 패키지 폴더에 설치된 DB파일이 포함된 DB파일 보다 크기가 작을 경우 DB파일을 덮어 쓴다. 
if(outfile.length() < filesize){ 
 byte[] tempdata = new byte[(int) filesize]; 
 is.read(tempdata); 
 is.close(); 
 outfile.createNewFile(); 
 FileOutputStream fo = new FileOutputStream(outfile); 
 fo.write(tempdata); 
 fo.close(); 


AssetManger와 Stream을 사용 해 해당 파일을 비교 한 후 파일 사이즈가 패키지에 포함 된 파일 보다 작을 경우 덮어 쓰도록 처리 했습니다. 

[출처] 안드로이드사이드 - http://www.androidside.com/bbs/board.php?bo_table=B49&wr_id=2374#c_2377


 
* 위에꺼 잘 안되서 요거로 : http://reipielr.tistory.com/4 

AssetManager am = this.getResources().getAssets(); 
File file = new File("/data/data/STA_dic/database/sta_dic"); 

try { 
    file.createNewFile(); // 새로운 파일 생성(빈 파일) 
    
    // .opne() 으로 기작성 DB를 읽는다. 이 때 inputstream 형식으로 변환되어 읽어진다. 
    InputStream inStream = am.open("sta_dic"); 
    long fileSize = inStream.available(); // .available() 로 스트림의 길이를 알아낸다. 
    byte[] tempData = new byte[(int)fileSize]; 
    inStream.read(tempData); // 크기만큼 만들어진 바이트 배열에 스트림을 읽어 저장한다. 
    inStream.close(); 
    
    // FileOutput 형식으로 스트림 생성 
    FileOutputStream fileOutStream = new FileOutputStream(file); 
    fileOutStream.write(tempData); // 위에 생성한 바이트 배열을 사용하여 파일에 쓴다. 
    fileOutStream.close(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
}


반응형