0

iText というライブラリを使用して、既存の PDF に新しい情報を書き込みます。PDF を暗号化するために、iText (Android 用) は BouncyCastle の Android ポートである SpongyCastle というライブラリを使用します。残念ながら、iText と Spongycastle の両方に非常に多くのメソッド (15k 以上) が含まれています。Android では、使用できるメソッドの数に厳しい制限があります (64k)。幸いなことに、iText は Spongycastle jar で多くのクラスを使用していません。

Spongycastle jar を解凍し、iText が使用しないすべてのクラスを削除して、ファイルを再圧縮することができました。

Mavenビルドでproguardを実行して最終的なapkを生成するまで、すべてがうまく機能します。私には意味のない以下の IOException が表示されます。

このエラーを解決するためのご協力をお願いいたします。

前もって感謝します。また、bouncycastle を参照する proguard.cfg の部分も含めました。

-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
4

1 に答える 1