首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法获取提供程序androidx.startup.InitializationProvider

无法获取提供程序androidx.startup.InitializationProvider
EN

Stack Overflow用户
提问于 2020-12-16 18:13:19
回答 3查看 2.9K关注 0票数 9

我试图在Android9设备上运行这个项目,但我得到了以下错误,说是Unable to get provider androidx.startup.InitializationProvider:

代码语言:javascript
运行
复制
2020-12-16 15:19:03.075 25234-25234/com.example.phoE/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.pho, PID: 25234
    java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider: java.lang.ClassNotFoundException: Didn't find class "androidx.startup.InitializationProvider" on path: DexPathList[[zip file "/data/appcom.example.pho-Z8JhKzo4aoi5K98ZrK71WQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.pho-Z8JhKzo4aoi5K98ZrK71WQ==/lib/arm64, /data/app/com.example.pho-Z8JhKzo4aoi5K98ZrK71WQ==/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
        at android.app.ActivityThread.installProvider(ActivityThread.java:6857)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:6399)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6303)
        at android.app.ActivityThread.access$1300(ActivityThread.java:241)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1819)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7188)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.startup.InitializationProvider" on path: DexPathList[[zip file "/data/app/com.example.pho-Z8JhKzo4aoi5K98ZrK71WQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.pho-Z8JhKzo4aoi5K98ZrK71WQ==/lib/arm64, /data/app/com.example.pho-Z8JhKzo4aoi5K98ZrK71WQ==/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at android.app.AppComponentFactory.instantiateProvider(AppComponentFactory.java:121)
        at androidx.core.app.CoreComponentFactory.instantiateProvider(CoreComponentFactory.java:67)
        at android.app.ActivityThread.installProvider(ActivityThread.java:6841)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:6399) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6303) 
        at android.app.ActivityThread.access$1300(ActivityThread.java:241) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1819) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:216) 
        at android.app.ActivityThread.main(ActivityThread.java:7188) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975) 

我尝试了here提到的所有方法,但都不起作用。如果有人能帮我的话真的很感谢。

Gradle文件

代码语言:javascript
运行
复制
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.dicedmelon.gradle:jacoco-android:0.1.4'
    }
}

plugins {
    id "com.diffplug.gradle.spotless" version "3.16.0"
}

apply plugin: 'com.android.application'
apply plugin: 'jacoco-android'
apply plugin: 'realm-android'
apply plugin: "com.github.b3er.local.properties"

def keystorePropertiesFile = rootProject.file("sample_keystore.properties")

def keystoreProperties = new Properties()

def LOCAL_KEY_PRESENT = project.hasProperty('SIGNING_KEY_FILE') && rootProject.file(SIGNING_KEY_FILE).exists()

keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"

    defaultConfig {
        applicationId "org.fossasia.phimpme"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 14
        versionName '1.11.0'
        multiDexEnabled true
        testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
        vectorDrawables.useSupportLibrary = true
        resConfigs "en"
        ndk {
            abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
        }
        renderscriptTargetApi 19
        renderscriptSupportModeEnabled true
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    signingConfigs {
        if (TRAVIS_BUILD) {
            release {
                storeFile KEYSTORE_FILE
                storePassword System.getenv("STORE_PASS")
                keyAlias System.getenv("ALIAS")
                keyPassword System.getenv("KEY_PASS")
            }
        } else if (LOCAL_KEY_PRESENT) {
            release {
                storeFile rootProject.file(SIGNING_KEY_FILE)
                storePassword STORE_PASS
                keyAlias ALIAS
                keyPassword KEY_PASS
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            if (LOCAL_KEY_PRESENT || TRAVIS_BUILD)
                signingConfig signingConfigs.release
        }
        debug {
            testCoverageEnabled false

        }
    }

    packagingOptions {
        exclude 'META-INF/maven/org.apache.maven/maven-artifact/pom.xml'
        exclude 'licenses/javolution.license.TXT'
        exclude 'META-INF/maven/org.apache.maven.wagon/wagon-http-shared/pom.properties'
        exclude 'META-INF/maven/*'
        exclude 'org/codehaus/classworlds/uberjar/boot/Bootstrapper.class'
    }

    configurations {
        implementation.exclude group: 'org.jetbrains', module: 'annotations'
    }

    lintOptions {
        abortOnError false
        disable "Instantiatable"
    }

    tasks.withType(JavaCompile) {
        configure(options) {
            // TODO
            compilerArgs << "-Xlint:unchecked"
            compilerArgs << "-Xlint:-rawtypes"
        }
    }

    dexOptions {
        jumboMode = true
    }
    externalNativeBuild {
        ndkBuild {
            path 'src/main/jni/Android.mk'
        }
    }
}

repositories {
    mavenCentral()
    maven { url "https://jitpack.io" }
}

spotless {
    java {
        googleJavaFormat()
        target '**/*.java'
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    androidTestImplementation('com.android.support.test.espresso:espresso-core:3.1.0', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    // Core library
    androidTestImplementation 'androidx.test:core:1.3.0'

    // AndroidJUnitRunner and JUnit Rules
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test:rules:1.3.0'

    //retrofit
    implementation "com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion"
    implementation "com.squareup.retrofit2:converter-gson:$rootProject.retrofitVersion"
    implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'

    //google and support
    implementation "androidx.appcompat:appcompat:$rootProject.supportLibraryVersion"
    implementation "androidx.vectordrawable:vectordrawable-animated:1.1.0"
    implementation "androidx.legacy:legacy-support-v4:1.0.0"
    implementation "com.google.android.material:material:1.2.1"
    implementation "androidx.vectordrawable:vectordrawable:1.1.0"
    implementation "androidx.palette:palette:1.0.0"
    implementation "androidx.cardview:cardview:1.0.0"
    implementation "androidx.browser:browser:1.2.0"
    implementation "androidx.recyclerview:recyclerview:1.1.0"
    implementation 'androidx.constraintlayout:constraintlayout:2.0.2'

    //exoplayer
    implementation 'com.google.android.exoplayer:exoplayer:r1.5.7'

    implementation "androidx.lifecycle:lifecycle-extensions:$rootProject.lifecycleVersion"


    implementation 'com.koushikdutta.ion:ion:3.0.9'
    implementation 'org.jetbrains:annotations-java5:20.1.0'
    implementation 'com.android.support:multidex:1.0.3'
    implementation group: 'com.box', name: 'box-android-sdk', version: '5.0.0'



}

apply plugin: 'com.android.application'
apply plugin: 'jacoco-android'
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-26 21:27:01

您可以通过禁用所有组件和依赖项的自动初始化来修复此问题。

在清单中包含此代码段:

代码语言:javascript
运行
复制
    <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove" />

我还添加了一个新的依赖项,尽管这实际上可能并不是必需的:

代码语言:javascript
运行
复制
implementation "androidx.startup:startup-runtime:1.0.0"

阅读更多关于这个的内容(新的?)这里有自动应用程序初始化的东西:https://developer.android.com/topic/libraries/app-startup

票数 9
EN

Stack Overflow用户

发布于 2021-07-09 01:03:01

如果您的应用程序中有androidx.startup:startup-runtime:1.0.0,则需要添加一些代码以防止R8删除InitializationProvider,并确保InitializationProvider包含在主dex文件中。希望这个问题能在下一个版本中得到解决。首先,在应用程序级别的build.gradle文件中声明发布构建类型中的multiDexKeepProguard

代码语言:javascript
运行
复制
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            multiDexKeepProguard = file('multidex-config.pro')
        }

然后,在顶层的multidex-config.pro文件中添加以下内容:

代码语言:javascript
运行
复制
-keep class androidx.startup.AppInitializer
-keep class * extends androidx.startup.Initializer

您还需要向proguard-rules.pro文件中添加一些额外的行:

代码语言:javascript
运行
复制
-keepnames class * extends androidx.startup.Initializer
# These Proguard rules ensures that ComponentInitializers are are neither shrunk nor obfuscated,
# and are a part of the primary dex file. This is because they are discovered and instantiated
# during application startup.
-keep class * extends androidx.startup.Initializer {
    # Keep the public no-argument constructor while allowing other methods to be optimized.
    <init>();
}

来自https://issuetracker.google.com/issues/191729671https://developer.android.com/studio/build/multidex#multidexkeepproguard-property

票数 3
EN

Stack Overflow用户

发布于 2021-09-21 04:51:34

将您的启动运行时库版本更新为1.1.0this拉取请求中包含了prfarlow的答案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65321223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档