support lib android.support.v7.widget.GridLayout导致应用程序小部件的InflateException/ClassNotFoundException

support lib android.support.v7.widget.GridLayout导致应用程序小部件的InflateException/ClassNotFoundException,android,classnotfoundexception,android-support-library,android-appwidget,android-gridlayout,Android,Classnotfoundexception,Android Support Library,Android Appwidget,Android Gridlayout,我很难在android.support.v7.widget.GridLayout中使用支持库。它总是给我以下错误: 08-09 23:49:55.746: W/AppWidgetHostView(132): Error inflating AppWidget AppWidgetProviderInfo(provider=ComponentInfo{com.myapp.AppWidget}): android.view.InflateException: Binary XML file l

我很难在
android.support.v7.widget.GridLayout
中使用支持库。它总是给我以下错误:

    08-09 23:49:55.746: W/AppWidgetHostView(132): Error inflating AppWidget AppWidgetProviderInfo(provider=ComponentInfo{com.myapp.AppWidget}): android.view.InflateException: Binary XML file line #33: Error inflating class android.support.v7.widget.GridLayout
08-09 23:49:56.716: W/AppWidgetHostView(132): updateAppWidget couldn't find any view, using error view
08-09 23:49:56.716: W/AppWidgetHostView(132): android.view.InflateException: Binary XML file line #33: Error inflating class android.support.v7.widget.GridLayout
08-09 23:49:56.716: W/AppWidgetHostView(132):   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at android.widget.RemoteViews.apply(RemoteViews.java:939)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at android.appwidget.AppWidgetHostView.updateAppWidget(AppWidgetHostView.java:218)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at android.appwidget.AppWidgetHost.updateAppWidgetView(AppWidgetHost.java:250)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at android.appwidget.AppWidgetHost$UpdateHandler.handleMessage(AppWidgetHost.java:73)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at android.os.Handler.dispatchMessage(Handler.java:99)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at android.os.Looper.loop(Looper.java:123)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at android.app.ActivityThread.main(ActivityThread.java:3683)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at java.lang.reflect.Method.invokeNative(Native Method)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at java.lang.reflect.Method.invoke(Method.java:507)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at dalvik.system.NativeStart.main(Native Method)
08-09 23:49:56.716: W/AppWidgetHostView(132): Caused by: java.lang.ClassNotFoundException: android.support.v7.widget.GridLayout in loader dalvik.system.PathClassLoader[.]
08-09 23:49:56.716: W/AppWidgetHostView(132):   at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at android.view.LayoutInflater.createView(LayoutInflater.java:471)
08-09 23:49:56.716: W/AppWidgetHostView(132):   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570)
08-09 23:49:56.716: W/AppWidgetHostView(132):   ... 15 more
提到的第33行是support lib标记的开始部分。看起来这个班级因为任何原因都找不到,但我不知道为什么

我之所以想使用这个库,是因为我想与Android v10保持兼容。无论我选择v10还是v4.2.2作为项目构建目标,这都没有关系。清单的
minSdkVersion
设置为10。我遵循了所有这些,还尝试将.jar放入应用程序的引用库中,并勾选了导出它的选项

这是我的
layout.xml
,用于创建应用程序小部件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/appWidget_relativeLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:orientation="vertical">
<TextView
    android:id="@+id/appWidget_textView_profileName"
    android:layout_width="320dp"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:clickable="false"
    android:enabled="true"
    android:gravity="center_horizontal"
    android:longClickable="true"
    android:scrollHorizontally="false"
    android:text="profile name"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<FrameLayout
    android:id="@+id/appWidget_frameLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/appWidget_textView_profileName" >

</FrameLayout>

<android.support.v7.widget.GridLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
</android.support.v7.widget.GridLayout>

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView" />
</RelativeLayout>


更新:我设法将其缩小到与应用程序小部件相关的
GridLayout
的使用范围。似乎只有在对其使用
GridLayout
时,才会出现此问题。当我对普通的
活动使用相同的布局时
效果很好。有关如何解决此问题的任何建议?

在制作小部件时,您必须使用实现
远程视图
机制的
视图。该机制的工作方式是,远程“主机”进程是进行实际充气的进程。因此,如果远程进程(承载小部件的启动器)的类路径中没有
GridLayout
类,那么除了在自己的进程中绘制视图并将其设置为
ImageView
上的
Bitmap
之外,您根本无法做到这一点。不过我不会那么做


一般来说,在制作小部件时,将自己限制在框架附带的
视图上。

制作小部件时,将自己限制在实现
远程视图
机制的
视图上。该机制的工作方式是,远程“主机”进程是进行实际充气的进程。因此,如果远程进程(承载小部件的启动器)的类路径中没有
GridLayout
类,那么除了在自己的进程中绘制视图并将其设置为
ImageView
上的
Bitmap
之外,您根本无法做到这一点。不过我不会那么做


一般来说,在制作小部件时,请将自己限制在框架附带的
视图中。

是否检查了库是否与项目一起部署?根据您使用的版本/ide/sdk,您可能需要检查项目生成设置(项目属性、生成路径、内存中的库)。我认为您需要确保支持库已“导出”是的,我已选中此选项,如前所述您是否已选中以确保该库与您的项目一起部署?根据您使用的版本/ide/sdk,您可能需要检查项目生成设置(项目属性、生成路径、内存中的库)。我想你需要确保支持库是“导出”的是的,我已经选中了这个选项,正如前面提到的,所以你想告诉我,即使支持库是框架的正式部分,也无法使用
GridLayouts
应用程序内小部件?支持库不是框架的正式部分。这是SDK的官方部分。不,没有办法,除非你能保证widget主机的类路径中有这个类。我想没有办法告诉主屏幕,要使用这个特定的类(?)不,它必须由作者包含在apk中。(其他任何东西都是不安全的!)
GridLayout
在API级别14的框架中可用,因此这需要成为您的截止点。所以您想告诉我,没有办法使用
GridLayouts
应用程序内小部件,即使支持库是框架的正式部分,支持库也不是框架的正式部分。这是SDK的官方部分。不,没有办法,除非你能保证widget主机的类路径中有这个类。我想没有办法告诉主屏幕,要使用这个特定的类(?)不,它必须由作者包含在apk中。(其他任何东西都是不安全的!)
GridLayout
在API级别14的框架中变得可用,因此这需要成为您的截止点。