我试图在Android9设备上运行这个项目,但我得到了以下错误,说是Unable to get provider androidx.startup.InitializationProvider:
。
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文件
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'
发布于 2020-12-26 21:27:01
您可以通过禁用所有组件和依赖项的自动初始化来修复此问题。
在清单中包含此代码段:
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove" />
我还添加了一个新的依赖项,尽管这实际上可能并不是必需的:
implementation "androidx.startup:startup-runtime:1.0.0"
阅读更多关于这个的内容(新的?)这里有自动应用程序初始化的东西:https://developer.android.com/topic/libraries/app-startup
发布于 2021-07-09 01:03:01
如果您的应用程序中有androidx.startup:startup-runtime:1.0.0
,则需要添加一些代码以防止R8删除InitializationProvider,并确保InitializationProvider包含在主dex文件中。希望这个问题能在下一个版本中得到解决。首先,在应用程序级别的build.gradle文件中声明发布构建类型中的multiDexKeepProguard
:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
multiDexKeepProguard = file('multidex-config.pro')
}
然后,在顶层的multidex-config.pro文件中添加以下内容:
-keep class androidx.startup.AppInitializer
-keep class * extends androidx.startup.Initializer
您还需要向proguard-rules.pro
文件中添加一些额外的行:
-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/191729671和https://developer.android.com/studio/build/multidex#multidexkeepproguard-property
发布于 2021-09-21 04:51:34
将您的启动运行时库版本更新为1.1.0
。this拉取请求中包含了prfarlow
的答案
https://stackoverflow.com/questions/65321223
复制相似问题