我知道这个问题已被问了一百万次然而,我找不到我的具体情况的答案。我有一个包含所有代码的库,以及一些导入库的其他模块。
-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">
构建依赖关系如下所示:
dependencies {
releaseCompile project(path: ':mylibrary', configuration: 'release')
debugCompile project(path: ':mylibrary', configuration: 'debug')
}
我的基本应用程序初始化multidex的方法:
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
try {
MultiDex.install(this);
}catch (RuntimeException e){}
}
我的一些规则,我已在两个位置(库和应用程序)添加。这些不包括第三方库和我自己的一些类的一些规则。
-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及其缩减的资源(例如发布版本),它们也会正常运行。我注意到的另一个奇怪的行为是,当我在代码的某些部分设置断点并运行发布版本(将debuggable设置为true)时,它会在s8上中断,但不会在moto上中断。
为什么这种奇怪的行为?我发现超级相似的另一个问题是unable to instantiate application - ClassNotFoundException。但仍然没有解决方案。
修改
根据@Mostafa Anter的建议改变我在应用程序上编译库的方式后:
compile project(path: ':mylibrary', configuration: 'debug')
它开始给我这个错误。我关掉了我的即时运行。
答案 0 :(得分:0)
make base class extend Application
然后在onCreate方法中调用此行MultiDex.install(this);
修改模块级build.gradle文件以启用multidex并将multidex库添加为依赖项,如下所示:
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
答案 1 :(得分:0)
如果您使用JavaVersion.VERSION_1_8,请确保在所有模块中使用它
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}