android - 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,没有问题。提示?
解决方案
尝试:
-keep public class com.mysql.** {*;}
因为您丢失的课程在 . 下的深层子包中com.mysql
,而不是直接在com.mysql
.
如果这没有帮助,请尝试运行一些故障排除报告,看看它们是否为您提供任何线索。
通过 jdbc 驱动程序连接到 mysql 对我来说很重要
恕我直言,仅仅因为您认为它必不可少并不意味着它是大多数应用程序和开发人员的明智选择。JDBC 是古老的,是围绕客户端和服务器设计的,位于稳定的安全 LAN 上。它不是为移动设备设计的。虽然欢迎您使用它,但我始终建议开发人员做其他事情。
推荐阅读
- ms-access - 如何远程连接到Access数据库?
- xcode - 将 SDK 设置为 12.1
- cmd - Azure Devops (VSTS) - 在控制台中以管理员身份启动构建代理(交互模式)
- javascript - 如何制作输出 html 的 wordpress 块?
- regex - 正则表达式:匹配第一次出现的:
- php - 如何在 swagger-lume 中描述请求中的数组数组
- vim - 如何将vim的输出重定向到终端?
- python - 熊猫:从 SettingWithCopyWarning 到 loc 和 iloc
- sql - Postgresql:间隔中每天的平均值
- node.js - 使用 websocket 连接到在 AWS 上运行的 Parity?