2013-03-01 51 views
2

我是相当新的android开发,看来,我有一个相当经典的例外......我所看到的,包括设置hasCode到调试...无法加载本地库

E/AndroidRuntime(2119): FATAL EXCEPTION: main 
E/AndroidRuntime(2119): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.oneloop.Rb/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/app-lib/com.oneloop.Rb-1/libRb.so 
E/AndroidRuntime(2119): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 

大多数答案true或确保包含app_dummy - 两者都不能解决我的问题。另外,我已经确认(通过转换为zip和浏览)我编译的apk包含lib/armeabi-v7a/libRb.so。我一直在转换一个很好的大小框架(许多静态库,opengl和预编译的中间件库)到android - 所以我明显的倾向是,我有一些库和我的SO之间的某种不兼容。问题是logcat没有提供关于库失败原因的信息。

我该从哪里出发?
如何找出哪些lib.a是问题?
什么技术可以用来进一步研究什么阻止了我的SO加载? 有没有办法在调试时打开冗长? 是否有任何命令行应用程序可用于验证我的APK和SO的完整性?
还有什么其他的事情可能导致这个问题?

请指教。

+0

http://marakana.com/forums/android/examples/49.html使用方法一步一步 – 2013-03-03 15:26:45

+0

感谢您的评论。但是,我正在积极地移植一个有很多库依赖项的框架。我已经能够启动并运行样本。我所要求的是解决无法加载异常的一般策略。在这一点上,我已经发现LDD,并会看到如果这有帮助。 – 2013-03-03 16:46:37

+0

发现的readelf -d看起来以特定的方式显示依赖关系。 – 2013-03-03 17:35:36

回答

0

我得到了类似的错误消息,这是因为我的本机库使用非系统库(即一个不在.../usr/lib中),在我的情况下gnustl_shared。你必须通过使用Java创建一个静态代码块首先加载任何这样的库:

System.loadLibrary("gnustl_shared"); 

在您的应用程序库不能加载是libRb.so。计算出需要链接的其他库,并首先加载它们。