source

com.google 클래스를 찾을 수 없습니다.화력 기지파이어베이스InitProvider"?

itover 2023. 6. 6. 10:48
반응형

com.google 클래스를 찾을 수 없습니다.화력 기지파이어베이스InitProvider"?

저는 앱 출시에서 아래와 같은 예외를 받고 있습니다.

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) 

앱 레벨 빌드.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'

이것은 나의 응용 프로그램 수준 빌드입니다.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
}

문제를 해결하는 방법은 무엇입니까?

저도 같은 오류가 있었고 다음 링크에 설명된 것처럼 MultiDex로 해결했습니다: https://developer.android.com/studio/build/multidex.html


때로는 MultiDex를 활성화하는 것만으로는 충분하지 않습니다.

시작하는 동안 필요한 클래스가 기본 DEX 파일에 제공되지 않으면 java.lang 오류와 함께 앱이 충돌합니다.ClassDefFound 오류가 없습니다.https://developer.android.com/studio/build/multidex#keep

파이어베이스시작하는 동안 InitProvider가 필요합니다.

따라서 Firebase를 수동으로 지정해야 합니다.기본 DEX 파일에 필요한 InitProvider.

build.gradle 파일

android {
    buildTypes {
        release {
            multiDexKeepFile file('multidex-config.txt')
            ...
        }
    }
}

multidex-config.txt(build.gradle 파일과 동일한 디렉토리에 있음)

com/google/firebase/provider/FirebaseInitProvider.class

저도 같은 문제에 직면했고 결국 사용하지 않도록 설정하여 해결했습니다.Instant Run안드로이드 스튜디오에서.

Settings → Build, Execution, Deployment → Instant Run(즉각 실행) 및 Enable Instant Run(즉각 실행 활성화) 선택 취소

업데이트:

최신 Android Studio 3.5+에는 Instant Run 옵션이 없습니다.이전 버전에만 적용할 수 있습니다.

저도 (유튜브 플레이어 프로젝트에서) 같은 문제를 겪었습니다.그리고 다음은 저를 위한 문제를 해결해주었습니다.

  1. 를 이코를에다니에 합니다.build.gradle) inside (파일: app) defaultConfing:

    defaultConfig {
        ....
        ....
        multiDexEnabled = true
    }
    
  2. 를 이코를에다니에 합니다.build.gradle) inside (파일: app) dependencies:

    dependencies {
        compile 'com.android.support:multidex:1.0.1'
        .....
        .....
    }
    
  3. 을 엽니다.AndroidManifest.xml 그안서 내에서.application:

    <application
        android:name="android.support.multidex.MultiDexApplication"
        .....
        .....
    </application>
    

    또는 App 클래스가 있는 경우 다음과 같이 MultiDex Application에서 확장하십시오.

    public class MyApp extends MultiDexApplication {
    .....
    

마지막으로 SDK 관리자의 Extras에서 Android 지원 저장소를 다운로드해야 합니다.

build.gradle(Module:app) 파일에서 아래 코드를 defaultConfig에 삽입합니다.

  defaultConfig {
        applicationId "com.***.****"
minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

및 종속성에 삽입:

implementation 'com.android.support:multidex:2.0.1'

그런 다음 매니페스트에 코드를 추가합니다.

<application 
    android:name="android.support.multidex.MultiDexApplication"

응용 프로그램 클래스에서 다음 메서드를 재정의하면 됩니다.

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 

    }
}

앱과 참조하는 라이브러리가 65,536 메서드를 초과하면 앱이 Android 빌드 아키텍처의 한계에 도달했음을 나타내는 빌드 오류가 발생합니다.

이 제한을 피하려면 다중 인덱스에 대해 앱을 구성해야 합니다.

minSdkVersion이 21 이상으로 설정된 경우 다음과 같이 모듈 수준의 build.gradle 파일에서 multiDexEnabled를 true로 설정하기만 하면 됩니다.

android {
    defaultConfig {
        ...
        minSdkVersion 21 
        multiDexEnabled true
    }
    ...   
}

그렇지 않으면 minSdkVersion이 20 이하로 설정된 경우 다음과 같이 멀티덱스 지원 라이브러리를 사용해야 합니다.

1.다음과 같이 모듈 수준의 build.gradle 파일을 수정하여 멀티덱스를 활성화하고 멀티덱스 라이브러리를 종속성으로 추가합니다.

android {
    defaultConfig {
        ...
        minSdkVersion 15 
        multiDexEnabled true
    }
    ...
 }

dependencies {
        implementation 'com.android.support:multidex:1.0.3'
}

