从 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。
当我从 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。