【问题标题】:Instant App module searches for resources in another not base moduleInstant App 模块在另一个非基础模块中搜索资源
【发布时间】:2017-06-18 11:08:16
【问题描述】:

我正在开发一个即时应用程序,它具有 base 模块和 2 个功能模块:feature1feature2。当我尝试启动 feature2 活动时,我遇到了奇怪的崩溃:

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.myapp.qa/com.test.myapp.feature2.ui.activity.Feature2Activity}: android.view.InflateException: Binary XML file line #76: Binary XML file line #76: Error inflating class android.widget.ProgressBar
                                                                                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
                                                                                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
                                                                                at android.app.ActivityThread.-wrap11(Unknown Source:0)
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:105)
                                                                                at android.os.Looper.loop(Looper.java:164)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:6540)
                                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                                at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
                                                                             Caused by: android.view.InflateException: Binary XML file line #76: Binary XML file line #76: Error inflating class android.widget.ProgressBar
                                                                             Caused by: android.view.InflateException: Binary XML file line #76: Error inflating class android.widget.ProgressBar
                                                                             Caused by: java.lang.reflect.InvocationTargetException
                                                                                at java.lang.reflect.Constructor.newInstance0(Native Method)
                                                                                at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
                                                                                at android.view.LayoutInflater.createView(LayoutInflater.java:650)
                                                                                at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
                                                                                at android.view.LayoutInflater.onCreateView(LayoutInflater.java:723)
                                                                                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:791)
                                                                                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733)
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827)
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:869)
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827)
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:869)
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827)
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:869)
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827)
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:869)
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827)
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:869)
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827)
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
                                                                                at com.test.myapp.ui.activity.base.BaseActivity.setContentView(BaseActivity.java:237)
                                                                                at com.test.myapp.feature2.ui.activity.Feature2Activity.onCreate(Feature2Activity.java:123)
                                                                                at android.app.Activity.performCreate(Activity.java:6980)
                                                                                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
                                                                                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
                                                                                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
                                                                                at android.app.ActivityThread.-wrap11(Unknown Source:0)
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:105)
                                                                                at android.os.Looper.loop(Looper.java:164)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:6540)
                                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                                at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
                                                                             Caused by: android.content.res.Resources$NotFoundException: Drawable com.test.myapp.qa:layout/random_feature1_layout with resource ID #0x82030011