2.응용 프로그램 클래스를 재정의하는지 여부에 따라 다음 중 하나를 수행합니다.

  • 응용 프로그램 클래스를 재정의하지 않으면 매니페스트 파일을 편집하여 다음과 같이 태그에 rodroid:name을 설정합니다.

    <application
        android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
  • 그렇지 않으면 응용 프로그램 클래스를 재정의하는 경우 다음과 같이 MultiDex 응용 프로그램을 확장하도록 변경합니다(가능한 경우).

   public class MyApplication extends MultiDexApplication { ... }
  • 응용 프로그램 클래스를 재정의하지만 기본 클래스를 변경할 수 없는 경우 대신 attachBaseContext() 메서드를 재정의하고 MultiDex.install(이)을 호출하여 다중 인덱스를 사용하도록 설정할 수 있습니다.

   public class MyApplication extends SomeOtherApplication {
     @Override
     protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
     }
   }

사용하기multidex그것은 좋은 해결책이 아닙니다.multidex안드로이드에서 다른 사용법이 있습니다. 이 대답을 보십시오. 멀티덱스란 무엇입니까?

솔루션은 @Shylendra Madda가 말한 대로 즉시 실행을 비활성화하는 것입니다.

Settings → Build, Execution, Deployment → Instant Run(즉각 실행) 및 Enable Instant Run(즉각 실행 활성화) 선택 취소

이 때에서 안드로이드 스튜디오와 같은 를 넣지 않기합니다.firebase 위해 된 apk로 합니다.firebase은▁▁and▁such와 같은 다른 과 도서관.maps다른 것들은 플레이 서비스에 존재하며 플레이 서비스는 안드로이드 기기에 설치되어 있으므로 인스턴트 실행이 활성화된 경우 빌드 시간을 더 빠르게 만들기 위해 생성된 apk에 넣을 필요가 없습니다.

따라서 팩을 추출하여 다른 장치에 설치하면 이 예외가 표시됩니다.

아래의 해결책을 모두 시도해 본 결과 저도 같은 문제에 직면했습니다.

ProGuard 규칙을 적용한 경우 ProGuard 규칙에 아래 줄을 추가합니다.

-keep class com.google.firebase.provider.FirebaseInitProvider

그리고 그것은 나의 문제를 해결해줍니다.

1: Gradle enable multiDexEnabled로 이동하여 종속성에 멀티덱스 라이브러리를 추가합니다.

android {
   ...
   defaultConfig {
      multiDexEnabled true
      ...
   }
}

dependencies {
  // add dependency 
  implementation 'com.android.support:multidex:1.0.1'
}

2: 매니페스트 파일로 이동하여 rodroid: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>

3: Android:name=."My Application" Manifest 파일의 Application 내부.MyApplication 클래스를 만들지 않았기 때문에 오류가 발생합니다.내 응용 프로그램 클래스를 만들거나 "응용 프로그램" 클래스로 확장하거나 를 클릭합니다.MyApplication, 구문 왼쪽에 작은 빨간색 풍선이 나타나고, 메뉴에 (MyApplication 클래스 만들기)가 표시되고, 이를 클릭한 다음 MethodInside를 해당 클래스에 포함합니다.

    public class MyApplication extends Application {

    @Override 
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    } 

자세한 정보를 보려면 이 링크를 클릭하십시오.[https://developer.android.com/studio/build/multidex.html ]

당신에게 효과가 있기를 바랍니다.

먼저 다음을 build.gradle(모듈:app)에 추가합니다.-->

defaultConfig{
..
multiDexEnabled true
..
}

그런 다음 같은 파일에 다음을 추가합니다.

dependencies{
...
compile 'com.android.support:multidex:1.0.1'
...
}

AndroidManifest.xml에서 다음을 기록합니다.

<application
    android:name="android.support.multidex.MultiDexApplication"
    .....
    .....
</application>

바로 그겁니다.틀림없이 효과가 있을 것입니다.

App Gradle에서 MultiDex를 사용하는 경우 응용 프로그램을 확장하여 응용 프로그램 클래스에서 MultiDex 응용 프로그램을 확장하도록 변경합니다.그것은 도전적으로 효과가 있을 것입니다.

저도 같은 문제가 있었고 코드를 추가하기만 하면 해결되었습니다. 이 문제가 발생하면 Firebase를 사용하는 데 필요한 모든 단계를 이미 완료한 것입니다.Application을 확장하는 클래스(Public class Application_CrashReport extends Application)를 만들고 이 클래스를 mainifest 파일에 추가하면 됩니다. 이 클래스에서는 아래 메서드를 재정의합니다.

  @Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
}

MultiDex.install(이)을 추가합니다. 이 방법은

  @Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

메모의 단계를 따르는 것을 잊지 마십시오.

들어오시는 분들에게는 조금 늦은 시간이지만, 보호 규정을 확인하세요!저는 이것에 많은 시간을 낭비했습니다.보호 규칙에 따라 중요한 방화벽 파일로 이름이 변경될 수 있습니다.이것은 정말로 생산과 즉각적인 실행에 문제가 있다는 것을 증명할 뿐입니다.

방호벽이 있는프로의

-keep class com.google.firebase.** { *; }
-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.apache.**
-dontwarn org.w3c.dom.**

