前言
最近在做一个实验,从Framework层去调用应用层的数据库,可以开启服务我们开发的App数据库进行一些管理,下面来讲解下我的开发流程。
准备工作
首先,我们准备一个数据库项目,主要就是基础的CRUD操作,我这里准备了一个SqliteDemo可以去下载,下面的内容我使用了项目中的java文件。
修改Framework层代码
我们准备Hook的点是在Application的onCreate()方法进行Hook,预想只要创建进程的时候就打印数据库的信息。
修改的文件路径:frameworks/base/core/java/android/app/Application.java
...
import android.util.Slog;
import android.app.DBHelper;
public class Application{
private static final String PACKAGE_NAME = "com.martin.jetmo";
private static final String TAG = "JetmoApplication";
@CallSuper
public void onCreate() {
if (mLoadedApk.getPackageName().toLowerCase().equals(PACKAGE_NAME)) {
mDBHelper = new DBHelper(this);
ArrayList<String> array_list = mDBHelper.getAllCotacts();//这里需要写String
for (String item : array_list) {
Slog.i(TAG, item);
}
}
}
...
}
接下来,我们将前面项目的DBHelper.java
文件拷贝到和Application的同级目录下。
放入文件的路径:frameworks/base/core/java/android/app/DBHelper.java
package android.app;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite