You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:PhotoEditorView布局加载失败问题求助

问题:Android中PhotoEditorView无法加载,报InflateException错误

我正在开发一款使用PhotoEditor库的Android应用,已按照官方文档的入门和视图设置步骤操作,但包含PhotoEditorView的UI XML布局无法加载。以下是相关代码与报错信息:

XML布局代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/transparent">
    <ja.burhanrashid52.photoeditor.PhotoEditorView 
        android:id="@+id/photoEditorView" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" >
    </ja.burhanrashid52.photoeditor.PhotoEditorView>
</RelativeLayout>

Fragment代码

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    try {
        final View view = inflater.inflate(R.layout.app_fragment_edit_picture, container, false);
    } catch (Exception e) {
        LogHelper.LogError("TEST");
    }
    return null;
}

注:添加try-catch并返回null仅用于测试。

报错信息

Binary XML file line #9: Binary XML file line #9: Error inflating class ja.burhanrashid52.photoeditor.PhotoEditorView

完整堆栈跟踪:

android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class ja.burhanrashid52.photoeditor.PhotoEditorView
at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at com.mobileop.app.gui.fragments.EditPictureFragment.onCreateView(EditPictureFragment.java:54)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2439)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3273)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:2466)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1483)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5551)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class ja.burhanrashid52.photoeditor.PhotoEditorView
at android.view.LayoutInflater.createView(LayoutInflater.java:645)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
... 30 more
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance(Native Method)
at android.view.LayoutInflater.createView(LayoutInflater.java:619)
... 35 more
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lja/burhanrashid52/photoeditor/R$styleable;
at ja.burhanrashid52.photoeditor.PhotoEditorView.init(PhotoEditorView.java:72)
at ja.burhanrashid52.photoeditor.PhotoEditorView.(PhotoEditorView.java:48)
... 37 more
Caused by: java.lang.ClassNotFoundException: Didn't find class "ja.burhanrashid52.photoeditor.R$styleable" on path: DexPathList[[zip file "/data/app/com.mobileop-1/base.apk"],nativeLibraryDirectories=[/data/app/com.mobileop-1/lib/arm, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
... 39 more
Suppressed: java.lang.ClassNotFoundException: ja.burhanrashid52.photoeditor.R$styleable
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 40 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

我的解答

从你的报错堆栈里一眼就能看到核心问题:java.lang.NoClassDefFoundError: Failed resolution of: Lja/burhanrashid52/photoeditor/R$styleable;,简单说就是PhotoEditor库的资源类没被正确引入或者编译到你的项目里。我给你整理几个针对性的解决步骤,按顺序试下来应该能搞定:

1. 先确认依赖是不是加对了

打开你Module级的build.gradle文件,检查是否正确添加了PhotoEditor的依赖,而且版本要和你的项目兼容:

dependencies {
    // 如果你用的是Android Support库,用1.x版本
    implementation 'ja.burhanrashid52:photoeditor:1.0.1'
    // 要是已经迁移到AndroidX,就用2.x版本
    // implementation 'ja.burhanrashid52:photoeditor:2.0.0'
}

加完之后一定要点Sync Now,等同步完成,确保没有同步错误提示。

2. 清理重建项目,清缓存

Android Studio有时候会抽风,缓存的旧编译文件会导致资源类找不到。按这个步骤来:

  • 顶部菜单栏点Build > Clean Project
  • 然后点Build > Rebuild Project
  • 实在不行就重启Android Studio,再运行项目

3. 如果你开了Multidex,检查配置

如果你的项目启用了Multidex,要确保库的类被正确打包进主Dex:

  • 先在Module的build.gradle里确认Multidex是开着的:
    android {
        defaultConfig {
            multiDexEnabled true
        }
    }
    dependencies {
        implementation 'com.android.support:multidex:1.0.3'
        // AndroidX的话用这个:implementation 'androidx.multidex:multidex:2.0.1'
    }
    
  • 然后自定义一个Application类(没有的话就新建),继承MultiDexApplication:
    public class MyApp extends MultiDexApplication {
        @Override
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
            MultiDex.install(this);
        }
    }
    
  • 最后在AndroidManifest.xml里指定这个Application:
    <application
        android:name=".MyApp"
        ...>
    </application>
    

4. 把Fragment里的测试代码改回来

你现在的Fragment捕获异常后直接返回null,这会导致视图根本加载不出来,测试完之后改回正常逻辑,顺便把异常日志打全,方便后续排查:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    try {
        return inflater.inflate(R.layout.app_fragment_edit_picture, container, false);
    } catch (Exception e) {
        LogHelper.LogError("Inflate layout failed: ", e); // 打印完整异常栈
        return super.onCreateView(inflater, container, savedInstanceState);
    }
}

按上面的步骤逐一排查,应该就能解决PhotoEditorView的Inflate错误了。


内容的提问来源于stack exchange,提问作者Yusril Maulidan Raji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:50:49