5

我正在尝试使用 androidx.camera 包创建一个按需功能模块。当活动使包含 PreviewView 的布局膨胀时,我遇到了崩溃。请注意,如果我只使用像 TextView 这样简单的东西,模块会正确加载并显示正确的布局,所以我不认为(希望无论如何)这是我的动态功能设置/下载的问题。

如果我在基本应用程序模块中包含相机依赖项,​​这一切都可以正常工作,但是似乎我应该能够在动态功能模块中做到这一点。我不确定我错过了什么..有人遇到过这个吗?

功能模块的 build.gradle:

apply plugin: 'com.android.dynamic-feature'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 29

    defaultConfig {
        minSdkVersion 23
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation project(':app')

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.71"
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.core:core-ktx:1.3.1'

    def constraintLayoutVersion = "2.0.0-beta3"
    implementation "androidx.constraintlayout:constraintlayout:$constraintLayoutVersion"

    // CameraX core library
    def camerax_version = "1.0.0-beta06"
    implementation "androidx.camera:camera-core:${camerax_version}"
    implementation "androidx.camera:camera-camera2:${camerax_version}"
    implementation "androidx.camera:camera-lifecycle:${camerax_version}"
    implementation "androidx.camera:camera-view:1.0.0-alpha13"
    implementation "androidx.camera:camera-extensions:1.0.0-alpha13"

    implementation "io.reactivex.rxjava3:rxandroid:3.0.0"

    // androidx
    implementation "androidx.annotation:annotation:1.0.0"
    implementation "androidx.appcompat:appcompat:1.0.0"
    implementation "androidx.cardview:cardview:1.0.0"
    implementation "androidx.gridlayout:gridlayout:1.0.0"
    implementation "androidx.palette:palette:1.0.0"
    implementation "androidx.recyclerview:recyclerview:1.0.0"

}

活动布局文件:

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <androidx.camera.view.PreviewView
        android:id="@+id/viewFinder"
        android:layout_width="match_parent"
        android:layout_height="450dp"
        app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

功能模块中的活动:

class PhotoActivity: AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_photo)
    }

    override fun attachBaseContext(newBase: Context?) {
        super.attachBaseContext(newBase)
        SplitCompat.installActivity(this)
    }
}

堆栈跟踪:

2020-10-06 10:53:03.861 27659-27659/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.sample.android.debug, PID: 27659
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sample.android.debug/com.sample.android.image.PhotoActivity}: android.view.InflateException: Binary XML file line #10 in com.sample.android.debug.image:layout/activity_photo: Binary XML file line #10 in com.sample.android.debug.image:layout/activity_photo: Error inflating class androidx.camera.view.PreviewView
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: android.view.InflateException: Binary XML file line #10 in com.sample.android.debug.image:layout/activity_photo: Binary XML file line #10 in com.sample.android.debug.image:layout/activity_photo: Error inflating class androidx.camera.view.PreviewView
     Caused by: android.view.InflateException: Binary XML file line #10 in com.sample.android.debug.image:layout/activity_photo: Error inflating class androidx.camera.view.PreviewView
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at android.view.LayoutInflater.createView(LayoutInflater.java:854)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
        at com.sample.android.image.PhotoActivity.onCreate(PhotoActivity.kt:18)
        at android.app.Activity.performCreate(Activity.java:7825)
        at android.app.Activity.performCreate(Activity.java:7814)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1306)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
2020-10-06 10:53:03.861 27659-27659/? E/AndroidRuntime: Caused by: java.lang.NoSuchMethodError: No direct method <init>(Ljava/lang/Object;)V in class Landroidx/lifecycle/MutableLiveData; or its super classes (declaration of 'androidx.lifecycle.MutableLiveData' appears in /data/app/com.sample.android.debug-a4U4CmSx2nFr8mxMFCrakg==/base.apk)
        at androidx.camera.view.PreviewView.<init>(PreviewView.java:80)
4

3 回答 3

5

它可能会帮助那里的人,我的问题不包括所需的

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

在我的应用程序build.grade文件中。这里提到了

于 2020-10-28T16:23:21.983 回答
1

对于可能遇到类似情况的其他任何人——我的解决方法是在我的基本模块中包含 LiveData 依赖项:

implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"
于 2020-10-06T21:09:33.853 回答
0

我的问题也是一样的。我得到的错误是

 Caused by: java.lang.NoSuchMethodError: No direct method <init>(Ljava/lang/Object;)V in class Landroidx/lifecycle/MutableLiveData; or its super classes (declaration of **'androidx.lifecycle.MutableLiveData'** appears 

通过向基本模块添加 androidx.lifecycle.MutableLiveData 依赖项解决了该问题。

implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
于 2021-05-25T06:16:15.300 回答