Я использую библиотеку iText для записи новой информации в существующие PDF-файлы. Для шифрования PDF-файлов iText (для Android) использует библиотеку SpongyCastle, которая является портом BouncyCastle для Android. К сожалению, и iText, и Spongycastle содержат очень большое количество методов (15k +). В Android существует жесткое ограничение на количество методов, которые вы можете использовать (64 КБ). К счастью, iText не использует много классов в банке Spongycastle.
Мне удалось разархивировать банку Spongycastle и удалить все классы, которые iText не использует, и повторно заархивировать файл.
Все работает отлично, пока я не запустил proguard в сборке maven для создания финального apk. Я получаю следующее исключение IOException, которое для меня не имеет смысла.
Мы будем очень признательны за вашу помощь в разрешении этой ошибки.
Заранее спасибо. Я также включил часть proguard.cfg, которая ссылается на bouncycastle.
-keep class org.bouncycastle.crypto.** {*;}
[DEBUG] Reading program jar [.m2/repository/com/madgag/sc-light-jdk15on/1.47.0.2/sc-light-jdk15on-1.47.0.2-reduced.jar] (filtered)
[INFO] Warning: class [spongycastleseriouslyreduced/org/spongycastle/asn1/ASN1InputStream.class] unexpectedly contains class [org.spongycastle.asn1.ASN1InputStream]
[INFO] Warning: class [spongycastleseriouslyreduced/org/spongycastle/asn1/DEROutputStream.class] unexpectedly contains class [org.spongycastle.asn1.DEROutputStream]
[INFO] Warning: class [spongycastleseriouslyreduced/org/spongycastle/crypto/BlockCipher.class] unexpectedly contains class [org.spongycastle.crypto.BlockCipher]
[INFO] java.io.IOException: Can't read [.m2/repository/com/madgag/sc-light-jdk15on/1.47.0.2/sc-light-jdk15on-1.47.0.2-reduced.jar(;;;;!META-INF/maven/**,!META-INF/MANIFEST.MF)] (Can't process class [__MACOSX/spongycastleseriouslyreduced/org/spongycastle/crypto/._BlockCipher.class] (Invalid magic number [51607] in class))
[INFO] at proguard.InputReader.readInput(InputReader.java:230)
[INFO] at proguard.InputReader.readInput(InputReader.java:200)
[INFO] at proguard.InputReader.readInput(InputReader.java:178)
[INFO] at proguard.InputReader.execute(InputReader.java:78)
[INFO] at proguard.ProGuard.readInput(ProGuard.java:196)
[INFO] at proguard.ProGuard.execute(ProGuard.java:78)
[INFO] at proguard.ProGuard.main(ProGuard.java:492)
[INFO] Caused by: java.io.IOException: Can't process class [__MACOSX/spongycastleseriouslyreduced/org/spongycastle/crypto/._BlockCipher.class] (Invalid magic number [51607] in class)
[INFO] at proguard.io.ClassReader.read(ClassReader.java:112)
[INFO] at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
[INFO] at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
[INFO] at proguard.io.JarReader.read(JarReader.java:65)
[INFO] at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
[INFO] at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
[INFO] at proguard.InputReader.readInput(InputReader.java:226)
[INFO] ... 6 more
[INFO] Caused by: java.lang.UnsupportedOperationException: Invalid magic number [51607] in class
[INFO] at proguard.classfile.util.ClassUtil.checkMagicNumber(ClassUtil.java:47)
[INFO] at proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:79)
[INFO] at proguard.classfile.ProgramClass.accept(ProgramClass.java:346)
[INFO] at proguard.io.ClassReader.read(ClassReader.java:91)
[INFO] ... 12 more