集成 mupdf-android 的示例做为模块使用报错,程序包android.support.v4.view不存在

  • 在 Android 开发中,集成 mupdf-android 的示例做为模块使用,运行项目时,出现如下错误信息

    Task :mupdf:compileDebugJavaWithJavac FAILED
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\ReaderView.java:7: 错误: 程序包android.support.v4.view不存在
    import android.support.v4.view.MotionEventCompat;
    ^
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:28: 错误: 找不到符号
    import android.support.v4.app.Fragment;
    ^
    符号: 类 Fragment
    位置: 程序包 android.support.v4.app
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:50: 错误: 找不到符号
    public class MuPDFFragment extends Fragment implements FilePicker.FilePickerSupport
    ^
    符号: 类 Fragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\ReaderView.java:533: 错误: 找不到符号
    int ident = MotionEventCompat.getActionIndex(event);
    ^
    符号: 变量 MotionEventCompat
    位置: 类 ReaderView
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\ReaderView.java:535: 错误: 找不到符号
    mLastTouchX = MotionEventCompat.getX(event, ident);
    ^
    符号: 变量 MotionEventCompat
    位置: 类 ReaderView
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\ReaderView.java:536: 错误: 找不到符号
    mLastTouchY = MotionEventCompat.getY(event, ident);
    ^
    符号: 变量 MotionEventCompat
    位置: 类 ReaderView
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\ReaderView.java:540: 错误: 找不到符号
    float upX = MotionEventCompat.getX(event, ident);
    ^
    符号: 变量 MotionEventCompat
    位置: 类 ReaderView
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\ReaderView.java:541: 错误: 找不到符号
    float upY = MotionEventCompat.getY(event, ident);
    ^
    符号: 变量 MotionEventCompat
    位置: 类 ReaderView
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:183: 错误: 找不到符号
    mAlertDialog.setButton(AlertDialog.BUTTON2, getString(R.string.cancel), listener);
    ^
    符号: 方法 getString(int)
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:186: 错误: 找不到符号
    mAlertDialog.setButton(AlertDialog.BUTTON1, getString(R.string.okay), listener);
    ^
    符号: 方法 getString(int)
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:190: 错误: 找不到符号
    mAlertDialog.setButton(AlertDialog.BUTTON3, getString(R.string.cancel), listener);
    ^
    符号: 方法 getString(int)
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:193: 错误: 找不到符号
    mAlertDialog.setButton(AlertDialog.BUTTON1, getString(R.string.yes), listener);
    ^
    符号: 方法 getString(int)
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:195: 错误: 找不到符号
    mAlertDialog.setButton(AlertDialog.BUTTON2, getString(R.string.no), listener);
    ^
    符号: 方法 getString(int)
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:270: 错误: 方法不会覆盖或实现超类型的方法
    @Override
    ^
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:273: 错误: 找不到符号
    super.onCreate(savedInstanceState);
    ^
    符号: 变量 super
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:281: 错误: 找不到符号
    core = (MuPDFCore)getActivity().getLastNonConfigurationInstance();
    ^
    符号: 方法 getActivity()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:288: 错误: 找不到符号
    Intent intent = getActivity().getIntent();
    ^
    符号: 方法 getActivity()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:292: 错误: 找不到符号
    boolean hasArguments = getArguments() != null && getArguments().getString(PARAM_PATH_PDF) != null;
    ^
    符号: 方法 getArguments()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:292: 错误: 找不到符号
    boolean hasArguments = getArguments() != null && getArguments().getString(PARAM_PATH_PDF) != null;
    ^
    符号: 方法 getArguments()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:297: 错误: 找不到符号
    uri = Uri.parse(getArguments().getString(PARAM_PATH_PDF));
    ^
    符号: 方法 getArguments()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:346: 错误: 找不到符号
    Resources res = getResources();
    ^
    符号: 方法 getResources()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:352: 错误: 找不到符号
    getActivity().finish();
    ^
    符号: 方法 getActivity()
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:349: 错误: 找不到符号
    alert.setButton(AlertDialog.BUTTON_POSITIVE, getString(R.string.dismiss),
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:367: 错误: 找不到符号
    if (getArguments() != null && getArguments().getString(PARAM_PASSWORD_PDF) != null) {
    ^
    符号: 方法 getArguments()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:367: 错误: 找不到符号
    if (getArguments() != null && getArguments().getString(PARAM_PASSWORD_PDF) != null) {
    ^
    符号: 方法 getArguments()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:368: 错误: 找不到符号
    String password = getArguments().getString(PARAM_PASSWORD_PDF);
    ^
    符号: 方法 getArguments()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:387: 错误: 找不到符号
    getActivity().finish();
    ^
    符号: 方法 getActivity()
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:384: 错误: 找不到符号
    alert.setButton(AlertDialog.BUTTON_POSITIVE, getString(R.string.dismiss),
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:394: 错误: 找不到符号
    getActivity().finish();
    ^
    符号: 方法 getActivity()
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:412: 错误: 找不到符号
    alert.setButton(AlertDialog.BUTTON_POSITIVE, getString(R.string.okay),
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:426: 错误: 找不到符号
    getActivity().finish();
    ^
    符号: 方法 getActivity()
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:422: 错误: 找不到符号
    alert.setButton(AlertDialog.BUTTON_NEGATIVE, getString(R.string.cancel),
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:632: 错误: 找不到符号
    startActivityForResult(intent, OUTLINE_REQUEST);
    ^
    符号: 方法 startActivityForResult(Intent,int)
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:641: 错误: 找不到符号
    SharedPreferences prefs = getActivity().getPreferences(Context.MODE_PRIVATE);
    ^
    符号: 方法 getActivity()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:665: 错误: 找不到符号
    if (getArguments() != null && getArguments().getBoolean(PARAM_SHOW_CONTROLS)) {
    ^
    符号: 方法 getArguments()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:665: 错误: 找不到符号
    if (getArguments() != null && getArguments().getBoolean(PARAM_SHOW_CONTROLS)) {
    ^
    符号: 方法 getArguments()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:688: 错误: 找不到符号
    mDocView.setAdapter(mReflow ? new MuPDFReflowAdapter(mContext, core) : new MuPDFPageAdapter(getActivity(), this, core));
    ^
    符号: 方法 getActivity()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:700: 错误: 找不到符号
    showInfo(mReflow ? getString(R.string.entering_reflow_mode) : getString(R.string.leaving_reflow_mode));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:700: 错误: 找不到符号
    showInfo(mReflow ? getString(R.string.entering_reflow_mode) : getString(R.string.leaving_reflow_mode));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:703: 错误: 方法不会覆盖或实现超类型的方法
    @Override
    ^
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:705: 错误: 找不到符号
    super.onSaveInstanceState(outState);
    ^
    符号: 变量 super
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:714: 错误: 找不到符号
    SharedPreferences prefs = getActivity().getPreferences(Context.MODE_PRIVATE);
    ^
    符号: 方法 getActivity()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:730: 错误: 方法不会覆盖或实现超类型的方法
    @Override
    ^
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:732: 错误: 找不到符号
    super.onPause();
    ^
    符号: 变量 super
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:738: 错误: 找不到符号
    SharedPreferences prefs = getActivity().getPreferences(Context.MODE_PRIVATE);
    ^
    符号: 方法 getActivity()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:769: 错误: 找不到符号
    super.onDestroy();
    ^
    符号: 变量 super
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:893: 错误: 找不到符号
    showInfo(getString(R.string.format_currently_not_supported));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:897: 错误: 找不到符号
    Intent myIntent = getActivity().getIntent();
    ^
    符号: 方法 getActivity()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:901: 错误: 找不到符号
    showInfo(getString(R.string.print_failed));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:910: 错误: 找不到符号
    startActivityForResult(printIntent, PRINT_REQUEST);
    ^
    符号: 方法 startActivityForResult(Intent,int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:918: 错误: 找不到符号
    SafeAnimatorInflater safe = new SafeAnimatorInflater(getActivity(), R.animator.info, (View)mInfoView);
    ^
    符号: 方法 getActivity()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:930: 错误: 找不到符号
    mButtonsView = getActivity().getLayoutInflater().inflate(R.layout.buttons,null);
    ^
    符号: 方法 getActivity()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:971: 错误: 找不到符号
    mAnnotTypeText.setText(getString(R.string.copy_text));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:972: 错误: 找不到符号
    showInfo(getString(R.string.select_text));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:991: 错误: 找不到符号
    showInfo(getString(R.string.select_text));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1000: 错误: 找不到符号
    showInfo(getString(R.string.select_text));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1009: 错误: 找不到符号
    showInfo(getString(R.string.select_text));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1018: 错误: 找不到符号
    showInfo(getString(R.string.draw_annotation));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1047: 错误: 找不到符号
    showInfo(success?getString(R.string.copied_to_clipboard):getString(R.string.no_text_selected));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1047: 错误: 找不到符号
    showInfo(success?getString(R.string.copied_to_clipboard):getString(R.string.no_text_selected));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1055: 错误: 找不到符号
    showInfo(getString(R.string.no_text_selected));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1063: 错误: 找不到符号
    showInfo(getString(R.string.no_text_selected));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1071: 错误: 找不到符号
    showInfo(getString(R.string.no_text_selected));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1079: 错误: 找不到符号
    showInfo(getString(R.string.nothing_to_save));
    ^
    符号: 方法 getString(int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1126: 错误: 方法不会覆盖或实现超类型的方法
    @Override
    ^
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1134: 错误: 找不到符号
    super.onStart();
    ^
    符号: 变量 super
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1137: 错误: 方法不会覆盖或实现超类型的方法
    @Override
    ^
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1145: 错误: 找不到符号
    super.onStop();
    ^
    符号: 变量 super
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1153: 错误: 找不到符号
    startActivityForResult(intent, FILEPICK_REQUEST);
    ^
    符号: 方法 startActivityForResult(Intent,int)
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1206: 错误: 找不到符号
    f.setArguments(args);
    ^
    符号: 方法 setArguments(Bundle)
    位置: 类型为MuPDFFragment的变量 f
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1276: 错误: 方法不会覆盖或实现超类型的方法
    @Override
    ^
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1278: 错误: 找不到符号
    super.onAttach(activity);
    ^
    符号: 变量 super
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1288: 错误: 找不到符号
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    ^
    符号: 方法 getActivity()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1289: 错误: 找不到符号
    builder.setTitle(getResources().getString(R.string.noSignOnPdfTitle));
    ^
    符号: 方法 getResources()
    位置: 类 MuPDFFragment
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1308: 错误: 方法不会覆盖或实现超类型的方法
    @Override
    ^
    ...\mupdf\src\main\java\com\artifex\mupdfdemo\MuPDFFragment.java:1310: 错误: 找不到符号
    super.onConfigurationChanged(newConfig);
    ^
    符号: 变量 super
    位置: 类 MuPDFFragment

    ...

问题原因
  • 编译错误主要是因为 Android Support Library 已被废弃,而项目仍在使用 android.support.v4 包中的类,例如 Fragment、MotionEventCompat 等,当前项目已经迁移到了 AndroidX
处理策略
  • 将代码中使用 Android Support Library 的地方迁移到 AndroidX
  1. 修改 import android.support.v4.app.Fragment
java 复制代码
// 原来是这样的

import android.support.v4.app.Fragment
java 复制代码
// 修改成这样

import androidx.fragment.app.Fragment
  1. 修改 import android.support.v4.view.MotionEventCompat;
java 复制代码
// 原来是这样的

import android.support.v4.view.MotionEventCompat;
java 复制代码
// 修改成这样

// 直接删除或注释
// import android.support.v4.view.MotionEventCompat;
  1. 修改使用 MotionEventCompat 的地方
java 复制代码
// 原来是这样的

mLastTouchX = MotionEventCompat.getX(event, ident);
mLastTouchY = MotionEventCompat.getY(event, ident);
java 复制代码
// 修改成这样

mLastTouchX = event.getX(ident);
mLastTouchY = event.getY(ident);
java 复制代码
// 原来是这样的

float upX = MotionEventCompat.getX(event, ident);
float upY = MotionEventCompat.getY(event, ident);
java 复制代码
// 修改成这样

float upX = event.getX(ident);
float upY = event.getY(ident);
相关推荐
Flynn Liang13 小时前
Spring AI ChatClient 详解:system/user/assistant 角色、call 与 stream 到底怎么选
java·人工智能·spring·springai·流式输出·chatclient·java接入大模型
Wang's Blog13 小时前
Java 项目实战: 交友项目 - 喜欢与取消喜欢
java·开发语言·交友
摸鱼仙人~13 小时前
校招帮简历字段匹配架构分析报告
java·前端·架构
钛生智能13 小时前
OA 流程定制全参数详解(七):流程的生命周期——启用、停用、导出、导入
java·办公自动化·oa·协同办公·oa办公系统
悟道书生13 小时前
若依 RBAC 权限控制学习笔记
java·网络·笔记·sql·学习·vue
景熙552313 小时前
2.什么是业务后台系统
java·spring·tomcat·mybatis·jdbc
古法老登瞎折腾14 小时前
大数据智能运维实战(八):从调度任务追到计算引擎——补齐排查链路
java·大数据·运维·spring ai·mcp
砚底藏山河14 小时前
python量化:实时行情WebSocket断线重连状态机
java·python·websocket·金融
衍生星球14 小时前
【Java 语言】— 方法(方法定义、调用、参数、返回值、方法重载)
java·开发语言·方法