Multidex、Proguard 和 Firebase
Posted
技术标签:
【中文标题】Multidex、Proguard 和 Firebase【英文标题】:Multidex, Proguard and Firebase 【发布时间】:2020-05-13 03:57:41 【问题描述】:当我将 Firebase Auth 和 Database 添加到我的项目时,会出现以下问题:
FATAL EXCEPTION: main Process: com.myapp, PID: 4024 java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList[[zip file "/data/app/com.myapp-NTr4rdWkzRUXkEy5dItLzQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp-NTr4rdWkzRUXkEy5dItLzQ==/lib/arm64, /system/lib64, /system/vendor/lib64]]
于是应用关闭了,我上网搜索了一下,发现可能是Multidex,但我尝试添加Multidex,出现以下错误:
FATAL EXCEPTION: main Process: com.myapp, PID: java.lang.ClassNotFoundException: Didn't find class ".MyApplication" on path: DexPathList[[zip file "/data/app/com.myapp-NTr4rdWkzRUXkEy5dItLzQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp-NTr4rdWkzRUXkEy5dItLzQ==/lib/arm64, /system/lib64, /system/vendor/lib64]]
这是我的 gradle 文件:
apply plugin: 'com.android.application'
android
compileSdkVersion 29
defaultConfig
applicationId "com.company.myapp"
minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName "1.0.0"
multiDexEnabled true
buildTypes
release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
debug
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
dependencies
compile 'com.google.firebase:firebase-auth:+'
compile 'com.google.firebase:firebase-database:+'
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'androidx.multidex:multidex:2.0.0+'
compile 'androidx.appcompat:appcompat:1.0.0'
compile 'androidx.legacy:legacy-support-v4:1.0.0'
compile 'com.google.android.material:material:1.0.0-rc01'
compile 'androidx.cardview:cardview:1.0.0'
正如某些论坛所述,应用程序必须包含 MyApplication 类
public class MyApplication extends Application
protected void attachBaseContext(Context base)
super.attachBaseContext(base);
MultiDex.install(this);
在Application标签中
android:name="MyApplication"
我尝试使用 proguard 维护 FirebaseInitProvider 类,但没有成功。该应用程序也停止运行!
我还检查了 dex 文件,FirebaseInitProvider 在 APK 中。
有什么办法吗?
【问题讨论】:
【参考方案1】:将此添加到您的 proguard 文件中
-keep class com.google.firebase.** *;
【讨论】:
请分享你的 proguard 文件和你的 AndroidManifest 文件以上是关于Multidex、Proguard 和 Firebase的主要内容,如果未能解决你的问题,请参考以下文章
Proguard 可以保存到 multidex 应用程序吗?
在 Android 应用程序中使用 MultiDex 运行 ProGuard 两次,只有第二次出现警告/注释?
Android ProGuard +MultiDex 导致 ClassNotFoundException
使用 Multidex 的 Android proguard