Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I get a SQLCipher error while running an app

I'm using sqlcipher in my dependencies. My build.gradle file is as given below:

apply plugin: 'com.android.application'

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    defaultConfig {
        applicationId "com.dell.prapproval"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode rootProject.ext.versionCode
        versionName "$rootProject.ext.versionName"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

       // setProperty("archivesBaseName", applicationId + "-v" + versionCode + "(" + versionName + ")")

        vectorDrawables.useSupportLibrary = true
        multiDexEnabled true
        consumerProguardFiles file('proguard.cfg')
        ndk {
            abiFilters "armeabi-v7a"
        }

    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    signingConfigs {
        config {
            keyAlias 'emc_mobile'
            keyPassword 'P@ssw0rd'
            storeFile file('EMC_MOBILE')
            storePassword 'P@ssw0rd'
        }
    }
    buildTypes {
        debug {
            minifyEnabled true
            shrinkResources false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
            //versionNameSuffix "-T"
        }
        release {
            debuggable true
            minifyEnabled false
            shrinkResources false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
           // versionNameSuffix "-R"

        }
    }
}

dependencies {
    implementation 'com.android.support:multidex:1.0.3'
    implementation(name: 'AirWatchSDK-release-18.5.5-SNAPSHOT', ext: 'aar')
    implementation(name: 'AWFramework-release-18.5.17-SNAPSHOT', ext: 'aar')
    implementation(name: 'AWNetworkLibrary-release-18.5.14-SNAPSHOT', ext: 'aar')
    implementation(name: 'CredentialsExt-18.3-SNAPSHOT', ext: 'aar')
    implementation(name: 'android-database-sqlcipher-3.5.9', ext: 'aar')
    implementation(name: 'littleproxy-1.1.0-beta2-d', ext: 'jar')
    implementation(name: 'slf4j-android-1.6.1-RC1', ext: 'jar')
    implementation(name: 'kotlin-stdlib-1.2.50', ext: 'jar')
   // implementation(name: 'okio-1.14.1', ext: 'jar')
   // implementation(name: 'gson-2.4', ext: 'jar')
    implementation(name: 'netty-all-4.0.34.Final.AW.a', ext: 'jar')
   // implementation(name: 'lang3-3.1', ext: 'jar')
   // implementation(name: 'zxing-3.2.1', ext: 'jar')
   // implementation(name: 'okhttp-3.6.0', ext: 'jar')
    implementation(name: 'guava-20.0', ext: 'jar')
    implementation(name: 'awrepackagedhttpclient-1.0.3', ext: 'jar')
    implementation(name: 'apptunnellib-07082016', ext: 'jar')

    implementation("com.android.support:preference-v14:$rootProject.ext.supportLibraryVersion") {
        exclude group: 'com.android.support', module: 'support-v4'
        exclude group: 'com.android.support', module: 'appcompat-v7'
        exclude group: 'com.android.support', module: 'support-annotations'
        exclude group: 'com.android.support', module: 'recyclerview-v7'
    }

    implementation "com.android.support:appcompat-v7:$rootProject.ext.supportLibraryVersion"
    implementation "com.android.support:design:$rootProject.ext.supportLibraryVersion"
    implementation "com.android.support:support-v4:$rootProject.ext.supportLibraryVersion"
    implementation "com.android.support:recyclerview-v7:$rootProject.ext.supportLibraryVersion"
    implementation "com.android.support:cardview-v7:$rootProject.ext.supportLibraryVersion"
    implementation "com.android.support:support-vector-drawable:$rootProject.ext.supportLibraryVersion"
    implementation "com.android.support:animated-vector-drawable:$rootProject.ext.supportLibraryVersion"
    implementation "com.android.support.constraint:constraint-layout:$rootProject.ext.constraintLayoutLibraryVersion"
    implementation "com.jpardogo.googleprogressbar:library:$rootProject.ext.googleprogressbarVersion"
    implementation "com.android.volley:volley:$rootProject.ext.volleyVersion"
    implementation "com.google.code.gson:gson:$rootProject.ext.gsonVersion"
    implementation "com.github.Shashank02051997:FancyToast-Android:$rootProject.ext.fancyToastVersion"
    //implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation "junit:junit:$rootProject.ext.junitLibraryVersion"
    androidTestImplementation "com.android.support.test:runner:$rootProject.ext.runnerLibraryVersion"
    androidTestImplementation "com.android.support.test.espresso:espresso-core:$rootProject.ext.espressoCoreLibraryVersion"

    implementation "com.google.android.gms:play-services-base:$rootProject.ext.googlePlayServiceVersion"

}  

