在Android中使用Proguard时防止.so文件被修剪

在Android中使用Proguard时防止.so文件被修剪,android,android-ndk,quickblox,unsatisfiedlinkerror,Android,Android Ndk,Quickblox,Unsatisfiedlinkerror,我在android应用程序中使用Proguard来减少方法的数量()。为此,我在proguard project.txt文件中对一些行进行了编码。在执行必要的命令后,所有的罐子都能正常工作。但是当我尝试集成Quickblox的视频聊天部分时,它们为我们提供了一个。因此我必须集成。所以我只是把它保存在libs\armeabi\libilbc-codec.So路径中,由它们引导。现在,当我在没有Proguard的情况下运行该项目时,它运行良好,但当我使用Proguard编译它时,它会给我以下错误:

我在android应用程序中使用Proguard来减少方法的数量()。为此,我在proguard project.txt文件中对一些行进行了编码。在执行必要的命令后,所有的罐子都能正常工作。但是当我尝试集成Quickblox的视频聊天部分时,它们为我们提供了一个。因此我必须集成。所以我只是把它保存在libs\armeabi\libilbc-codec.So路径中,由它们引导。现在,当我在没有Proguard的情况下运行该项目时,它运行良好,但当我使用Proguard编译它时,它会给我以下错误:

11-21 18:18:19.171: E/AndroidRuntime(19825): FATAL EXCEPTION: Thread-34829
11-21 18:18:19.171: E/AndroidRuntime(19825): java.lang.ExceptionInInitializerError
11-21 18:18:19.171: E/AndroidRuntime(19825):    at com.quickblox.videochat.core.objects.AudioRecorder$AudioRecorderRunnable.run(AudioRecorder.java:196)
11-21 18:18:19.171: E/AndroidRuntime(19825):    at java.lang.Thread.run(Thread.java:864)
11-21 18:18:19.171: E/AndroidRuntime(19825): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load ilbc-codec: findLibrary returned null
11-21 18:18:19.171: E/AndroidRuntime(19825):    at java.lang.Runtime.loadLibrary(Runtime.java:365)
11-21 18:18:19.171: E/AndroidRuntime(19825):    at java.lang.System.loadLibrary(System.java:535)
11-21 18:18:19.171: E/AndroidRuntime(19825):    at com.googlecode.androidilbc.Codec.<init>(Codec.java:16)
11-21 18:18:19.171: E/AndroidRuntime(19825):    at com.googlecode.androidilbc.Codec.<clinit>(Codec.java:5)
11-21 18:18:19.171: E/AndroidRuntime(19825):    ... 2 more
11-21 18:18:19.281: E/copybit(19825): Error opening frame buffer errno=13 (Permission denied)
11-21 18:18:19.171:E/AndroidRuntime(19825):致命异常:Thread-34829
11-21 18:18:19.171:E/AndroidRuntime(19825):java.lang.ExceptionInInitializeError
11-21 18:18:19.171:E/AndroidRuntime(19825):位于com.quickblox.videochat.core.objects.AudioRecorder$AudioRecorderRunnable.run(AudioRecorder.java:196)
11-21 18:18:19.171:E/AndroidRuntime(19825):在java.lang.Thread.run(Thread.java:864)
11-21 18:18:19.171:E/AndroidRuntime(19825):原因:java.lang.UnsatifiedLink错误:无法加载ilbc编解码器:findLibrary返回null
11-21 18:18:19.171:E/AndroidRuntime(19825):在java.lang.Runtime.loadLibrary(Runtime.java:365)上
11-21 18:18:19.171:E/AndroidRuntime(19825):位于java.lang.System.loadLibrary(System.java:535)
11-21 18:18:19.171:E/AndroidRuntime(19825):位于com.googlecode.androidilbc.Codec.(Codec.java:16)
11-21 18:18:19.171:E/AndroidRuntime(19825):位于com.googlecode.androidilbc.Codec.(Codec.java:5)
11-21 18:18:19.171:E/AndroidRuntime(19825):。。。还有两个
11-21 18:18:19.281:E/copybit(19825):打开帧缓冲区errno=13时出错(权限被拒绝)
我非常不习惯使用Proguard和NDK,所以有谁能指导我如何克服这个问题?我通过右键单击project->Android工具->添加本机支持添加了本机支持。。并选择了我一直使用的.so文件。那么,有人能提出任何解决方案或我必须写的行吗

提前谢谢

编辑: 在跟随@ph0b的评论之后,我尝试了以下步骤:

