我使用gradle将本地模块导入了Android Studio项目。 每当我创建一个自定义的View类来导入任何这些模块的类时,Android Studio都无法在布局预览中呈现它(即使在我运行该应用程序时它仍然可以正常工作)。
我找不到任何谈论此特定问题的话题。 我试图清理,清除缓存并进行重建,但无法正常工作。 另外,将模块导入路径从绝对路径更改为相对路径也无法解决问题。
这是我导入模块的方式:
settings.gradle:
include ':app'
include(':mylocalmodule')
project(':mylocalmodule').projectDir = new File("C:\\Home\\MyLocalModule\\mylocalmodule")
应用的build.gradle:
...
dependencies {
...
implementation project(":mylocalmodule")
...
}
...
我创建了一个测试视图:
package com.ltei.myapp.view
import android.content.Context
import android.util.AttributeSet
import android.view.View
import com.ltei.mylocalmodule.RGB
class TestView : View {
private val rgb = RGB(255, 0, 0)
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
if (canvas == null) return
canvas.drawColor(rgb.getColor())
}
}
并将其添加到xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.ltei.myapp.view.TestView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
我希望预览渲染器能够渲染我的视图而没有任何错误,但是我得到以下输出:
The following classes could not be instantiated:
- com.ltei.myapp.view.TestView (Open Class, Show Exception, Clear Cache)
Tip: Use View.isInEditMode() in your custom views to skip code or show sample data when shown in the IDE.
If this is an unexpected error you can also try to build the project, then manually refresh the layout.
Exception Details java.lang.NoClassDefFoundError: com/ltei/mylocalmodule/RGB
at com.ltei.myapp.view.TestView.<init>(TestView.kt:14)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:863)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:837)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:394)