集成 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);
相关推荐
二炮手亮子1 小时前
浅记java线程池
java·开发语言
一路向北North1 小时前
Spring Security OAuth2.0(23):分布式系统授权-转发明文给微服务
java·spring·微服务
心中有国也有家3 小时前
AtomGit Flutter 鸿蒙客户端:Canvas 绘制进阶-路径、渐变与混合模式
android·javascript·flutter·华为·harmonyos
爱吃牛肉的大老虎3 小时前
rust基础之环境搭建
java·开发语言·rust
tellmewhoisi4 小时前
多版本共用redis的token有效期校验(过期重新登录)
java·redis·缓存
疯狂打码的少年4 小时前
【软件工程】结构化设计:模块独立性与耦合内聚
java·开发语言·笔记·软件工程
hunterandroid4 小时前
WorkManager 可靠性实战:唯一任务、重试与幂等设计
android·前端
乐观的Terry4 小时前
3、数据库设计与领域实体
java·数据库·spring boot·spring cloud·ai编程
程序员老刘4 小时前
Android 17的10个AI功能,国内用户真正能用的有几个?
android·flutter·ai编程
C++、Java和Python的菜鸟5 小时前
第4章 后端Web基础(基础知识)
java·开发语言