앞서 언급한 바와 같이, 이는 다음과 같은 문제입니다.multidex구현을 추가해야 합니다.build.gradle그리고.MainApplication.java하지만 당신이 추가하는 것은 당신이 Android X를 지원하는지 여부에 달려 있습니다.이 문제를 해결하기 위해 필요한 사항은 다음과 같습니다.

  1. Android X를 지원하는 경우

이 코드 라인을 당신의 코드에 넣으십시오.build.gradle(vmdk/app/build.gradle):

defaultConfig {
  applicationId "com.your.application"
  versionCode 1
  versionName "1.0"
  ...
  multiDexEnabled true // <-- THIS LINE
}
...
...
dependencies {
  ...
  implementation "androidx.multidex:multidex:2.0.1" // <-- THIS LINE
  ...
}

이 선들을 당신의 것에 넣으세요.MainApplication.java(src/app/src/main/main/message/.../MainApplication.java):

package com.your.package;

import androidx.multidex.MultiDexApplication; // <-- THIS LINE
...
...
public class MainApplication extends MultiDexApplication { ... } // <-- THIS LINE
  1. Android X를 지원하지 않는 경우

이 코드 라인을 당신의 코드에 넣으십시오.build.gradle(vmdk/app/build.gradle):

defaultConfig {
  applicationId "com.your.application"
  versionCode 1
  versionName "1.0"
  ...
  multiDexEnabled true // <-- THIS LINE
}
...
...
dependencies {
  ...
  implementation "com.android.support:multidex:1.0.3" // <-- THIS LINE
  ...
}

이 선들을 당신의 것에 넣으세요.MainApplication.java(src/app/src/main/main/message/.../MainApplication.java):

package com.your.package;

import android.support.multidex.MultiDex;; // <-- THIS LINE
...
...
public class MainApplication extends MultiDexApplication { ... } // <-- THIS LINE

이는 MultiDex 때문입니다.

해결 단계:

  1. 그라들 -> 의존성 -> (컴파일 'com.android.지원:multidex:1.0.1') 이 종속성 추가

  2. 프로젝트 응용 프로그램 클래스에서 MultiDexApplication을 이렇게 확장합니다(공개 클래스 MyApplication은 MultiDexApplication을 확장합니다).

  3. 실행 및 확인

를 응프로다확합니다장야해로 .MultiDexApplicationApplication.

이 문제는 R8 컴파일러에서 작동하는 Android Gradle 플러그인 3.4.0이 설치된 Android Studio 3.4로 전환했을 때 발생했습니다.

Android Gradle 플러그인에는 사전 정의된 ProGuard 규칙 파일이 추가로 포함되어 있지만 proguard-Android-optimize를 사용하는 것이 좋습니다.txt. 자세한 내용은 여기 있습니다.

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile(
          'proguard-android-optimize.txt'),
          // List additional ProGuard rules for the given build type here. By default,
          // Android Studio creates and includes an empty rules file for you (located
          // at the root directory of each module).
          'proguard-rules.pro'
    }
}

같은 문제에 직면했는데 Fireabase Storage 버전을 Firebase 데이터베이스 버전과 동일하게 변경하여 이 문제를 해결했습니다.

 implementation 'com.google.firebase:firebase-core:16.0.8'
 implementation 'com.google.firebase:firebase-database:16.0.1'
 implementation 'com.google.firebase:firebase-storage:17.0.0'

로.

 implementation 'com.google.firebase:firebase-core:16.0.8'
 implementation 'com.google.firebase:firebase-database:16.0.1'
 implementation 'com.google.firebase:firebase-storage:16.0.1'

20분 sdk 버전 이상인 경우 최신 Firebase Auth 버전을 사용해야 합니다.

구현 'com.google.firebase:firebase-auth:18.1.0'

그리고 실제로 필요하지 않은 경우에는 멀티 프로토콜을 설정할 필요가 없습니다.

Firebase 도우미에서 16.0.5를 사용했지만 18.1.0으로 업데이트하면 이 문제를 해결할 수 있었습니다.

사마린을 사용한다면요.com.google 클래스를 찾지 못했습니다.화력 기지파이어베이스InitProvider"?가 시작 시 Google Firebase 오류와 관련된 문제를 캡처합니다(현재 해결되지 않음).

저는 단기적으로 축소를 사용하지 않는 것으로 돌아왔고 R8이 더 안정될 때까지 ProGuard를 사용할 계획입니다.

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
  

바로 다음에 앱 레벨 그라들 파일에 위의 코드를 추가합니다.

defaultConfig{

}

프로젝트 루트 경로 추가google-services.json

dependencies {
compile 'com.android.support:support-v4:25.0.1'
**compile 'com.google.firebase:firebase-ads:9.0.2'**
compile files('libs/StartAppInApp-3.5.0.jar')
compile 'com.android.support:multidex:1.0.1'
  }
apply plugin: 'com.google.gms.google-services'

언급URL : https://stackoverflow.com/questions/39825543/didnt-find-class-com-google-firebase-provider-firebaseinitprovider

반응형