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 (一) 为什么要用哈希函数来加密密码 如果你需要保存密码(比如网站 ...
随机推荐
- Silverlight技术调查(1)——Html向Silverlight传参
原文 Silverlight技术调查(1)——Html向Silverlight传参 近几日项目研究一个很牛的富文档编辑器DXperience RichEdit组件,调查环境为Silverlight4. ...
- tmux centos 6.3
tmux-1.6-1.el6.rf.i686.rpm CentOS 6 / RHEL 6 Download #21 tmux-1.6-1.el6.rf.i686.rpm
- 从svn下载项目后build path为灰色
今天从svn上下载项目后,想加入下面jar包.可是build path为灰色. 解决的方法是:1.在项目上右键properties---project facts 如图所看到的: 点击右側conver ...
- 安装ipvsadm报错
server环境: [vagrant@localhost download]$ uname -a Linux RS1 2.6.18-238.el5 #1 SMP Thu Jan 13 15:51:15 ...
- CentOS6.4 安装Mysql
虽说,新版的数据包可能会带上一些新特性,但是数据库对我而言,还是稳定版优先.因为新特性不一定我会用到.. 下载安装: yum list | grep mysql 因为是准备搞开发用的,所以只要安装my ...
- perl 贪婪匹配小例子
redis01:/root# cat x2.pl my $str="a19823a456123"; if ($str =~/a(.*)23/){print "1----& ...
- 5350.support
3G6200N3G6200NL3G300MAIR3GIIALL02393GALL0256NALL5002ALL5003ARGUS_ATP52B,ASL26555AWM002EVBAWAPN2403BC ...
- hdu 4708 Rotation Lock Puzzle 2013年ICPC热身赛A题 旋转矩阵
题意:给出一个n*n的矩阵,旋转每一圈数字,求出对角线可能的最大值,以及转到最大时的最小距离. 只要分析每一层就可以了,本来想用地址传递二维数组,发现行不通,改了一下就行了. 这里有个坑,比如: 1 ...
- java32至md5加密
码,如以下 <span style="font-size:18px;">import java.security.MessageDigest; import java. ...
- 辛星与您解读PHP页面跳转的几种实现方式
因为页面跳转的使用是很频繁的,因此这里给出几种方式,事实上我想我并没有归纳全,毕竟函数那么多,要一下想起来还是特别麻烦的,于是,想到哪里就记到哪里把,等着以后再整理汇总. 第一种方式就是使用heade ...