cpe移植framework后,。解决问题的现有数据库
最近,该公司的业务需求,原始订单apk的形式CPE。渗透framework层。这被剥离cpe,从事相当长的一段,终于有时间来写博客,记下遇到的问题,未来。
第一个问题是,原来的apk有些事情,移植framework层后,。不同的环境,我们必须做出一些改变。
比如,
1.ContentProvider,因没有提供给其它程序数据共享,要么去掉。所有改为sqlite直接调用。要么把这个ContentProvider剥离出来。形成一个apk。固定到framework。给cpe提供ContentProvider.
2.SharedPreferences,打入framework后,SharedPreferences没有地方存放由它生成的xml文件,因此也要去掉,去掉后怎样保存它要保存的数据呢,比如终端启动信息和初始化信息等。终于确定使用一个文件来保存。依赖于Properties这个工具类读写数据,Properties最初还遇到了写数据的问题,后来还是攻克了。主要是 mProperties.setProperty(name,value);仅仅是把数据写入内存,而没有写入到文件,纠结了半天,改动了一下代码。ok了。
try {
os=new FileOutputStream(CONFIGPATH);
mProperties.setProperty(name,value);
mProperties.store(os, null);
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
3.CPE原有的配置文件。在framework层后,文件夹结构不一样,得找个地方存放这些配置文件。改动了引用这些配置文件所在文件夹,最后统一移植到/system/etc/cpe/文件夹下。
4.CPE依赖的第三方jar包,CPE打入framework后,其本身就是一个jar形式存在,仅仅只是由SystemService传入Context其它它。那么CPE所依赖的第三方jar包也得进入framework,開始的时候所有导入到framework,编译并执行后。发现板子上还有一个apk也引用了我导入的CPE jar,冲突了。为了避免这个问题。决定改动CPE的包名。
5.如同SharedPreferences,apk生成的db文件。默认在/data/data/包名/database/文件夹下。而打入framework后。db文件得找个地方存放,为了解决问题,查找了非常多资料,測试了半天,最终实现了,并将db文件存放在/data/cpe/文件夹下。由于是apk在測试时候,没打入framework,板子上的文件夹是没有权限写数据的,仅仅能用U盘做測试,写入/sdcard/文件夹下測试的。说了半天。即指定文件夹存放db文件。
定义帮助类继承SQLiteOpenHelper:
public class DatabaseHelper extends SQLiteOpenHelper
构造方法:
private static final String PATH ="/sdcard/cpe";
public DatabaseHelper(Context context, String name) {
super(new CustomPathDatabaseContext(context, PATH), name, null, VERSION);
}
注意构造方法中的CustomPathDatabaseContext.java:
public class CustomPathDatabaseContext extends ContextWrapper{
private static final String TAG = CustomPathDatabaseContext.class.getSimpleName();
private String mDirPath;
public CustomPathDatabaseContext(Context base,String name) {
super(base);
mDirPath = name;
}
@Override
public File getDatabasePath(String name) {
File result = new File(mDirPath + File.separator + name);
if (!result.getParentFile().exists())
{
result.getParentFile().mkdirs();
}
return result;
}
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory)
{
Log.d(TAG, "openOrCreateDatabase");
return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);
}
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory, DatabaseErrorHandler errorHandler){
Log.d(TAG,"openOrCreateDatabase...");
return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name).getAbsolutePath(), factory, errorHandler);
}
}
为什么要这样定义。查看源代码,ContextWrapper就是Context的实现类。在getReadableDatabase(),或getWriteableDatabase()调用后,会运行openOrCreateDatabase(),4.0版本号后运行第二个openOrCreateDatabase(),这指定db夹。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
cpe移植framework后,。解决问题的现有数据库的更多相关文章
- Zend Framework 2参考Zend\Authentication(数据库表认证)
+ 转载自:Zend Framework 2参考Zend\Authentication(数据库表认证) 介绍 Zend\Authentication\Adapter\DbTable提供对存储在数据库表 ...
- asp.net core 系列 21 EF现有数据库进行反向工程
一.概述 在上篇中使用EF基于数据模型创建数据库, 本篇继续使用 EF 基于数据库创建数据模型. 实现对已有数据库进行反向工程,来构建数据访问的 ASP.NET Core MVC 应用程序.已有 ...
- 通过 NewLife.XCode 迁移任意现有数据库到任意数据库
通过 NewLife.XCode 迁移任意现有数据库到任意数据库(附分表分库方法) 本文背景是将其他系统的数据库迁移到另一个数据库(仅需 20 行代码),也可以作为项目迁移用,生成自己系统的专属实体代 ...
- (18)ASP.NET Core 基于现有数据库创建EF模型(反向工程)
1.简介 Entity Framework Core可通过数据库提供给应用程序的插件访问许多不同的数据库.我们可以通过使用Entity Framework Core构建执行基本数据访问的ASP.NET ...
- Asp.Net 应用程序在IIS发布后无法连接oracle数据库问题的解决方法
asp.net程序编写完成后,发布到IIS,经常出现的一个问题是连接不上Oracle数据库,具体表现为Oracle的本地NET服务配置成功:用 pl/sql 等工具也可以连接上数据库,但是通过浏览器中 ...
- 电脑重装系统后如何恢复Mysql数据库
电脑重装系统后如何恢复Mysql数据库 一.[设置mysql的path]
- 基于现有数据库的Code First模式迁移更新数据库
本文讨论的内容是基于EF4.1版本.文中谈论的现有的数据库不是由EF创建.本文假定你已经对Code First迁移有一定的了解,如果不了解Code First迁移更新数据库可以查看 文章涉及的主题如下 ...
- STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题
STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085的问题讨论:http://www.rt-thr ...
- Web安全--使用Salt + Hash将密码加密后再存储进数据库
转载原地址 http://www.bozhiyue.com/mianshiti/_net/2016/0728/314239.html (一) 为什么要用哈希函数来加密密码 如果你需要保存密码(比如网站 ...
随机推荐
- Eclipse用法和技巧六:自动生成get和set方法1
java的类中,除了常量声明为静态且公有的,一般的对象数据作用域,都是声明为私有的.这样做能保护对象的属性不会被随意改变,调试的时候也会方便很多:在类的公有方法中大一个调用栈就能看到哪里改了属性值.声 ...
- HDU 3397 Sequence operation(线段树)
HDU 3397 Sequence operation 题目链接 题意:给定一个01序列,有5种操作 0 a b [a.b]区间置为0 1 a b [a,b]区间置为1 2 a b [a,b]区间0变 ...
- Android学习笔记(九)——更复杂的进度对话框
显示操作进度的对话框 1.使用上一篇创建的同一项目.在activity_main.xml文件里加入一个Button: <Button android:id="@+id/btn_dial ...
- C++中 auto自己主动变量,命名空间,using作用以及作用域
1.autokeyword的用途 A:自己主动变量.能够自己主动获取类型,输出,类似泛型 B:自己主动变量,能够实现自己主动循环一维数组 C:自己主动循环的时候,相应的必须是常量 2.auto自 ...
- POJ 3481 & HDU 1908 Double Queue (map运用)
题目链接: PKU:http://poj.org/problem?id=3481 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=1908 Descript ...
- clientdataset<---->json
现在,DATASNAP倾向于使用JSON作为统一的数据序列格式,以期达到跨平台的效果.于是使用JSON便成为热点. unit uJSONDB; interface uses SysUtils, C ...
- 3篇OAuth的文章
http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html http://blog.unvs.cn/archives/oauth-qq1.0-devel ...
- eval 捕获dbi错误
[root@dr-mysql01 ~]# cat t2.pl use DBI; my $dbUser='zabbix'; my $user="root"; my $passwd=& ...
- H2内存数据库 支持存储到文件
准备工作 1.下载JDK(本人下载的版本号为JDK1.7).环境变量设置JAVA_HOME.设置PATH(%JAVA_HOME%\bin%). 2.下载并解压:h2-2014-07-13.zip ...
- 【免费】iPhone上最好用的短信群发软件: 高速短信4.1
免费的最新的联系人.群组.多人发送短信软件短信群发4.1已经出炉.欢迎下载! *归属地信息让你时时记着好友的地方,让陌生号码变得不陌生: *您能够选择最经常使用的联系人然后发送高速短信; *群联系人 ...