首页 > 解决方案 > Android - AOSP - WorkManager 运行时错误 - java.lang.NoClassDefFoundError:解析失败:Landroidx/work/R$bool

问题描述

我已经构建了一个使用 WorkManager 的 android 应用程序。我现在正在尝试将其构建为系统应用程序,作为 android 9.1 AOSP 项目的一部分。

我已经设法构建了应用程序,但它引发了运行时错误:

    Process: MyApp, PID: 4959
    java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/work/R$bool;
        at androidx.work.impl.WorkManagerImpl.<init>(WorkManagerImpl.java:210)
        at androidx.work.impl.WorkManagerImpl.initialize(WorkManagerImpl.java:186)
        at androidx.work.WorkManager.initialize(WorkManager.java:204)
        at MyApplication.onCreate(MyApplication.java:24)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1155)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5885)
        at android.app.ActivityThread.access$1100(ActivityThread.java:200)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1651)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6692)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.work.R$bool" on path: DexPathList[[zip file "/system/priv-app/MyApp/MyApp.apk"],nativeLibraryDirectories=[/system/priv-app/MyApp/lib/arm64, /system/lib64, /system/lib64]]

我假设我需要拉其他东西来解决它androidx.work.R

重申一下,当构建为独立的 gradle 构建并部署到同一平台时,相同的应用程序可以工作。

任何帮助将不胜感激

我的Android.mk样子是这样的:

include $(CLEAR_VARS)

LOCAL_PACKAGE_NAME := MyApp
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_PRIVILEGED_MODULE := true
LOCAL_MODULE_TAGS := optional
LOCAL_MANIFEST_FILE := AndroidManifest.xml
LOCAL_SRC_FILES := $(call all-java-files-under, java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_DEX_PREOPT := false
LOCAL_USE_AAPT2 := true
LOCAL_PROGUARD_ENABLED := disabled
LOCAL_DX_FLAGS := --multi-dex

LOCAL_STATIC_JAVA_LIBRARIES := \
    work-runtime-prebuilt \
    room-runtime-prebuilt \
    guava

LOCAL_STATIC_ANDROID_LIBRARIES := \
    androidx.appcompat_appcompat

include $(BUILD_PACKAGE)


# Prebuilt Java Libraries required by the app
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
    work-runtime-prebuilt:libs/work-runtime-2.3.4.aar \
    room-runtime-prebuilt:libs/room-runtime-2.2.5.aar
include $(BUILD_MULTI_PREBUILT)

正如你所看到的,我已经加入work-runtime-2.3.4.aar并依赖room-runtime-2.2.5.aar它,因为它抛出了一个ClassNotFoundException异常。

我还必须WorkManagerInitializer像这样在清单中禁用:

        <provider
            android:name="androidx.work.impl.WorkManagerInitializer"
            android:authorities="MyApp.workmanager-init"
            android:enabled="false"
            android:exported="false" />

而是在我的Application课堂上初始化它

import androidx.work.Configuration;
import androidx.work.WorkManager;

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        WorkManager.initialize(this, new Configuration.Builder().build());
    }
}

作为参考,我的build.gradle有:

dependencies {
    implementation 'androidx.appcompat:appcompat:1.0.0-alpha1' // To match the platform version
    implementation 'com.google.guava:guava-collections:r03'
    implementation 'androidx.work:work-runtime:2.3.4'
}

标签: javaandroidandroid-source

解决方案


推荐阅读