So when I run my code in a mobile, I get below error:

09-11 15:48:23.876 30829-30878/com.dell.prapproval E/art: Failed to register native method net.sqlcipher.database.SQLiteDatabase.native_getDbLookaside()I in /data/app/com.dell.prapproval-1/split_lib_directories_apk.apk
09-11 15:48:23.877 30829-30878/com.dell.prapproval E/art: ----- class 'Lnet/sqlcipher/database/SQLiteDatabase;' cl=0x12d64ac0 -----
      objectSize=600 (136 from super)
      access=0x0008.0001
      super='java.lang.Class<net.sqlcipher.database.SQLiteClosable>' (cl=0x12d64ac0)
      vtable (33 entries, 4 in super):
         0: void net.sqlcipher.database.SQLiteDatabase.addSQLiteClosable(net.sqlcipher.database.SQLiteClosable)
         1: void net.sqlcipher.database.SQLiteDatabase.addToCompiledQueries(java.lang.String, net.sqlcipher.database.SQLiteCompiledSql)
         2: void net.sqlcipher.database.SQLiteDatabase.beginTransaction()
         3: void net.sqlcipher.database.SQLiteDatabase.beginTransactionWithListener(net.sqlcipher.database.SQLiteTransactionListener)
         4: void net.sqlcipher.database.SQLiteDatabase.close()
         5: net.sqlcipher.database.SQLiteStatement net.sqlcipher.database.SQLiteDatabase.compileStatement(java.lang.String)
         6: int net.sqlcipher.database.SQLiteDatabase.delete(java.lang.String, java.lang.String, java.lang.String[])
         7: void net.sqlcipher.database.SQLiteDatabase.endTransaction()
         8: void net.sqlcipher.database.SQLiteDatabase.execSQL(java.lang.String)
         9: net.sqlcipher.database.SQLiteCompiledSql net.sqlcipher.database.SQLiteDatabase.getCompiledStatementForSql(java.lang.String)
        10: java.lang.String net.sqlcipher.database.SQLiteDatabase.getPath()
        11: int net.sqlcipher.database.SQLiteDatabase.getVersion()
        12: long net.sqlcipher.database.SQLiteDatabase.insert(java.lang.String, java.lang.String, android.content.ContentValues)
        13: long net.sqlcipher.database.SQLiteDatabase.insertWithOnConflict(java.lang.String, java.lang.String, android.content.ContentValues, int)
        14: boolean net.sqlcipher.database.SQLiteDatabase.isOpen()
        15: boolean net.sqlcipher.database.SQLiteDatabase.isReadOnly()
        16: int net.sqlcipher.database.SQLiteDatabase.lastChangeCount()
        17: long net.sqlcipher.database.SQLiteDatabase.lastInsertRow()
        18: void net.sqlcipher.database.SQLiteDatabase.lock()
        19: void net.sqlcipher.database.SQLiteDatabase.native_execSQL(java.lang.String)
        20: void net.sqlcipher.database.SQLiteDatabase.onAllReferencesReleased()
        21: void net.sqlcipher.database.SQLiteDatabase.onCorruption()
        22: net.sqlcipher.Cursor net.sqlcipher.database.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String)
        23: net.sqlcipher.Cursor net.sqlcipher.database.SQLiteDatabase.query(boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String)
        24: net.sqlcipher.Cursor net.sqlcipher.database.SQLiteDatabase.queryWithFactory(net.sqlcipher.database.SQLiteDatabase$CursorFactory, boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String)
        25: net.sqlcipher.Cursor net.sqlcipher.database.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[])
        26: net.sqlcipher.Cursor net.sqlcipher.database.SQLiteDatabase.rawQueryWithFactory(net.sqlcipher.database.SQLiteDatabase$CursorFactory, java.lang.String, java.lang.String[], java.lang.String)
        27: void net.sqlcipher.database.SQLiteDatabase.removeSQLiteClosable(net.sqlcipher.database.SQLiteClosable)
