使用ProGuard发布的应用程序中出现Android错误

使用ProGuard发布的应用程序中出现Android错误,android,printing,android-proguard,Android,Printing,Android Proguard,我已经做了一个我正在使用SDK的应用程序 所以我有一些爱普生热敏打印机的库文件,我正在我的应用程序中使用它们 所以这里的应用程序正在成功运行,我正在打印数据 现在我制作了我的apk的发行版并签署了它 我的应用程序在不同的软件包(com.mytest.mapp)中,打印机在另一个软件包(com.epson.epos2_printer)中,我正在使用libepos2.so 所以当我试图打印应用程序时,它崩溃了 我遵循了许多proguard表单,并将其添加到了proguard规则中 -keep cla

我已经做了一个我正在使用SDK的应用程序 所以我有一些爱普生热敏打印机的库文件,我正在我的应用程序中使用它们

所以这里的应用程序正在成功运行,我正在打印数据

现在我制作了我的apk的发行版并签署了它

我的应用程序在不同的软件包(com.mytest.mapp)中,打印机在另一个软件包(com.epson.epos2_printer)中,我正在使用libepos2.so

所以当我试图打印应用程序时,它崩溃了

我遵循了许多proguard表单,并将其添加到了
proguard规则中

-keep class  com.epson.epos2** {
    *;
}
但是当
minifyEnabled true

如果它是假的,它的发布版本工作正常,我能建议我爱普生SDK库缺少什么吗

这是我的错误日志

   No pending exception expected: java.lang.ClassNotFoundException: Didn't find class "com.epson.epsonio.bluetooth.NetBt" on path: DexPathList[[zip file "/data/app/com.mytest.mapp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.mytest.mapp-1/lib/arm, /vendor/lib, /system/lib]]
   at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56)
   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:511)
   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:469)
   at java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader, java.lang.String) (Runtime.java:-2)
   at java.lang.String java.lang.Runtime.doLoad(java.lang.String, java.lang.ClassLoader) (Runtime.java:428)
   at void java.lang.Runtime.loadLibrary(java.lang.String, java.lang.ClassLoader) (Runtime.java:369)
   at void java.lang.System.loadLibrary(java.lang.String) (System.java:989)
   at void com.epson.epos2.discovery.Discovery.<clinit>() ((null):-1)
   at void com.mytest.mapp.pdata.PrintMActivity.onCreate(android.os.Bundle) ((null):-1)
   at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6289)
   at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1119)
   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2655)
   at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2767)
   at void android.app.ActivityThread.access$900(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:177)
   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1449)
   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102)
   at void android.os.Looper.loop() (Looper.java:145)
   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:5951)
   at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[], boolean) (Method.java:-2)
   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:372)
   at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:1400)
   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1195)
不应出现挂起的异常:java.lang.ClassNotFoundException:在路径:DexPathList[[zip文件”//data/app/com.mytest.mapp-1/base.apk“],NativeLibraryDirectory=[/data/app/com.mytest.mapp-1/lib/arm,/vendor/lib,/system/lib]]上未找到类“com.epson.bluetooth.nett”
位于java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String)(BaseDexClassLoader.java:56)
位于java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String,布尔值)(ClassLoader.java:511)
位于java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String)(ClassLoader.java:469)
位于java.lang.String java.lang.Runtime.nativeLoad(java.lang.String、java.lang.ClassLoader、java.lang.String)(Runtime.java:-2)
位于java.lang.String java.lang.Runtime.doLoad(java.lang.String,java.lang.ClassLoader)(Runtime.java:428)
在void java.lang.Runtime.loadLibrary(java.lang.String,java.lang.ClassLoader)(Runtime.java:369)中
在void java.lang.System.loadLibrary(java.lang.String)(System.java:989)中
位于void com.epson.epos2.discovery.discovery.((null):-1)
在void com.mytest.mapp.pdata.PrintMActivity.onCreate(android.os.Bundle)中((null):-1)
位于void android.app.Activity.performCreate(android.os.Bundle)(Activity.java:6289)
位于void android.app.Instrumentation.callActivityOnCreate(android.app.Activity,android.os.Bundle)(Instrumentation.java:1119)
在android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord,android.content.Intent)(ActivityThread.java:2655)
在void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord,android.content.Intent)(ActivityThread.java:2767)
在void android.app.ActivityThread.access$900(android.app.ActivityThread,android.app.ActivityThread$ActivityClientRecord,android.content.Intent)(ActivityThread.java:177)
在void android.app.ActivityThread$H.handleMessage(android.os.Message)(ActivityThread.java:1449)中
位于void android.os.Handler.dispatchMessage(android.os.Message)(Handler.java:102)
位于void android.os.Looper.loop()(Looper.java:145)
在void android.app.ActivityThread.main(java.lang.String[])(ActivityThread.java:5951)上
在java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object,java.lang.Object[],布尔)(Method.java:-2)
在java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object,java.lang.Object[])(Method.java:372)
位于void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run()(ZygoteInit.java:1400)
位于void com.android.internal.os.ZygoteInit.main(java.lang.String[])(ZygoteInit.java:1195)

蓝牙打印机和爱普生打印机也出现了同样的错误。。更好地使用

-ignorewarnings / -dontwarn class/package name
-keep class * {
    public private *;
}
别忘了保留我们的类名/包名


我知道这是一个古老的威胁,但我希望这将有助于将来遇到这个话题的人

添加如下所示的广泛保留选项是一种不好的做法,这将防止ProGuard缩小、优化和混淆整个项目(标记为受保护的代码部分除外)

相反,当遇到
ClassNotFoundException
时,您应该为缺少的类添加一个
-keep
选项。在OP的情况下,那将是
-keep class com.epson.epsonio.bluetooth.NetBt


你可以在,它可以很好地可视化哪些类受
-keep
选项的影响,而无需反复编译。

发布崩溃日志。您遇到了什么错误?您在这个库中使用了任何常量或类似JavaBeans的实用程序类吗?也可以尝试一下-try
-keep class com.epson.*{*;}
同时保持与此库一起使用的任何实用程序类或常量不模糊。希望这有帮助:)谢谢这是同一个图书馆的一个好例子
-keep class * {
    public private *
}