从 android studio 安装时一切正常,当我从 playstore 安装时结果相同,除了一个 activity with PDF 不工作

Everything works fine when install from android studio and same results when i install from playstore except one activity with PDF is not working

当我从 android studio 安装时,应用程序工作正常,但是当我从 playstore 安装它时,一个 activity 和一个片段有问题,这两个片段使用一个通用的 PDF 文件。 activity/Fragments 在 PDFViewer 中显示了一本 PDF 书籍,但在加载 activity 应用程序时崩溃了。

CompleteBookFragment.java

public class CompleteBookFragment extends Fragment {
private static int defaultPageNumber = 0;
private PDFView pdfView;

public CompleteBookFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    getActivity().setTitle("مکمل کتاب");
    View view = inflater.inflate(R.layout.fragment_complete_book, container, false);
    final ProgressBar bar = view.findViewById(R.id.progressBarCBF);
    bar.setVisibility(View.VISIBLE);
    pdfView = view.findViewById(R.id.complete_book_pdf);
    pdfView.fromAsset("book.pdf")
            .enableSwipe(true)
            .defaultPage(defaultPageNumber)
            .swipeHorizontal(false)
            .enableDoubletap(true)
            .onLoad(new OnLoadCompleteListener() {
                @Override
                public void loadComplete(int nbPages) {
                    bar.setVisibility(View.GONE);
                }
                })
               .load();
          return view;
    }

    }

BookReaderFromIndex.java

public class BookReaderFromIndex extends AppCompatActivity {

public BookReaderFromIndex() {
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActionBar actionBar = getSupportActionBar();
    setContentView(R.layout.activity_book_reader_from_index);
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setTitle(HelperFunctions.getTypeFacedSpannableString(this, "کتاب"));
    final ProgressBar bar = findViewById(R.id.progressBarBRFI);
    bar.setVisibility(View.VISIBLE);
    Intent intent = getIntent();
    int defaultPageNumber = intent.getIntExtra("pageNumber", 0);
    PDFView bookReaderFromIndex = findViewById(R.id.bookReaderFromIndex);
    bookReaderFromIndex
            .fromAsset("book.pdf")
            .enableSwipe(true)
            .defaultPage(defaultPageNumber)
            .swipeHorizontal(false)
            .enableDoubletap(true)
            .onLoad(new OnLoadCompleteListener() {
                @Override
                public void loadComplete(int nbPages) {
                    bar.setVisibility(View.GONE);
                }
            })
            .load();
}

public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        finish();
    }
    return true;
}

}

因为它只会在从 Playstore 安装时抛出错误,所以 logcat 看起来像这样

2019-11-26 12:03:20.216 23677-23939/? A/art: art/runtime/java_vm_ext.cc:475] JNI DETECTED ERROR IN 
APPLICATION: java_class == null
2019-11-26 12:03:20.216 23677-23939/? A/art: art/runtime/java_vm_ext.cc:475]     in call to 
GetMethodID
2019-11-26 12:03:20.216 23677-23939/? A/art: art/runtime/java_vm_ext.cc:475]     from c.f.a.b.a 
com.shockwave.pdfium.PdfiumCore.nativeGetPageSizeByIndex(long, int, int)
2019-11-26 12:03:20.216 23677-23939/? A/art: art/runtime/java_vm_ext.cc:475] "AsyncTask #1" prio=5 
tid=17 Runnable
2019-11-26 12:03:20.216 23677-23939/? A/art: art/runtime/java_vm_ext.cc:475]   | group="main" 
sCount=0 dsCount=0 obj=0x12dc34c0 self=0x7f5891e000

 2019-11-26 12:03:21.889 23947-23947/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.geekybugs.nifliibadat, PID: 23947
java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.geekybugs.nifliibadat/com.geekybugs.nifliibadat.Activities.MainActivity}: 
 androidx.fragment.app.Fragment$d: Unable to instantiate fragment c.c.a.c.b: could not find Fragment 
constructor
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2747)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2808)
    at android.app.ActivityThread.-wrap12(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1541)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:165)
    at android.app.ActivityThread.main(ActivityThread.java:6375)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
 Caused by: androidx.fragment.app.Fragment$d: Unable to instantiate fragment c.c.a.c.b: could not find Fragment constructor
    at androidx.fragment.app.Fragment.a()
    at b.k.a.e.a()
    at b.k.a.j$c.a(:2)
    at b.k.a.j.a(:192)
    at b.k.a.d.onCreate(:3)
    at b.b.k.m.onCreate()
    at com.geekybugs.nifliibadat.Activities.MainActivity.onCreate()
    at android.app.Activity.performCreate(Activity.java:6845)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2700)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2808) 
    at android.app.ActivityThread.-wrap12(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1541) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:165) 
    at android.app.ActivityThread.main(ActivityThread.java:6375) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802) 
 Caused by: java.lang.NoSuchMethodException: <init> []
    at java.lang.Class.getConstructor0(Class.java:2204)
    at java.lang.Class.getConstructor(Class.java:1683)

我正在使用 barteksc/AndroidPDFViewer 加载 PDF 文件,我也在使用 proguard 并且 proguard 造成了这个问题,正如 @Hussain 在评论部分所强调的那样,这个问题也在 github Issue.

所以当我添加

时就解决了
-keep class com.shockwave.**
-keepclassmembers class com.shockwave.** { *; }

在proguard-rules.pro

感谢 Hussain。