-
在 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
- 修改
import android.support.v4.app.Fragment
java
// 原来是这样的
import android.support.v4.app.Fragment
java
// 修改成这样
import androidx.fragment.app.Fragment
- 修改
import android.support.v4.view.MotionEventCompat;
java
// 原来是这样的
import android.support.v4.view.MotionEventCompat;
java
// 修改成这样
// 直接删除或注释
// import android.support.v4.view.MotionEventCompat;
- 修改使用 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);