`

Android 数据库打包随APK发布

阅读更多
有些时候我们的软件用到SQLite数据库,这个时候怎么把一个做好的数据库打包进我们的APK呢,其实很简单,就是把我们的数据库文件放到我们的手机里,所以不必局限在哪个地方写这个代码,在第一次创建数据库的时候可以,我觉得在软件起动页里效果更好一点,首先我们应该把事先写好的数据库文件比如 test.db放到res文件夹里的raw文件夹里,也可以放到assets里,因为这两个文件夹不会在生成APK的时候不会被压缩。
1,DataBaseUtil用于将raw中的db文件copy到手机中,代码如下
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;

import com.ata.app.R;

/**
 * copy数据库到apk包
 * 
 * @author NGJ
 * 
 */
public class DataBaseUtil {

	private Context context;
	public static String dbName = "Kao.db";// 数据库的名字
	private static String DATABASE_PATH;// 数据库在手机里的路径

	public DataBaseUtil(Context context) {
		this.context = context;
		String packageName = context.getPackageName();
		DATABASE_PATH="/data/data/"+packageName+"/databases/";
	}

	/**
	 * 判断数据库是否存在
	 * 
	 * @return false or true
	 */
	public boolean checkDataBase() {
		SQLiteDatabase db = null;
		try {
			String databaseFilename = DATABASE_PATH + dbName;
			db = SQLiteDatabase.openDatabase(databaseFilename, null,SQLiteDatabase.OPEN_READONLY);
		} catch (SQLiteException e) {

		}
		if (db != null) {
			db.close();
		}
		return db != null ? true : false;
	}

	/**
	 * 复制数据库到手机指定文件夹下
	 * 
	 * @throws IOException
	 */
	public void copyDataBase() throws IOException {
		String databaseFilenames = DATABASE_PATH + dbName;
		File dir = new File(DATABASE_PATH);
		if (!dir.exists())// 判断文件夹是否存在,不存在就新建一个
			dir.mkdir();
		FileOutputStream os = new FileOutputStream(databaseFilenames);// 得到数据库文件的写入流
		InputStream is = context.getResources().openRawResource(R.raw.kao);// 得到数据库文件的数据流
		byte[] buffer = new byte[8192];
		int count = 0;
		while ((count = is.read(buffer)) > 0) {
			os.write(buffer, 0, count);
			os.flush();
		}
		is.close();
		os.close();
	}
}

2,在需要的activity中加入如下方法用于具体的copy操作
private void copyDataBaseToPhone() {
		DataBaseUtil util = new DataBaseUtil(this);
		// 判断数据库是否存在
		boolean dbExist = util.checkDataBase();

		if (dbExist) {
			Log.i("tag", "The database is exist.");
		} else {// 不存在就把raw里的数据库写入手机
			try {
				util.copyDataBase();
			} catch (IOException e) {
				throw new Error("Error copying database");
			}
		}
	}

3,检测是否有SDCard,执行copy。(个人感觉可以不检测SD卡是否存在,但不检测似乎有个问题,程序原因?)
boolean hasSDCard = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
		if(hasSDCard){
			copyDataBaseToPhone();
		}else{
			showToast("未检测到SDCard");
		}

OK.

另一篇:
android从assets复制数据库到/databases的替代方法
     经常我们需要使用一些事先做好内容的数据库,比如字典等, 这就要加载已有的数据库文件,通常把它们放在assets 或者raw中,在程序运行时copy到程序内部空间:/data/data/package/my_app/databases, 详细的做法看这里。

但是这样有个缺点,当文件较大时会占用较长的时间,用户难免会有点小着急。

我们可以这样HACK来把copy的环节省去:

1 把数据库文件(如MYDB.db) 放到PROJECT/libs/armeabi/ 改名为libMYDB.db.so(注意前面必需加”lib")。

2 用这样的方式打开:
DATABASE_PATH = "/data/data/" + packageName + "/lib/";            
SQLiteDatabase db = SQLiteDatabase.openDatabase(DATABASE_PATH + libMYDB.db.so, null, SQLiteDatabase.OPEN_READONLY | SQLiteDatabase.NO_LOCALIZED_COLLATORS);  

这样等程序一安装完就可以使用数据库了,其原理是把数据库文件伪装成lib库文件,程序在安装时会自动copy到/data/data/package/lib/,省去了我们自己的copy过程。

目前我测试了读操作,写操作还有待测试。

利用GPS定位
http://blog.csdn.net/czjuttsw/article/details/7707965
分享到:
评论

相关推荐

    Android 数据库打包随APK发布的实例代码

    本教程将详细解释如何将已创建的SQLite数据库打包进APK并在首次运行时复制到用户的设备上。 首先,你需要在项目资源文件夹中放置数据库文件。Android提供了两个位置可以存放不会被压缩的文件:`res/raw` 和 `assets...

    Android打包APK Sqlite一起打包成APK

    在默认情况下,Android Studio并不会自动将外部的SQLite数据库文件打包进APK。因此,我们需要手动干预这个过程。一种常见的方法是在`assets`目录下放置SQLite数据库文件,因为该目录下的文件会在应用安装时被复制到...

    Android数据库打包实例(有详细注释)

    在Android开发中,数据库是应用存储数据的重要方式之一,SQLite是一个轻量级的、嵌入式的、关系型数据库,被广泛应用于移动应用中。...希望这个实例能帮助初学者更好地理解和操作Android的SQLite数据库打包。

    将db文件和apk一起打包

    本文讲解了如何将SQLite数据库(dictionary.db文件)与apk文件一起发布。这个过程可以将dictionary.db文件复制到Eclipse Android工程中的res\raw目录中,从而在apk文件中包含数据库文件。 知识点1:Android中的资源...

    新版骆驼 数据库 apk.zip

    3. **APK应用**:APK是Android应用程序的打包格式,包含了运行在Android设备上的所有必要组件,如代码、资源、权限声明等。这个APK可能是骆驼壳系统的客户端,让用户可以通过手机或平板电脑访问服务。APK的开发通常...

    基于android的简单图书管理系统(源码+数据库+apk).zip

    为了便于用户安装和使用,项目还打包成了APK(Android Package)文件,即library.apk。APK是Android应用程序的二进制格式,包含了应用的所有资源、代码和库文件。用户只需在Android设备上安装这个APK,就可以运行...

    多渠道打包apk,重新签名apk

    在Android应用开发中,"多渠道打包apk"是一种常见的需求,尤其在应用发布阶段,为了适应不同的分发渠道,如应用商店、广告平台等,开发者需要生成带有不同渠道标识的APK文件。这个过程通常涉及到APK的签名和资源替换...

    安卓SQLite数据库相关-自己实现的android数据库快速开发组件.zip

    由于上传的压缩包中可能包含多个文件,如JavaApk源码说明.txt、下载更多打包源码~.url和PPT等,因此无法逐一验证所有代码的完整性和可运行性。用户在使用时可能需要根据实际项目需求进行调整和测试,部分代码可以...

    SQLite数据库与apk文件一起发布,raw目录下

    在Android系统中,SQLite数据库文件通常位于应用的私有数据目录下,但有时为了简化数据分发或者便于调试,开发者会选择将预填充的SQLite数据库文件放入apk的资源目录,如`res/raw`,并在应用安装后复制到合适的位置...

    Android应用开发之将SQLite和APK一起打包的方法

    将SQLite数据库与APK一起打包,意味着在应用安装时就已经包含了预填充的数据,用户无需额外下载或初始化。以下是对这个主题的详细解释: 1. **SQLite数据库结构**: SQLite是一个嵌入式的SQL数据库引擎,它不需要...

    APK网络验证后台数据库+注入器.zip

    首先,APK是Android应用程序包(Android Package)的缩写,是Android平台上的应用软件的一种打包格式。APK文件包含了应用程序的所有组成部分,包括代码、资源、图标和元数据等。当一个APK文件被安装在Android设备上...

    CL.rar_android_cl apk android

    11. **Gradle**:Android Studio使用Gradle作为构建工具,它负责编译、打包和发布应用。 12. **版本控制**:由于提供的是源代码,可能涉及到Git等版本控制系统,用于代码管理和团队协作。 通过分析压缩包中的"CL...

    APK一键反编译工具

    在Android平台上,APK文件是应用程序的打包格式,包含所有必要的资源、代码、XML配置以及 Dalvik 可执行文件。通过反编译APK,我们可以获取到原始的Java源代码、资源文件、字符串和布局信息,这对于调试、学习或优化...

    android 5.1 系统 Music源码

    1. 音乐库管理:Android的MediaStore类提供对设备上音乐文件的访问,Music应用会遍历MediaStore中的音频内容,创建相应的数据模型并保存到数据库。 2. 播放控制:MusicService中的MediaPlayer对象负责音乐的播放。...

    Android apk包解压逆向工具

    Android APK包是Android应用的可执行文件格式,它包含了应用程序的所有资源、代码、图标、XML配置文件等。本文将深入探讨如何使用“Android apk包解压逆向工具”进行APK分析,以及这个过程中的关键知识点。 首先,...

    APk 编辑器 Android

    它包括对apk文件的解包、打包、签名、汉化、应用共存制作、文字翻译等等操作!而本软件也是手机端首个,Android汉化软件,让你在没有电脑的情况下,在任何地点,任何时间都能汉化修改Android软件。 - 支持直接编辑...

    android中复制资源文件中的数据库文件到sd卡或内存源码

    在Android开发中,有时我们需要将预置的数据库文件与应用一起发布,并在应用程序首次启动时将其复制到外部存储(如SD卡)或内部存储(内存)中,以便于后续的操作和使用。这样的需求通常出现在那些需要提供初始数据...

    android 连接mysql数据库jar包

    要使用这个jar包,你需要将`jtds-1.2.2.jar`添加到Android项目的libs目录下,并在构建过程中将其打包进APK。然后,在Android代码中,你可以通过以下步骤建立数据库连接: 1. 引入jar包:在`build.gradle`文件中,...

Global site tag (gtag.js) - Google Analytics