diff --git a/README.md b/README.md index 265bb3a..61f46c7 100644 --- a/README.md +++ b/README.md @@ -70,14 +70,6 @@ If you are using `build.gradle.kts`, add the following: debugImplementation("com.github.amitshekhariitbhu.Android-Debug-Database:debug-db-encrypt:1.0.7") ``` -And to provide the password for the DB, you should add this in the Gradle: -DB_PASSWORD_{VARIABLE}, if for example, PERSON is the database name: DB_PASSWORD_PERSON -```groovy -debug { - resValue("string", "DB_PASSWORD_PERSON", "password") -} -``` - Use `debugImplementation` so that it will only compile in your debug build and not in your release build. That’s all, just start the application, you will see in the logcat an entry like follows : @@ -147,11 +139,11 @@ public static void setCustomDatabaseFiles(Context context) { Class debugDB = Class.forName("com.amitshekhar.DebugDB"); Class[] argTypes = new Class[]{HashMap.class}; Method setCustomDatabaseFiles = debugDB.getMethod("setCustomDatabaseFiles", argTypes); - HashMap> customDatabaseFiles = new HashMap<>(); + HashMap customDatabaseFiles = new HashMap<>(); // set your custom database files customDatabaseFiles.put(ExtTestDBHelper.DATABASE_NAME, - new Pair<>(new File(context.getFilesDir() + "/" + ExtTestDBHelper.DIR_NAME + - "/" + ExtTestDBHelper.DATABASE_NAME), "")); + new File(context.getFilesDir() + "/" + ExtTestDBHelper.DIR_NAME + + "/" + ExtTestDBHelper.DATABASE_NAME)); setCustomDatabaseFiles.invoke(null, customDatabaseFiles); } catch (Exception ignore) { diff --git a/build.gradle b/build.gradle index 4029db9..2106402 100644 --- a/build.gradle +++ b/build.gradle @@ -27,7 +27,7 @@ task clean(type: Delete) { delete rootProject.buildDir } ext { - compileSdk = 33 - targetSdk = 33 - minSdk = 14 -} \ No newline at end of file + compileSdk = 34 + targetSdk = 34 + minSdk = 21 +} diff --git a/debug-db-base/src/main/assets/app.js b/debug-db-base/src/main/assets/app.js index beb12cb..3e3f4aa 100644 --- a/debug-db-base/src/main/assets/app.js +++ b/debug-db-base/src/main/assets/app.js @@ -79,6 +79,10 @@ function getDBList() { $.ajax({url: "getDbList", success: function(result){ result = JSON.parse(result); + if (!result.supportEncryptedDb) { + $('#password').hide(); + $('#password-label').hide(); + } var dbList = result.rows; $('#db-list').empty(); var isSelectionDone = false; @@ -130,14 +134,18 @@ function openDatabaseAndGetTableList(db, isDownloadable) { isDatabaseSelected = true; } - - $.ajax({url: "getTableList?database="+db, success: function(result){ + var password = $('#password').val(); + $.ajax({url: "getTableList?database="+db+"&password="+password, success: function(result){ result = JSON.parse(result); var tableList = result.rows; var dbVersion = result.dbVersion; + var error = result.error; if("APP_SHARED_PREFERENCES" != db) { + if (error == null) $("#selected-db-info").text("Selected Database : "+db +" Version : "+dbVersion); + else + $("#selected-db-info").text(error); } $('#table-list').empty() for(var count = 0; count < tableList.length; count++){ diff --git a/debug-db-base/src/main/assets/index.html b/debug-db-base/src/main/assets/index.html index 96e75c2..4128eeb 100644 --- a/debug-db-base/src/main/assets/index.html +++ b/debug-db-base/src/main/assets/index.html @@ -107,6 +107,8 @@
+ +
diff --git a/debug-db-base/src/main/java/com/amitshekhar/DebugDB.java b/debug-db-base/src/main/java/com/amitshekhar/DebugDB.java index ebcbbbf..3511b61 100644 --- a/debug-db-base/src/main/java/com/amitshekhar/DebugDB.java +++ b/debug-db-base/src/main/java/com/amitshekhar/DebugDB.java @@ -76,7 +76,7 @@ public static void shutDown() { } } - public static void setCustomDatabaseFiles(HashMap> customDatabaseFiles) { + public static void setCustomDatabaseFiles(HashMap customDatabaseFiles) { if (clientServer != null) { clientServer.setCustomDatabaseFiles(customDatabaseFiles); } diff --git a/debug-db-base/src/main/java/com/amitshekhar/model/Response.java b/debug-db-base/src/main/java/com/amitshekhar/model/Response.java index 9964cf9..16cafdb 100644 --- a/debug-db-base/src/main/java/com/amitshekhar/model/Response.java +++ b/debug-db-base/src/main/java/com/amitshekhar/model/Response.java @@ -33,6 +33,7 @@ public class Response { public boolean isSuccessful; public String error; public int dbVersion; + public boolean supportEncryptedDb; public Response() { diff --git a/debug-db-base/src/main/java/com/amitshekhar/server/ClientServer.java b/debug-db-base/src/main/java/com/amitshekhar/server/ClientServer.java index 665b17b..a309611 100644 --- a/debug-db-base/src/main/java/com/amitshekhar/server/ClientServer.java +++ b/debug-db-base/src/main/java/com/amitshekhar/server/ClientServer.java @@ -87,7 +87,7 @@ public void run() { } } - public void setCustomDatabaseFiles(HashMap> customDatabaseFiles) { + public void setCustomDatabaseFiles(HashMap customDatabaseFiles) { mRequestHandler.setCustomDatabaseFiles(customDatabaseFiles); } diff --git a/debug-db-base/src/main/java/com/amitshekhar/server/RequestHandler.java b/debug-db-base/src/main/java/com/amitshekhar/server/RequestHandler.java index 3f967ea..f53f322 100644 --- a/debug-db-base/src/main/java/com/amitshekhar/server/RequestHandler.java +++ b/debug-db-base/src/main/java/com/amitshekhar/server/RequestHandler.java @@ -23,7 +23,6 @@ import android.content.res.AssetManager; import android.net.Uri; import android.text.TextUtils; -import android.util.Pair; import androidx.sqlite.db.SupportSQLiteDatabase; @@ -65,8 +64,8 @@ public class RequestHandler { private final DBFactory mDbFactory; private boolean isDbOpened; private SQLiteDB sqLiteDB; - private HashMap> mDatabaseFiles; - private HashMap> mCustomDatabaseFiles; + private HashMap mDatabaseFiles; + private HashMap mCustomDatabaseFiles; private String mSelectedDatabase = null; private HashMap mRoomInMemoryDatabases = new HashMap<>(); @@ -165,7 +164,7 @@ public void handle(Socket socket) throws IOException { } } - public void setCustomDatabaseFiles(HashMap> customDatabaseFiles) { + public void setCustomDatabaseFiles(HashMap customDatabaseFiles) { mCustomDatabaseFiles = customDatabaseFiles; } @@ -178,13 +177,12 @@ private void writeServerError(PrintStream output) { output.flush(); } - private void openDatabase(String database) { + private void openDatabase(String database, String password) { closeDatabase(); if (mRoomInMemoryDatabases.containsKey(database)) { sqLiteDB = new InMemoryDebugSQLiteDB(mRoomInMemoryDatabases.get(database)); } else { - File databaseFile = mDatabaseFiles.get(database).first; - String password = mDatabaseFiles.get(database).second; + File databaseFile = mDatabaseFiles.get(database); sqLiteDB = mDbFactory.create(mContext, databaseFile.getAbsolutePath(), password); } isDbOpened = true; @@ -205,8 +203,10 @@ private String getDBListResponse() { } Response response = new Response(); if (mDatabaseFiles != null) { - for (HashMap.Entry> entry : mDatabaseFiles.entrySet()) { - String[] dbEntry = {entry.getKey(), !entry.getValue().second.equals("") ? "true" : "false", "true"}; + for (HashMap.Entry entry : mDatabaseFiles.entrySet()) { + String[] dbEntry = { entry.getKey(), + Utils.isDbEncrypted(entry.getKey(), mDatabaseFiles) ? "true" : "false", + "true" }; response.rows.add(dbEntry); } } @@ -218,6 +218,7 @@ private String getDBListResponse() { } response.rows.add(new String[]{Constants.APP_SHARED_PREFERENCES, "false", "false"}); response.isSuccessful = true; + response.supportEncryptedDb = mDbFactory.supportEncryptedDb(); return mGson.toJson(response); } @@ -292,10 +293,9 @@ private String executeQueryAndGetResponse(String route) { } private String getTableListResponse(String route) { - String database = null; - if (route.contains("?database=")) { - database = route.substring(route.indexOf("=") + 1, route.length()); - } + Uri uri = Uri.parse(route); + String database = uri.getQueryParameter("database"); + String password = uri.getQueryParameter("password"); Response response; @@ -304,8 +304,19 @@ private String getTableListResponse(String route) { closeDatabase(); mSelectedDatabase = Constants.APP_SHARED_PREFERENCES; } else { - openDatabase(database); - response = DatabaseHelper.getAllTableName(sqLiteDB); + try { + if (Utils.isDbEncrypted(database, mDatabaseFiles)) { + openDatabase(database, password); + } else { + openDatabase(database, null); + } + response = DatabaseHelper.getAllTableName(sqLiteDB); + } catch (Exception e) { + response = new Response(); + response.isSuccessful = false; + response.dbVersion = 0; + response.error = e.toString(); + } mSelectedDatabase = database; } return mGson.toJson(response); @@ -390,7 +401,7 @@ private String deleteSelectedDatabaseAndGetResponse() { try { closeDatabase(); - File dbFile = mDatabaseFiles.get(mSelectedDatabase).first; + File dbFile = mDatabaseFiles.get(mSelectedDatabase); response.isSuccessful = dbFile.delete(); if (response.isSuccessful) { diff --git a/debug-db-base/src/main/java/com/amitshekhar/sqlite/DBFactory.java b/debug-db-base/src/main/java/com/amitshekhar/sqlite/DBFactory.java index 0378184..ebff096 100644 --- a/debug-db-base/src/main/java/com/amitshekhar/sqlite/DBFactory.java +++ b/debug-db-base/src/main/java/com/amitshekhar/sqlite/DBFactory.java @@ -6,4 +6,6 @@ public interface DBFactory { SQLiteDB create(Context context, String path, String password); + boolean supportEncryptedDb(); + } diff --git a/debug-db-base/src/main/java/com/amitshekhar/utils/DatabaseFileProvider.java b/debug-db-base/src/main/java/com/amitshekhar/utils/DatabaseFileProvider.java index 473d44a..82c4791 100644 --- a/debug-db-base/src/main/java/com/amitshekhar/utils/DatabaseFileProvider.java +++ b/debug-db-base/src/main/java/com/amitshekhar/utils/DatabaseFileProvider.java @@ -20,10 +20,8 @@ package com.amitshekhar.utils; import android.content.Context; -import android.util.Pair; import java.io.File; -import java.text.MessageFormat; import java.util.HashMap; /** @@ -32,39 +30,19 @@ public class DatabaseFileProvider { - private final static String DB_PASSWORD_RESOURCE = "DB_PASSWORD_{0}"; - private DatabaseFileProvider() { // This class in not publicly instantiable } - public static HashMap> getDatabaseFiles(Context context) { - HashMap> databaseFiles = new HashMap<>(); + public static HashMap getDatabaseFiles(Context context) { + HashMap databaseFiles = new HashMap<>(); try { for (String databaseName : context.databaseList()) { - String password = getDbPasswordFromStringResources(context, databaseName); - databaseFiles.put(databaseName, new Pair<>(context.getDatabasePath(databaseName), password)); + databaseFiles.put(databaseName, context.getDatabasePath(databaseName)); } } catch (Exception e) { e.printStackTrace(); } return databaseFiles; } - - private static String getDbPasswordFromStringResources(Context context, String name) { - String nameWithoutExt = name; - if (nameWithoutExt.endsWith(".db")) { - nameWithoutExt = nameWithoutExt.substring(0, nameWithoutExt.lastIndexOf('.')); - } - String resourceName = MessageFormat.format(DB_PASSWORD_RESOURCE, nameWithoutExt.toUpperCase()); - String password = ""; - - int resourceId = context.getResources().getIdentifier(resourceName, "string", context.getPackageName()); - - if (resourceId != 0) { - password = context.getString(resourceId); - } - - return password; - } } diff --git a/debug-db-base/src/main/java/com/amitshekhar/utils/Utils.java b/debug-db-base/src/main/java/com/amitshekhar/utils/Utils.java index da85430..d19fe5a 100644 --- a/debug-db-base/src/main/java/com/amitshekhar/utils/Utils.java +++ b/debug-db-base/src/main/java/com/amitshekhar/utils/Utils.java @@ -21,16 +21,15 @@ import android.content.res.AssetManager; import android.text.TextUtils; -import android.util.Log; -import android.util.Pair; import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import java.util.HashMap; +import java.util.Map; /** * Created by amitshekhar on 06/02/17. @@ -83,30 +82,24 @@ public static byte[] loadContent(String fileName, AssetManager assetManager) thr } } - public static byte[] getDatabase(String selectedDatabase, HashMap> databaseFiles) { + public static byte[] getDatabase(String selectedDatabase, Map databaseFiles) { if (TextUtils.isEmpty(selectedDatabase) || !databaseFiles.containsKey(selectedDatabase)) { return null; } byte[] byteArray = new byte[0]; - try { - File file = databaseFiles.get(selectedDatabase).first; + File file = databaseFiles.get(selectedDatabase); - byteArray = null; - try { - InputStream inputStream = new FileInputStream(file); - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - byte[] b = new byte[(int) file.length()]; - int bytesRead; + try (InputStream is = new FileInputStream(file); + ByteArrayOutputStream bos = new ByteArrayOutputStream()) { + byte[] b = new byte[(int) file.length()]; + int bytesRead; - while ((bytesRead = inputStream.read(b)) != -1) { - bos.write(b, 0, bytesRead); - } - - byteArray = bos.toByteArray(); - } catch (IOException e) { - Log.e(TAG, "getDatabase: ", e); + while ((bytesRead = is.read(b)) != -1) { + bos.write(b, 0, bytesRead); } + + byteArray = bos.toByteArray(); } catch (Exception e) { e.printStackTrace(); } @@ -114,4 +107,19 @@ public static byte[] getDatabase(String selectedDatabase, HashMap databaseFiles) { + if (TextUtils.isEmpty(database) || !databaseFiles.containsKey(database)) { + return false; + } + File file = databaseFiles.get(database); + try (DataInputStream is = new DataInputStream(new FileInputStream(file))) { + byte[] b = new byte[16]; + is.readFully(b); + String string = new String(b); + return !"SQLite format 3\000".equals(string); + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } } diff --git a/debug-db-encrypt/build.gradle b/debug-db-encrypt/build.gradle index 8b1687e..b1f5bc8 100644 --- a/debug-db-encrypt/build.gradle +++ b/debug-db-encrypt/build.gradle @@ -19,8 +19,9 @@ android { dependencies { api project(':debug-db-base') - implementation 'net.zetetic:android-database-sqlcipher:3.5.9' + implementation 'androidx.sqlite:sqlite:2.4.0' + implementation 'net.zetetic:sqlcipher-android:4.6.1' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test:runner:1.5.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' -} \ No newline at end of file +} diff --git a/debug-db-encrypt/src/main/java/com/amitshekhar/debug/encrypt/sqlite/DebugDBEncryptFactory.java b/debug-db-encrypt/src/main/java/com/amitshekhar/debug/encrypt/sqlite/DebugDBEncryptFactory.java index af0294a..138f751 100644 --- a/debug-db-encrypt/src/main/java/com/amitshekhar/debug/encrypt/sqlite/DebugDBEncryptFactory.java +++ b/debug-db-encrypt/src/main/java/com/amitshekhar/debug/encrypt/sqlite/DebugDBEncryptFactory.java @@ -4,15 +4,21 @@ import com.amitshekhar.sqlite.DBFactory; import com.amitshekhar.sqlite.SQLiteDB; - -import net.sqlcipher.database.SQLiteDatabase; +import net.zetetic.database.sqlcipher.SQLiteDatabase; public class DebugDBEncryptFactory implements DBFactory { + static { + System.loadLibrary("sqlcipher"); + } + @Override public SQLiteDB create(Context context, String path, String password) { - SQLiteDatabase.loadLibs(context); - return new DebugEncryptSQLiteDB(SQLiteDatabase.openOrCreateDatabase(path, password, null)); + return new DebugEncryptSQLiteDB(SQLiteDatabase.openOrCreateDatabase(path, password, null, null)); } + @Override + public boolean supportEncryptedDb() { + return true; + } } diff --git a/debug-db-encrypt/src/main/java/com/amitshekhar/debug/encrypt/sqlite/DebugEncryptSQLiteDB.java b/debug-db-encrypt/src/main/java/com/amitshekhar/debug/encrypt/sqlite/DebugEncryptSQLiteDB.java index 5c387cb..1f00e57 100644 --- a/debug-db-encrypt/src/main/java/com/amitshekhar/debug/encrypt/sqlite/DebugEncryptSQLiteDB.java +++ b/debug-db-encrypt/src/main/java/com/amitshekhar/debug/encrypt/sqlite/DebugEncryptSQLiteDB.java @@ -5,8 +5,7 @@ import android.database.SQLException; import com.amitshekhar.sqlite.SQLiteDB; - -import net.sqlcipher.database.SQLiteDatabase; +import net.zetetic.database.sqlcipher.SQLiteDatabase; /** * Created by anandgaurav on 12/02/18. diff --git a/debug-db/src/main/java/com/amitshekhar/debug/sqlite/DebugDBFactory.java b/debug-db/src/main/java/com/amitshekhar/debug/sqlite/DebugDBFactory.java index 3a797f5..e026a53 100644 --- a/debug-db/src/main/java/com/amitshekhar/debug/sqlite/DebugDBFactory.java +++ b/debug-db/src/main/java/com/amitshekhar/debug/sqlite/DebugDBFactory.java @@ -13,4 +13,8 @@ public SQLiteDB create(Context context, String path, String password) { return new DebugSQLiteDB(SQLiteDatabase.openOrCreateDatabase(path, null)); } + @Override + public boolean supportEncryptedDb() { + return false; + } } diff --git a/sample-app-encrypt/build.gradle b/sample-app-encrypt/build.gradle index b048340..1b1d73d 100644 --- a/sample-app-encrypt/build.gradle +++ b/sample-app-encrypt/build.gradle @@ -14,7 +14,6 @@ android { buildTypes { debug { resValue("string", "PORT_NUMBER", "8080") - resValue("string", "DB_PASSWORD_PERSON", "a_password") } release { minifyEnabled false @@ -25,8 +24,9 @@ android { dependencies { debugImplementation project(':debug-db-encrypt') + implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) implementation 'androidx.appcompat:appcompat:1.4.2' - implementation 'net.zetetic:android-database-sqlcipher:3.5.9' + implementation 'net.zetetic:sqlcipher-android:4.6.1' implementation "androidx.room:room-runtime:2.5.0" annotationProcessor "androidx.room:room-compiler:2.5.0" testImplementation 'junit:junit:4.13.2' diff --git a/sample-app-encrypt/src/main/java/com/sample/encrypt/database/PersonDBHelper.java b/sample-app-encrypt/src/main/java/com/sample/encrypt/database/PersonDBHelper.java index bb95c46..5e9713d 100644 --- a/sample-app-encrypt/src/main/java/com/sample/encrypt/database/PersonDBHelper.java +++ b/sample-app-encrypt/src/main/java/com/sample/encrypt/database/PersonDBHelper.java @@ -19,13 +19,14 @@ package com.sample.encrypt.database; +import android.annotation.SuppressLint; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; -import net.sqlcipher.DatabaseUtils; -import net.sqlcipher.database.SQLiteDatabase; -import net.sqlcipher.database.SQLiteOpenHelper; +import net.zetetic.database.DatabaseUtils; +import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.zetetic.database.sqlcipher.SQLiteOpenHelper; import java.util.ArrayList; @@ -39,10 +40,12 @@ public class PersonDBHelper extends SQLiteOpenHelper { public static final String PERSON_COLUMN_ADDRESS = "address"; private static final String DB_PASSWORD = "a_password"; - public PersonDBHelper(Context context) { + static { + System.loadLibrary("sqlcipher"); + } - super(context, DATABASE_NAME, null, 1); - SQLiteDatabase.loadLibs(context); + public PersonDBHelper(Context context) { + super(context, DATABASE_NAME, DB_PASSWORD, null, 1, 0, null, null, false); } @Override @@ -60,7 +63,7 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } public boolean insertPerson(String firstName, String lastName, String address) { - SQLiteDatabase db = this.getWritableDatabase(DB_PASSWORD); + SQLiteDatabase db = this.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("first_name", firstName); contentValues.put("last_name", lastName); @@ -71,19 +74,19 @@ public boolean insertPerson(String firstName, String lastName, String address) { } public Cursor getData(int id) { - SQLiteDatabase db = this.getReadableDatabase(DB_PASSWORD); + SQLiteDatabase db = this.getReadableDatabase(); Cursor res = db.rawQuery("select * from person where id=" + id + "", null); return res; } public int numberOfRows() { - SQLiteDatabase db = this.getReadableDatabase(DB_PASSWORD); + SQLiteDatabase db = this.getReadableDatabase(); int numRows = (int) DatabaseUtils.queryNumEntries(db, PERSON_TABLE_NAME); return numRows; } public boolean updatePerson(Integer id, String firstName, String lastName, String address, float mileage) { - SQLiteDatabase db = this.getWritableDatabase(DB_PASSWORD); + SQLiteDatabase db = this.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("first_name", firstName); contentValues.put("last_name", lastName); @@ -94,16 +97,17 @@ public boolean updatePerson(Integer id, String firstName, String lastName, Strin } public Integer deletePerson(Integer id) { - SQLiteDatabase db = this.getWritableDatabase(DB_PASSWORD); + SQLiteDatabase db = this.getWritableDatabase(); return db.delete("person", "id = ? ", new String[]{Integer.toString(id)}); } + @SuppressLint("Range") public ArrayList getAllPerson() { ArrayList arrayList = new ArrayList<>(); - SQLiteDatabase db = this.getReadableDatabase(DB_PASSWORD); + SQLiteDatabase db = this.getReadableDatabase(); Cursor res = db.rawQuery("select * from person", null); res.moveToFirst(); @@ -119,7 +123,7 @@ public ArrayList getAllPerson() { } public int count() { - SQLiteDatabase db = getReadableDatabase(DB_PASSWORD); + SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.rawQuery("select * from person", null); try { if (cursor != null && cursor.getCount() > 0) { diff --git a/sample-app-encrypt/src/main/java/com/sample/encrypt/utils/Utils.java b/sample-app-encrypt/src/main/java/com/sample/encrypt/utils/Utils.java index 1c448a6..73f91f7 100644 --- a/sample-app-encrypt/src/main/java/com/sample/encrypt/utils/Utils.java +++ b/sample-app-encrypt/src/main/java/com/sample/encrypt/utils/Utils.java @@ -61,11 +61,11 @@ public static void setCustomDatabaseFiles(Context context) { Class debugDB = Class.forName("com.amitshekhar.DebugDB"); Class[] argTypes = new Class[]{HashMap.class}; Method setCustomDatabaseFiles = debugDB.getMethod("setCustomDatabaseFiles", argTypes); - HashMap> customDatabaseFiles = new HashMap<>(); + HashMap customDatabaseFiles = new HashMap<>(); // set your custom database files customDatabaseFiles.put(ExtTestDBHelper.DATABASE_NAME, - new Pair<>(new File(context.getFilesDir() + "/" + ExtTestDBHelper.DIR_NAME + - "/" + ExtTestDBHelper.DATABASE_NAME), "")); + new File(context.getFilesDir() + "/" + ExtTestDBHelper.DIR_NAME + + "/" + ExtTestDBHelper.DATABASE_NAME)); setCustomDatabaseFiles.invoke(null, customDatabaseFiles); } catch (Exception ignore) { diff --git a/sample-app/src/main/java/com/sample/utils/Utils.java b/sample-app/src/main/java/com/sample/utils/Utils.java index e706a9d..6a9b083 100644 --- a/sample-app/src/main/java/com/sample/utils/Utils.java +++ b/sample-app/src/main/java/com/sample/utils/Utils.java @@ -61,11 +61,11 @@ public static void setCustomDatabaseFiles(Context context) { Class debugDB = Class.forName("com.amitshekhar.DebugDB"); Class[] argTypes = new Class[]{HashMap.class}; Method setCustomDatabaseFiles = debugDB.getMethod("setCustomDatabaseFiles", argTypes); - HashMap> customDatabaseFiles = new HashMap<>(); + HashMap customDatabaseFiles = new HashMap<>(); // set your custom database files customDatabaseFiles.put(ExtTestDBHelper.DATABASE_NAME, - new Pair<>(new File(context.getFilesDir() + "/" + ExtTestDBHelper.DIR_NAME + - "/" + ExtTestDBHelper.DATABASE_NAME), "")); + new File(context.getFilesDir() + "/" + ExtTestDBHelper.DIR_NAME + + "/" + ExtTestDBHelper.DATABASE_NAME)); setCustomDatabaseFiles.invoke(null, customDatabaseFiles); } catch (Exception ignore) {