1. 程式人生 > >Android開發中, 將apk和SQLite資料庫一起打包釋出 (沒root手機)

Android開發中, 將apk和SQLite資料庫一起打包釋出 (沒root手機)

要把SQLite資料庫與apk一起打包很簡單,只要把資料庫匯出,並放在assets資料夾中,app首次開啟時載入就可以了。

但有個問題:沒root的手機不能通過DDMS檢視/data/的檔案(資料庫儲存在這裡)。我們只能通過adb shell來獲取資料庫檔案了。

開啟命令列,輸入以下命令:

run as [package_name];
cd /data/data/[package_name]/databases
cat test.db > /mnt/sdcard/test.db
ps. [package_name]輸入你的應用程式的包名。

然後就可以在sdcard裡多了一個test.db檔案了,將其複製到assets檔案中,app首次開啟時載入就好。

private static final String DATABASE_PATH = "/data/data/com.leo.test/databases/";
private static final String DATABASE_NAME = "test.db";

public void initDB() {
    File fileDB = new File(DATABASE_PATH + DATABASE_NAME);
    if(!fileDB.exists()) {
        File file = new File(DATABASE_PATH);
        if(!file.exists())
            file.mkdirs();

        try {
            InputStream is = mContext.getAssets().open(DATABASE_NAME);
            OutputStream os = new FileOutputStream(DATABASE_PATH + DATABASE_NAME);

            byte[] buffer = new byte[1024];
            int len;
            while((len = is.read(buffer)) > 0) {
                os.write(buffer, 0, len);
            }

            os.flush();
            os.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}