WIS*_*SHY 138 android firebase
我在应用程序启动时遇到以下异常.
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.vfirst.ifbagro-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.vfirst.ifbagro-1, /vendor/lib, /system/lib]]
at android.app.ActivityThread.installProvider(ActivityThread.java:4993)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4596)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4536)
at android.app.ActivityThread.access$1300(ActivityThread.java:149)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5214)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList[[zip file "/data/app/com.vfirst.ifbagro-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.vfirst.ifbagro-1, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at android.app.ActivityThread.installProvider(ActivityThread.java:4978)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4596)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4536)
at android.app.ActivityThread.access$1300(ActivityThread.java:149)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5214)
at java.lang.reflect.Method.invokeNative(Native Method)
Run Code Online (Sandbox Code Playgroud)
这是app level build.gradle
apply plugin: 'com.android.application'
apply plugin: 'android-apt'
android {
compileSdkVersion 24
buildToolsVersion "24.0.1"
defaultConfig {
applicationId "com.vfirst.ifbagro"
minSdkVersion 17
targetSdkVersion 24
versionCode 1
versionName "1.0"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:design:24.2.1'
compile 'com.android.support:support-v4:24.2.1'
compile 'com.google.android.gms:play-services-gcm:9.4.0'
compile 'com.google.android.gms:play-services-location:9.4.0'
compile 'com.android.support:multidex:1.0.1'
compile 'com.google.firebase:firebase-messaging:9.4.0'
compile 'com.google.android.gms:play-services:9.4.0'
testCompile 'junit:junit:4.12'
}
apply plugin: 'com.google.gms.google-services'
Run Code Online (Sandbox Code Playgroud)
这是我的应用程序级build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
classpath 'com.google.gms:google-services:3.0.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
classpath 'com.google.gms:google-services:3.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
joh*_*nvs 136
我有同样的错误,我使用MultiDex解决了它,如此链接所述:https: //developer.android.com/studio/build/multidex.html
有时仅仅启用MultiDex是不够的.
如果主DEX文件中未提供启动期间所需的任何类,则您的应用程序将崩溃并显示错误java.lang.NoClassDefFoundError. https://developer.android.com/studio/build/multidex#keep
启动期间需要FirebaseInitProvider.
因此,您必须在主DEX文件中根据需要手动指定FirebaseInitProvider.
build.gradle文件
android {
buildTypes {
release {
multiDexKeepFile file('multidex-config.txt')
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
multidex-config.txt(与build.gradle文件位于同一目录中)
com/google/firebase/provider/FirebaseInitProvider.class
Run Code Online (Sandbox Code Playgroud)
Shy*_*dda 87
我也面临同样的问题,最后通过Instant Run在android studio中禁用来解决它.
设置→构建,执行,部署→即时运行并取消选中启用即时运行
小智 46
在build.gradle(Module:app)文件中,将下面的代码插入defaultConfig:
defaultConfig {
applicationId "com.***.****"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
multiDexEnabled true
}
Run Code Online (Sandbox Code Playgroud)
并插入依赖项:
compile 'com.android.support:multidex:1.0.1'
Run Code Online (Sandbox Code Playgroud)
然后将代码添加到清单:
<application
android:name="android.support.multidex.MultiDexApplication"
Run Code Online (Sandbox Code Playgroud)
小智 41
我在(YouTube播放器项目)中遇到了同样的问题......以下问题解决了我的问题:
将此代码添加到您的build.gradle(module:app)里面defaultConfing:
defaultConfig {
....
....
multiDexEnabled = true
}
Run Code Online (Sandbox Code Playgroud)将此代码添加到您的build.gradle(module:app)里面dependencies:
dependencies {
compile 'com.android.support:multidex:1.0.1'
.....
.....
}
Run Code Online (Sandbox Code Playgroud)开放式AndroidManifest.xml内部application:
<application
android:name="android.support.multidex.MultiDexApplication"
.....
.....
</application>
Run Code Online (Sandbox Code Playgroud)
或者如果您有App类,请从MultiDexApplication扩展它,如:
public class MyApp extends MultiDexApplication {
.....
Run Code Online (Sandbox Code Playgroud)最后,我认为您应该在SDK Manager的Extras中下载Android Support Repository.
小智 28
只需在应用程序类中覆盖以下方法即可.
public class YourApplication extends Application {
@Override
protected void attachBaseContext(Context context) {
super.attachBaseContext(context);
MultiDex.install(this);
}
@Override
public void onCreate() {
super.onCreate();
Realm.init(this); //initialize other plugins
}
}
Run Code Online (Sandbox Code Playgroud)
Eda*_*izi 18
启用multidex不是一个好的解决方案因为multidex在android中有另一个用法看到这个答案什么是multidex
正如@Shylendra Madda所说,解决方案正在禁用即时运行
设置→构建,执行,部署→即时运行并取消选中启用即时运行
我觉得这个问题的原因是启用了即时来看,Android的工作室不要把库如firebase成生成APK以减少项目建设时间,因为firebase 库和其他库,如maps与他人是存在于游戏服务和游戏服务安装在Android设备上所以如果启用即时运行不需要将它们放在生成的apk中,以使构建时间更快.
因此,当您解压缩apk并将其安装在另一台设备上时,您将看到此异常
Sok*_*Pon 18
当您的应用及其引用的库超过65,536种方法时,您会遇到构建错误,表明您的应用已达到Android构建架构的限制
如果你的minSdkVersion设置为21或更高,你需要做的就是在你的模块级build.gradle文件中将multiDexEnabled设置为true,如下所示:
Run Code Online (Sandbox Code Playgroud)android { defaultConfig { ... minSdkVersion 21 multiDexEnabled true } ... }
但是,如果您的minSdkVersion设置为20或更低,则必须使用multidex支持库,如下所示:
1.修改模块级build.gradle文件以启用multidex并将multidex库添加为依赖项,如下所示:
Run Code Online (Sandbox Code Playgroud)android { defaultConfig { ... minSdkVersion 15 multiDexEnabled true } ... } dependencies { implementation 'com.android.support:multidex:1.0.3' }2.根据您是否覆盖Application类,执行以下操作之一:
- 如果不覆盖Application类,请编辑清单文件以在标记中设置android:name,如下所示:
Run Code Online (Sandbox Code Playgroud)<application android:name="android.support.multidex.MultiDexApplication" > ... </application>
- 如果您覆盖Application类,请将其更改为扩展MultiDexApplication(如果可能),如下所示:
Run Code Online (Sandbox Code Playgroud)public class MyApplication extends MultiDexApplication { ... }
- 或者,如果您覆盖Application类但无法更改基类,则可以改为覆盖attachBaseContext()方法并调用MultiDex.install(this)以启用multidex:
Run Code Online (Sandbox Code Playgroud)public class MyApplication extends SomeOtherApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
Gun*_*tel 11
在尝试所有解决方案后,我也遇到了同样的问题,我找到了以下解决方案.
如果您已应用了proguard规则,请在ProGuard规则中添加以下行
-keep class com.google.firebase.provider.FirebaseInitProvider
Run Code Online (Sandbox Code Playgroud)
它解决了我的问题.
1:转到gradle enable multiDexEnabled并在依赖项中添加multidex库。
android {
...
defaultConfig {
multiDexEnabled true
...
}
}
dependencies {
// add dependency
implementation 'com.android.support:multidex:1.0.1'
}
Run Code Online (Sandbox Code Playgroud)
2:转到清单文件并编写android:name =“。MyApplication”(类名(MyApplication)是可选的,您可以编写任何内容)。
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
.
.
.
.
.
</application>
Run Code Online (Sandbox Code Playgroud)
3:在清单文件中编写了android:name =“。MyApplication”内部应用程序时。这会给您一个错误,因为您没有创建MyApplication类。创建MyApplication类可以通过“应用程序”类对其进行扩展,或者只需单击。MyApplication,在语法的左侧出现一个红色的小气球,单击它,您将在菜单中看到(创建MyApplication类),单击它并包含下面的方法在该类内。
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
Run Code Online (Sandbox Code Playgroud)
如果您想获取更多信息,请单击此链接:[ https://developer.android.com/studio/build/multidex.html]
希望它为您工作。
小智 5
首先将以下内容添加到build.gradle(Module:app)---->中
defaultConfig{
..
multiDexEnabled true
..
}
Run Code Online (Sandbox Code Playgroud)
然后在同一文件中添加以下内容
dependencies{
...
compile 'com.android.support:multidex:1.0.1'
...
}
Run Code Online (Sandbox Code Playgroud)
然后在AndroidManifest.xml中编写以下内容
<application
android:name="android.support.multidex.MultiDexApplication"
.....
.....
</application>
Run Code Online (Sandbox Code Playgroud)
而已.它肯定会奏效
| 归档时间: |
|
| 查看次数: |
87969 次 |
| 最近记录: |