09-11 15:48:23.878 30829-30878/com.dell.prapproval E/art:     28: void net.sqlcipher.database.SQLiteDatabase.setTransactionSuccessful()
        29: void net.sqlcipher.database.SQLiteDatabase.setVersion(int)
        30: void net.sqlcipher.database.SQLiteDatabase.unlock()
        31: int net.sqlcipher.database.SQLiteDatabase.update(java.lang.String, android.content.ContentValues, java.lang.String, java.lang.String[])
        32: int net.sqlcipher.database.SQLiteDatabase.updateWithOnConflict(java.lang.String, android.content.ContentValues, java.lang.String, java.lang.String[], int)
      direct methods (29 entries):
         0: void net.sqlcipher.database.SQLiteDatabase.<clinit>()
         1: void net.sqlcipher.database.SQLiteDatabase.<init>(java.lang.String, net.sqlcipher.database.SQLiteDatabase$CursorFactory, int, net.sqlcipher.DatabaseErrorHandler)
         2: void net.sqlcipher.database.SQLiteDatabase.access$000(net.sqlcipher.database.SQLiteDatabase, byte[])
         3: void net.sqlcipher.database.SQLiteDatabase.access$100(net.sqlcipher.database.SQLiteDatabase, char[])
         4: void net.sqlcipher.database.SQLiteDatabase.checkLockHoldTime()
         5: void net.sqlcipher.database.SQLiteDatabase.closeClosable()
         6: boolean net.sqlcipher.database.SQLiteDatabase.containsNull(char[])