我已经从下面的应用程序中删除了BDK supprot,并按照他的步骤解压了apk,我得到了我的“libilbc codec.so”库/lib/armeabi。但仍然得到下面的错误。那么现在可能有什么问题

11-24 12:12:29.045: E/AndroidRuntime(6049): FATAL EXCEPTION: Thread-455
11-24 12:12:29.045: E/AndroidRuntime(6049): Process: com.hypersquare, PID: 6049
11-24 12:12:29.045: E/AndroidRuntime(6049): java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/com.google.android.maps.jar", zip file "/data/app/com.hypersquare-1/base.apk"],nativeLibraryDirectories=[/data/app/com.hypersquare-1/lib/arm, /vendor/lib, /system/lib]]] couldn't find "libilbc-codec.so"
11-24 12:12:29.045: E/AndroidRuntime(6049):     at java.lang.Runtime.loadLibrary(Runtime.java:366)
11-24 12:12:29.045: E/AndroidRuntime(6049):     at java.lang.System.loadLibrary(System.java:989)
11-24 12:12:29.045: E/AndroidRuntime(6049):     at com.googlecode.androidilbc.Codec.<init>(Codec.java:16)
11-24 12:12:29.045: E/AndroidRuntime(6049):     at com.googlecode.androidilbc.Codec.<clinit>(Codec.java:5)
11-24 12:12:29.045: E/AndroidRuntime(6049):     at com.quickblox.videochat.core.objects.AudioRecorder$AudioRecorderRunnable.run(AudioRecorder.java:196)
11-24 12:12:29.045: E/AndroidRuntime(6049):     at java.lang.Thread.run(Thread.java:818)
11-24 12:12:29.045:E/AndroidRuntime(6049):致命异常:Thread-455
11-24 12:12:29.045:E/AndroidRuntime(6049):进程:com.hypersquare,PID:6049
11-24 12:12:29.045:E/AndroidRuntime(6049):java.lang.unsatifiedLinkError:dalvik.system.PathClassLoader[DexPathList[[zip文件”/system/framework/com.google.android.maps.jar],zip文件/data/app/com.hypersquare-1/base.apk],NativelLibraryDirectory=[/data/app/app/com.hypersquare-1/lib/arm,/vendor/lib,/system/lib]]找不到“libbc codec.so”
11-24 12:12:29.045:E/AndroidRuntime(6049):在java.lang.Runtime.loadLibrary(Runtime.java:366)
11-24 12:12:29.045:E/AndroidRuntime(6049):位于java.lang.System.loadLibrary(System.java:989)
11-24 12:12:29.045:E/AndroidRuntime(6049):位于com.googlecode.androidilbc.Codec.(Codec.java:16)
11-24 12:12:29.045:E/AndroidRuntime(6049):位于com.googlecode.androidilbc.Codec.(Codec.java:5)
11-24 12:12:29.045:E/AndroidRuntime(6049):位于com.quickblox.videochat.core.objects.AudioRecorder$AudioRecorderRunnable.run(AudioRecorder.java:196)
11-24 12:12:29.045:E/AndroidRuntime(6049):在java.lang.Thread.run(Thread.java:818)

Proguard不应该删除。所以文件,我猜您的问题来自其他方面

当您使用eclipse中的“添加本机支持”时,eclipse会创建一个空的ndk库项目(一个包含空源代码和示例Makefile的jni文件夹)

因此,当您构建应用程序时,eclipse会清空
libs/*/
文件夹,然后在此处构建并安装新创建的库

如果您自己不使用NDK(不使用它编译任何源代码),您应该从项目中删除
jni
文件夹及其内容,并将需要打包到apk中的.so文件直接放在
libs/(armeabi | x86 |…)
文件夹中(顺便说一句,使用Android Studio时是jniLibs而不是libs)


为了检查哪些.so文件被打包到你的应用程序中,你可以打开你的APK作为zip文件,然后查看
lib/(armeabi | x86 |…)
文件夹。

check and for@ph0b-非常感谢回复人,但它仍然不起作用。请检查我的编辑是否有问题。我走的方向对不对?对!但这很奇怪,它仍然不起作用。。。能否检查设备上是否安装了lib?您可以运行adb shell ls/data/app/com.hypersquare-1/lib/arm/或使用此应用程序:。另外,请尝试卸载并再次安装你的应用程序,以防万一。您好,ph0b,这里的评论越来越多,因此我与您进行了私人聊天。你能在那里调查一下我的问题吗。非常感谢你的支持。