android - Multidex、Proguard 和 Firebase
问题描述
当我将 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]]
这是我的毕业文件:
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); } }
在应用程序标签中
android:name="MyApplication"
我试图用 proguard 维护 FirebaseInitProvider 类,但它没有用。该应用程序也停止工作!
我还检查了 dex 文件和 FirebaseInitProvider 在 APK 内。
有什么解决办法吗?
解决方案
将此添加到您的 proguard 文件中
-keep class com.google.firebase.** { *; }
推荐阅读
- python - 在scrapy中禁用递归抓取
- interface - 使用通用 lambda 处理接口集合的方法
- rust - 无法对 ndarray::ViewRepr 进行数学运算
- c# - .NET 5 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头
- c - 为什么 gcc 和 gdb 之间存在意见分歧
- excel - 动态 GETPIVOTDATA 公式到 SUM,每列具有不同的日期范围
- reactjs - 从反应中使用express / mongodb服务器进行firebase authcheck的麻烦
- css - 使用 css 定位元素附近的文本
- java - 如何在 Java 中生成多个随机变量?
- reactjs - 使用 Typescript 反应 useRef:类型“HTMLAudioElement”.ts(2339) 上不存在属性“playbackRate”