MultiDex 在 Android 4.4 中导致 java.lang.NoClassDefFoundError
MultiDex cause java.lang.NoClassDefFoundError in Android 4.4
我想将 Mina sshd 导入我的 android 应用程序。
implementation group: 'org.apache.sshd', name: 'sshd-core', version: '2.1.0'
但是,在运行时,这一行
public static final Factory<SshServer> DEFAULT_SSH_SERVER_FACTORY = SshServer::new;
抛出异常
> java.lang.NoClassDefFoundError:
org.apache.sshd.server.-$$Lambda$xH0wWyo4NWY-u4MuNlGAr_IPDQc
at org.apache.sshd.server.SshServer.<clinit>(SshServer.java:88)
at com.ymz.myapplication.MainActivity$startSshd.run(MainActivity.kt:25)
at java.lang.Thread.run(Thread.java:841)
一开始,我查看了class.dex
存在未定义的class。
我的gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.ymz.myapplication"
minSdkVersion 19
targetSdkVersion 28
multiDexEnabled true
versionCode 1
versionName "1.0"
multiDexKeepProguard file('multidex-config.pro')
// multiDexKeepFile file('multidex-config.txt')
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
....
}
已经添加文件multidex-config.pro
:
-keep class org.apache.sshd.** { *; }
尝试在混淆文件中添加以下规则:-
SSHd 需要 mina,而 mina 使用反射,所以一些 类 会被删除
-keep class org.apache.mina.** {*;}
-keep class org.apache.sshd.** {*;}
-dontwarn org.apache.sshd.**
-dontwarn org.apache.mina.**
还要检查您的 gradle 文件中的这两个依赖项:-
implementation 'org.apache.sshd:sshd-core:0.14.0'
implementation 'org.apache.mina:mina-core:2.0.19'
我想将 Mina sshd 导入我的 android 应用程序。
implementation group: 'org.apache.sshd', name: 'sshd-core', version: '2.1.0'
但是,在运行时,这一行
public static final Factory<SshServer> DEFAULT_SSH_SERVER_FACTORY = SshServer::new;
抛出异常
> java.lang.NoClassDefFoundError:
org.apache.sshd.server.-$$Lambda$xH0wWyo4NWY-u4MuNlGAr_IPDQc
at org.apache.sshd.server.SshServer.<clinit>(SshServer.java:88)
at com.ymz.myapplication.MainActivity$startSshd.run(MainActivity.kt:25)
at java.lang.Thread.run(Thread.java:841)
一开始,我查看了class.dex
存在未定义的class。
我的gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.ymz.myapplication"
minSdkVersion 19
targetSdkVersion 28
multiDexEnabled true
versionCode 1
versionName "1.0"
multiDexKeepProguard file('multidex-config.pro')
// multiDexKeepFile file('multidex-config.txt')
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
....
}
已经添加文件multidex-config.pro
:
-keep class org.apache.sshd.** { *; }
尝试在混淆文件中添加以下规则:-
SSHd 需要 mina,而 mina 使用反射,所以一些 类 会被删除
-keep class org.apache.mina.** {*;}
-keep class org.apache.sshd.** {*;}
-dontwarn org.apache.sshd.**
-dontwarn org.apache.mina.**
还要检查您的 gradle 文件中的这两个依赖项:-
implementation 'org.apache.sshd:sshd-core:0.14.0'
implementation 'org.apache.mina:mina-core:2.0.19'