09-11 15:48:23.880 30829-30878/com.dell.prapproval E/art:      7: net.sqlcipher.database.SQLiteDatabase net.sqlcipher.database.SQLiteDatabase.create(net.sqlcipher.database.SQLiteDatabase$CursorFactory, char[])
         8: void net.sqlcipher.database.SQLiteDatabase.dbclose()
         9: void net.sqlcipher.database.SQLiteDatabase.dbopen(java.lang.String, int)
        10: void net.sqlcipher.database.SQLiteDatabase.deallocCachedSqlStatements()
        11: void net.sqlcipher.database.SQLiteDatabase.enableSqlProfiling(java.lang.String)
        12: void net.sqlcipher.database.SQLiteDatabase.enableSqlTracing(java.lang.String)
        13: java.lang.String net.sqlcipher.database.SQLiteDatabase.findEditTable(java.lang.String)
        14: byte[] net.sqlcipher.database.SQLiteDatabase.getBytes(char[])
        15: java.lang.String net.sqlcipher.database.SQLiteDatabase.getTime()
        16: void net.sqlcipher.database.SQLiteDatabase.key(byte[])
        17: void net.sqlcipher.database.SQLiteDatabase.keyDatabase(net.sqlcipher.database.SQLiteDatabaseHook, java.lang.Runnable)
        18: void net.sqlcipher.database.SQLiteDatabase.key_mutf8(char[])
        19: void net.sqlcipher.database.SQLiteDatabase.loadLibs(android.content.Context)
        20: void net.sqlcipher.database.SQLiteDatabase.loadLibs(android.content.Context, java.io.File)
        21: void net.sqlcipher.database.SQLiteDatabase.loadLibs(android.content.Context, java.io.File, net.sqlcipher.database.SQLiteDatabase$LibraryLoader)
        22: void net.sqlcipher.database.SQLiteDatabase.lockForced()
        23: net.sqlcipher.database.SQLiteDatabase net.sqlcipher.database.SQLiteDatabase.openDatabase(java.lang.String, char[], net.sqlcipher.database.SQLiteDatabase$CursorFactory, int)
        24: net.sqlcipher.database.SQLiteDatabase net.sqlcipher.database.SQLiteDatabase.openDatabase(java.lang.String, char[], net.sqlcipher.database.SQLiteDatabase$CursorFactory, int, net.sqlcipher.database.SQLiteDatabaseHook, net.sqlcipher.DatabaseErrorHandler)
        25: void net.sqlcipher.database.SQLiteDatabase.openDatabaseInternal(char[], net.sqlcipher.database.SQLiteDatabaseHook)
        26: net.sqlcipher.database.SQLiteDatabase net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase(java.lang.String, char[], net.sqlcipher.database.SQLiteDatabase$CursorFactory, net.sqlcipher.database.SQLiteDatabaseHook, net.sqlcipher.DatabaseErrorHandler)
        27: void net.sqlcipher.database.SQLiteDatabase.rekey(byte[])
        28: void net.sqlcipher.database.SQLiteDatabase.unlockForced()
      static fields (4 entries):
         0: java.lang.String[] net.sqlcipher.database.SQLiteDatabase.CONFLICT_VALUES
         1: java.util.regex.Pattern net.sqlcipher.database.SQLiteDatabase.EMAIL_IN_DB_PATTERN
         2: java.util.WeakHashMap net.sqlcipher.database.SQLiteDatabase.sActiveDatabases
         3: int net.sqlcipher.database.SQLiteDatabase.sQueryLogTimeInMillis
      instance fields (27 entries):
         0: int net.sqlcipher.database.SQLiteDatabase.mCacheFullWarnings
         1: java.util.Map net.sqlcipher.database.SQLiteDatabase.mCompiledQueries
         2: net.sqlcipher.DatabaseErrorHandler net.sqlcipher.database.SQLiteDatabase.mErrorHandler
         3: net.sqlcipher.database.SQLiteDatabase$CursorFactory net.sqlcipher.database.SQLiteDatabase.mFactory
         4: int net.sqlcipher.database.SQLiteDatabase.mFlags
         5: boolean net.sqlcipher.database.SQLiteDatabase.mInnerTransactionIsSuccessful
         6: long net.sqlcipher.database.SQLiteDatabase.mLastLockMessageTime
         7: java.lang.String net.sqlcipher.database.SQLiteDatabase.mLastSqlStatement
         8: java.util.concurrent.locks.ReentrantLock net.sqlcipher.database.SQLiteDatabase.mLock
         9: long net.sqlcipher.database.SQLiteDatabase.mLockAcquiredThreadTime
        10: long net.sqlcipher.database.SQLiteDatabase.mLockAcquiredWallTime
        11: boolean net.sqlcipher.database.SQLiteDatabase.mLockingEnabled
        12: int net.sqlcipher.database.SQLiteDatabase.mMaxSqlCacheSize
        13: long net.sqlcipher.database.SQLiteDatabase.mNativeHandle
        14: int net.sqlcipher.database.SQLiteDatabase.mNumCacheHits
        15: int net.sqlcipher.database.SQLiteDatabase.mNumCacheMisses
        16: java.lang.String net.sqlcipher.database.SQLiteDatabase.mPath
        17: java.lang.String net.sqlcipher.database.SQLiteDatabase.mPathForLogs
        18: java.util.WeakHashMap net.sqlcipher.database.SQLiteDatabase.mPrograms
        19: int net.sqlcipher.database.SQLiteDatabase.mSlowQueryThreshold
        20: java.lang.Throwable net.sqlcipher.database.SQLiteDatabase.mStackTrace
        21: java.util.Map net.sqlcipher.database.SQLiteDatabase.mSyncUpdateInfo
        22: int net.sqlcipher.database.SQLiteDatabase.mTempTableSequence
        23: java.lang.String net.sqlcipher.database.SQLiteDatabase.mTimeClosed
        24: java.lang.String net.sqlcipher.database.SQLiteDatabase.mTimeOpened
        25: boolean net.sqlcipher.database.SQLiteDatabase.mTransactionIsSuccessful
        26: net.sqlcipher.database.SQLiteTransactionListener net.sqlcipher.database.SQLiteDatabase.mTransactionListener

I've even added ndk support code to build.gradle, but that error is still coming. How can I fix it?

like image 235
Ajay Kulkarni Avatar asked Sep 11 '18 11:09

Ajay Kulkarni


1 Answers

I assume you're obfuscating app. Did you apply proguard configuration from SQLChipher?

Unfortunately, they build it as aar library but don't include proguard configuration to it.

like image 61
Eugen Martynov Avatar answered Oct 21 '22 11:10

Eugen Martynov