E/AndroidRuntime: Caused by: android.content.res.Resources$NotFoundException: File res/layout/random_feature1_layout_fns.xml from drawable resource ID #0x82030011
                                                                                at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:754)
                                                                                at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:598)
                                                                                at android.content.res.Resources.loadDrawable(Resources.java:885)
                                                                                at android.content.res.TypedArray.getDrawableForDensity(TypedArray.java:953)
                                                                                at android.content.res.TypedArray.getDrawable(TypedArray.java:928)
                                                                                at android.widget.ProgressBar.<init>(ProgressBar.java:281)
                                                                                at android.widget.ProgressBar.<init>(ProgressBar.java:230)
                                                                                at android.widget.ProgressBar.<init>(ProgressBar.java:226)
                                                                                at java.lang.reflect.Constructor.newInstance0(Native Method)
                                                                                at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
                                                                                at android.view.LayoutInflater.createView(LayoutInflater.java:650)
                                                                                at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
                                                                                at android.view.LayoutInflater.onCreateView(LayoutInflater.java:723)
                                                                                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:791)
                                                                                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733)
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827)
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:869)
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827)
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:869)
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827)
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:869)
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827)
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:869)
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827)
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:869)
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827)
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
                                                                                at com.test.myapp.ui.activity.base.BaseActivity.setContentView(BaseActivity.java:237)
                                                                                at com.test.myapp.feature2.ui.activity.Feature2Activity.onCreate(Feature2Activity.java:123)
                                                                                at android.app.Activity.performCreate(Activity.java:6980)
                                                                                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
                                                                                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
                                                                                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
                                                                                at android.app.ActivityThread.-wrap11(Unknown Source:0)
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:105)
                                                                                at android.os.Looper.loop(Looper.java:164)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:6540)
                                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                                at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
                                                                             Caused by: android.view.InflateException: Class not found LinearLayout
                                                                                at android.graphics.drawable.DrawableInflater.inflateFromClass(DrawableInflater.java:220)
                                                                                at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:139)
                                                                                at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1295)
                                                                                at android.graphics.drawable.Drawable.createFromXmlForDensity(Drawable.java:1254)
                                                                                at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:744)
                                                                                at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:598) 
                                                                                at android.content.res.Resources.loadDrawable(Resources.java:885) 
                                                                                at android.content.res.TypedArray.getDrawableForDensity(TypedArray.java:953) 
                                                                                at android.content.res.TypedArray.getDrawable(TypedArray.java:928) 
                                                                                at android.widget.ProgressBar.<init>(ProgressBar.java:281) 
                                                                                at android.widget.ProgressBar.<init>(ProgressBar.java:230) 
                                                                                at android.widget.ProgressBar.<init>(ProgressBar.java:226) 
                                                                                at java.lang.reflect.Constructor.newInstance0(Native Method) 
                                                                                at java.lang.reflect.Constructor.newInstance(Constructor.java:334) 
                                                                                at android.view.LayoutInflater.createView(LayoutInflater.java:650) 
                                                                                at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58) 
                                                                                at android.view.LayoutInflater.onCreateView(LayoutInflater.java:723) 
                                                                                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:791) 
                                                                                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733) 
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:866) 
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827) 
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:869) 
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827) 
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:869) 
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827) 
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:869) 
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827) 
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:869) 
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827) 
                                                                                at android.view.LayoutInflater.rInflate(LayoutInflater.java:869) 
                                                                                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:827) 
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:518) 
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:377) 
                                                                                at com.test.myapp.ui.activity.base.BaseActivity.setContentView(BaseActivity.java:237) 
                                                                                at com.test.myapp.feature2.ui.activity.Feature2Activity.onCreate(Feature2Activity.java:123) 
                                                                                at android.app.Activity.performCreate(Activity.java:6980) 
                                                                                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) 
                                                                                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) 
                                                                                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
                                                                                at android.app.ActivityThread.-wrap11(Unknown Source:0) 
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
                                                                                at android.os.Handler.dispatchMessage(Handler.java:105) 
                                                                                at android.os.Looper.loop(Looper.java:164) 
                                                                                at android.app.ActivityThread.main(ActivityThread.java:6540) 
                                                                                at java.lang.reflect.Method.invoke(Native Method) 
                                                                                at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
    06-18 10:42:37.616 11607-11607/com.test.myapp.qa E/AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "LinearLayout" on path: DexPathList[[zip file "/data/app/com.test.myapp.qa-ncO99Ptagbu_PYoBeZhFeA==/base.apk", zip file "/data/app/com.test.myapp.qa-ncO99Ptagbu_PYoBeZhFeA==/split_feature2.apk", zip file "/data/app/com.test.myapp.qa-ncO99Ptagbu_PYoBeZhFeA==/split_feature1.apk"],nativeLibraryDirectories=[/data/app/com.test.myapp.qa-ncO99Ptagbu_PYoBeZhFeA==/lib/x86, /system/lib, /system/vendor/lib]]
                                                                                at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
                                                                                at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
                                                                                at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                                                                                at android.graphics.drawable.DrawableInflater.inflateFromClass(DrawableInflater.java:201)
                                                                                    ... 47

如果我们查看 Feature2Activity 布局文件,第 76 行,我们会看到:

<ProgressBar
    android:layout_width="20dp"
    android:layout_height="20dp"
    android:layout_gravity="right"
    android:indeterminateDrawable="@drawable/progress" />

可绘制的progress.xml 位于feature2 资源中。如果我们将其删除,或者将其更改为 base 资源中的某个可绘制对象,则一切正常。

另外一个奇怪的地方是这一行:

Caused by: android.content.res.Resources$NotFoundException: Drawable com.test.myapp.qa:layout/random_feature1_layout with resource ID #0x82030011

布局random_feature1_layout 位于feature1 资源中,根本不应该被引用。但是如果我们去feature2\R.java文件,寻找progress.xmldrawable,我们会发现:

public static final int progress=0x80030011;

如果您仔细观察,您会发现progressrandom_feature1_layout 的ID 相差一位:0x800300110x82030011。所以我做了一个假设,feature2 出于未知原因在feature1 资源中寻找progress drawable。我试图删除 feature1 依赖并且崩溃消失了,这证实了我的假设。

我还应注意,此问题仅适用于免安装应用。已安装的应用运行良好。

我的问题是feature2 怎么可能在feature1 apk 中搜索资源?你有什么想法是什么导致了这种行为,或者提示如何调试这个问题?

【问题讨论】:

  • 同一资源或同名资源是否也可用于feature1拆分?
  • @MaruAhues 不,它只是一些具有相似 id 的随机资源,它甚至不是可绘制的。
  • 我遇到了一个非常相似的问题。我在这里提交了一个错误报告:issuetracker.google.com/issues/62899015
  • 在这里发现了另一个跟踪器(可能是同一个问题):issuetracker.google.com/issues/62852384
  • @gbaccetta 不,我推迟了开发,直到发布更稳定的版本。

标签: android android-gradle-plugin android-instant-apps


【解决方案1】:

参考 Google issue tracker,它已通过 Android SDK 内置工具修复到 27.0.2

请将您的 Android SDK 内置工具更新到 27.0.2 并确保您使用的是 Android Studio 3.0.1 或更高版本

如果任何问题仍然存在,请报告at Google issue tracker,他们将重新打开进行检查。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 2018-02-18
    相关资源
    最近更新 更多