首页 > 解决方案 > jdbc mysql驱动程序和签名apk Android Studio 4的问题

问题描述

我声明通过 jdbc 驱动程序连接到 mysql 对我来说是必不可少的。这是一个多年来一直以这种方式工作的应用程序。

如果我在我的 samsung j5 上从 Android Studio 运行应用程序,它工作正常。相反,如果我使用签名编译 apk 并将其安装在同一设备上,则会收到以下错误消息:

09-01 18:01:17.106 21570-21586/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
Process: x.wifi, PID: 21570
java.lang.RuntimeException: An error occured while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:304)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:818)
 Caused by: java.lang.NoClassDefFoundError: com.mysql.jdbc.log.StandardLogger
    at b.b.a.a0.x()
    at b.b.a.a0.<clinit>()
    at b.b.a.q1.connect()
    at java.sql.DriverManager.getConnection(DriverManager.java:179)
    at java.sql.DriverManager.getConnection(DriverManager.java:213)
    at x.Connessione.B0()
    at x.Connessione.u()
    at x.WifiActivity.H()
    at x.WifiActivity.O()
    at x.WifiActivity$d0.a()
    at x.WifiActivity$d0.doInBackground()
    at android.os.AsyncTask$2.call(AsyncTask.java:292)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
    at java.lang.Thread.run(Thread.java:818) 

我的毕业

apply plugin: 'com.android.application'

android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
    applicationId "x.wifi"
    minSdkVersion 15
    targetSdkVersion 28
    versionCode 8
    versionName "1.7"
    testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
lintOptions {
    checkReleaseBuilds true
    // Or, if you prefer, you can continue to check for errors in release builds,
    // but continue the build even when errors are found:
    abortOnError false
}
buildTypes {
    release {

        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
       
        debuggable true
        minifyEnabled false
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
compileOptions {

    sourceCompatibility JavaVersion.VERSION_1_6

}
}

dependencies {


androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})

implementation group: 'mysql', name: 'mysql-connector-java', version: '5.0.8'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:2.0.1'
testImplementation 'junit:junit:4.13'
}

前卫:

-keep public class com.mysql.* {*;}
-dontwarn com.mysql.**

我已经尝试在 libs 中包含连接器 jar,显然使用了正确的 gradle 脚本配置,但结果是一样的。在将 Android Studio 从 4.0 更新到 4.0.1 以及将 gradle 从 4 更新到 6 之前,我正确编译并安装了签名的 apk,没有问题。提示?

标签: androidmysqljdbc

解决方案


尝试:

-keep public class com.mysql.** {*;}

因为您丢失的课程在 . 下的深层子包中com.mysql,而不是直接在com.mysql.

如果这没有帮助,请尝试运行一些故障排除报告,看看它们是否为您提供任何线索。

通过 jdbc 驱动程序连接到 mysql 对我来说很重要

恕我直言,仅仅因为您认为它必不可少并不意味着它是大多数应用程序和开发人员的明智选择。JDBC 是古老的,是围绕客户端和服务器设计的,位于稳定的安全 LAN 上。它不是为移动设备设计的。虽然欢迎您使用它,但我始终建议开发人员做其他事情。


推荐阅读