Android java.lang.RuntimeException:无法实例化应用程序。ClassNotFoundException:未找到类
我知道这个问题已经被问过无数次了,但我找不到我的具体情况的答案。我有一个包含所有代码的库,还有几个导入库的其他模块Android java.lang.RuntimeException:无法实例化应用程序。ClassNotFoundException:未找到类,android,firebase,gradle,android-multidex,Android,Firebase,Gradle,Android Multidex,我知道这个问题已经被问过无数次了,但我找不到我的具体情况的答案。我有一个包含所有代码的库,还有几个导入库的其他模块 -project --mylibrary ---sr/main/java ----co/android/mylibrary ----BaseApp (extends MultidexApp) --Application1 ---sr/main/java ----co/android/app2 -----Android Manifest --Application2 ---sr/ma
-project
--mylibrary
---sr/main/java
----co/android/mylibrary
----BaseApp (extends MultidexApp)
--Application1
---sr/main/java
----co/android/app2
-----Android Manifest
--Application2
---sr/main/java
----co/android/app2
-----Android Manifest
两个清单都像这样使用基本应用程序
<application
android:name="co.android.mylibrary.BaseApp"
android:allowBackup="false"
android:fullBackupContent="false"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:theme="@style/AppTheme"
tools:replace="android:icon,android:theme, android:allowBackup">
My base app初始化多索引的方法:
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
try {
MultiDex.install(this);
}catch (RuntimeException e){}
}
我在库和应用程序的两个位置都添加了一些proguard规则。这些不包括第三方库的一些规则和我自己的一些类
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.view.View
-keep public class co.android.mylibrary.data.greendao.**{ *; }
因此,该应用程序在我的s8上运行良好,但在某些手机(如moto G)上运行不正常。如果启用Proguard并减少其资源(如发布版本),它们也会运行良好。我注意到的另一个奇怪的行为是,当我在代码的某些部分上设置断点并在可调试设置为true的情况下运行发布版本时,它会在s8上中断,但在moto上不会
为什么会有这种奇怪的行为?我发现的另一个超级相似的问题是。但仍然没有解决方案
这是错误的完整日志。忽略包名。
编辑
根据@Mostafa-Anter的建议,改变了我在应用程序上编译库的方式后:
compile project(path: ':mylibrary', configuration: 'debug')
它开始给我这个错误。我的即时跑步功能已关闭
使基类扩展应用程序
然后在onCreate方法内部调用这个lineMultiDex.installthis
修改模块级build.gradle文件以启用multidex,并将multidex库添加为依赖项,如下所示:
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
如果您使用JavaVersion.VERSION_1_8,请确保在所有模块中都使用它
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
能否显示ClassNotFoundException的logcat详细信息?是否使用proguard?如果是,请向我们提供rulestry,将这一行添加到progaurd-保留公共类您的\u缺少\u类\u完整\u名称否。那没用。我添加了类似-keep public class co.android.mylibrary.BaseApp的内容。此外,这是在调试版本上,我认为这根本不重要,因为收缩功能已禁用。启用收缩功能后,它将运行应用程序。但在我希望的某些代码处不会中断,这会在某些设备上导致奇怪的行为。请尝试替换ReleaseComile projectpath:':mylibrary',配置:'release'debugCompile projectpath:':mylibrary',配置:'debug'with compile project:'mylibrary'
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}