Открыть файл PDF в приложении Android работает только с неподписанным APK на Android

Я использую приведенный ниже код, чтобы открыть файл PDF, и он отлично работает, если я распространяю файл APK без подписи.

Код: https://www.online-java.com/i5u7QPU9N4

Но если я подпишу APK, созданный с помощью Android Studio, произойдет сбой приложения со следующим сообщением:

Caused by: ExceptionConverter: java.io.IOException: The document has no pages.
01-24 17:06:20.750 29758 29758 E AndroidRuntime: Caused by: java.io.IOException: The document has no pages.
01-24 17:06:20.750 29758 29758 E AndroidRuntime:    at com.itextpdf.text.pdf.PdfPages.writePageTree(

Возможно ли, что что-то вроде Proguard повлияло на подписанный APK? Или это может быть другая проблема?

РЕДАКТИРОВАТЬ

Это мой файл build.gradle уровня приложения.

https://codebeautify.org/alleditor/y2356950e

У меня есть minifyEnabled, но он объявлен ложным.

Нет такой вещи, как запуск неподписанного APK — Android не будет запускать их. Даже отладочные APK-файлы подписаны, они просто подписаны ключом, созданным IDE. Они созданы только для пользователей, которые хотят разделить этапы подписания и компиляции.

Gabe Sechan 24.01.2023 23:44

Вы правы, отладочный APK работает отлично. APK, который я подписываю своим ключом, не работает должным образом.

fabiobh 26.01.2023 01:51

Что у вас в build.gradle на уровне приложения, у вас есть minifyEnabled или что-то еще интересное?

Miha_x64 26.01.2023 22:14

Согласно ошибке, вы не открываете PDF. Вы генерируете один. Вы должны выполнить отладку, чтобы выяснить, почему сгенерированный документ пуст.

Olivier 28.01.2023 10:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
138
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Proguard может быть одной проблемой, о которой вы размышляете. Трудно сказать, исходя из предоставленной вами информации. Но вот что вы можете попробовать;

  1. Отключить Proguard: вы можете отключить Proguard в файле build.gradle, удалив следующую строку: minifyEnabled true

  2. Настройка Proguard: вы можете настроить Proguard так, чтобы он сохранял необходимый код или ресурсы, добавив определенные правила в файл proguard-rules.pro. Например, чтобы сохранить библиотеку iText, которую вы используете для открытия файла PDF, вы можете добавить следующее правило: -keep class com.itextpdf.** { *; }

  3. Проверьте файл PDF: сообщение об ошибке «В документе нет страниц» предполагает, что приложение пытается открыть пустой или недопустимый файл PDF. Убедитесь, что файл PDF, который вы пытаетесь открыть, не пуст и не поврежден.

  4. Проверьте разрешение: убедитесь, что у вас есть «android.permission.INTERNET» в вашем файле AndroidManifest.xml.

  5. Проверьте библиотеку для чтения PDF: убедитесь, что вы используете правильную версию библиотеки iText и она совместима с вашей версией Android.

Подводя итог, можно сказать, что это зависит от специфики вашего приложения и PDF-файла, который вы пытаетесь открыть.

Если я использую «minifyEnabled false», Proguard будет отключен?

fabiobh 28.01.2023 03:27

Да, используйте minifyEnabled false или удалите эту строку. (developer.android.com/studio/build/shrink-code)

Zac1 28.01.2023 07:03

Проверьте ниже, что может помочь. 1. ИНТЕРНЕТ-РАЗРЕШЕНИЕ 2. проверьте READ PERMISSION или добавьте код ниже в манифест.

<uses-permission
android:name = "android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion = "32" />

Другие вопросы по теме