Android:无法加载库(缺少94个基本表)

Android:无法加载库(缺少94个基本表),android,linker,android-ndk,Android,Linker,Android Ndk,我正在开发一个Android应用程序,它使用一个巨大的本机库。一些客户抱怨启动时的崩溃,其中一位给了我们他的日志: 07-19 10:55:15.139 E/AndroidRuntime(16539)FATAL EXCEPTION: AsyncTask #3 07-19 10:55:15.139 E/AndroidRuntime(16539)java.lang.RuntimeException: An error occured while executing doInBackground()

我正在开发一个Android应用程序,它使用一个巨大的本机库。一些客户抱怨启动时的崩溃,其中一位给了我们他的日志:

07-19 10:55:15.139 E/AndroidRuntime(16539)FATAL EXCEPTION: AsyncTask #3
07-19 10:55:15.139 E/AndroidRuntime(16539)java.lang.RuntimeException: An error occured while executing doInBackground()
07-19 10:55:15.139 E/AndroidRuntime(16539)at android.os.AsyncTask$3.done(AsyncTask.java:200)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.util.concurrent.FutureTask.run(FutureTask.java:138)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.lang.Thread.run(Thread.java:1019)
07-19 10:55:15.139 E/AndroidRuntime(16539)Caused by: java.lang.ExceptionInInitializerError
07-19 10:55:15.139 E/AndroidRuntime(16539)at my.app.appinit.NativeInitAsyncTask.doInBackground(NativeInitAsyncTask.java:86)
07-19 10:55:15.139 E/AndroidRuntime(16539)at my.app.appinit.NativeInitAsyncTask.doInBackground(NativeInitAsyncTask.java:44)
07-19 10:55:15.139 E/AndroidRuntime(16539)at android.os.AsyncTask$2.call(AsyncTask.java:185)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
07-19 10:55:15.139 E/AndroidRuntime(16539)... 4 more
07-19 10:55:15.139 E/AndroidRuntime(16539)Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1935]:    94 missing essential tables
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.lang.Runtime.loadLibrary(Runtime.java:434)
07-19 10:55:15.139 E/AndroidRuntime(16539)at java.lang.System.loadLibrary(System.java:554)
07-19 10:55:15.139 E/AndroidRuntime(16539)at nativewrapper.NativeObject.<clinit>(NativeObject.java:30)
07-19 10:55:15.139 E/AndroidRuntime(16539)... 8 more
07-19 10:55:15.179 W/ActivityManager(162)Force finishing activity my.app.packagename/my.app.FirstActivity
07-19 10:55:15.139 E/AndroidRuntime(16539)致命异常:AsyncTask#3
07-19 10:55:15.139 E/AndroidRuntime(16539)java.lang.RuntimeException:执行doInBackground()时出错
07-19 10:55:15.139 E/AndroidRuntime(16539)位于android.os.AsyncTask$3.done(AsyncTask.java:200)
07-19 10:55:15.139 E/AndroidRuntime(16539)在java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
07-19 10:55:15.139在java.util.concurrent.FutureTask.setException(FutureTask.java:125)处的E/AndroidRuntime(16539)
07-19 10:55:15.139 E/AndroidRuntime(16539)位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
07-19 10:55:15.139位于java.util.concurrent.FutureTask.run(FutureTask.java:138)的E/AndroidRuntime(16539)
07-19 10:55:15.139 E/AndroidRuntime(16539)位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
07-19 10:55:15.139 E/AndroidRuntime(16539)位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
07-19 10:55:15.139在java.lang.Thread.run(Thread.java:1019)处的E/AndroidRuntime(16539)
07-19 10:55:15.139 E/AndroidRuntime(16539)由以下原因引起:java.lang.ExceptionInInitializeError
07-19 10:55:15.139 E/AndroidRuntime(16539)在my.app.appinit.NativeInitAsyncTask.doInBackground(NativeInitAsyncTask.java:86)上
07-19 10:55:15.139 E/AndroidRuntime(16539)在my.app.appinit.NativeInitAsyncTask.doInBackground(NativeInitAsyncTask.java:44)
07-19 10:55:15.139 E/AndroidRuntime(16539)在android.os.AsyncTask$2.call(AsyncTask.java:185)
07-19 10:55:15.139 E/AndroidRuntime(16539)位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
07-19 10:55:15.139东/安德律伦time(16539)。。。4更多
07-19 10:55:15.139 E/AndroidRuntime(16539)由以下原因引起:java.lang.UnsatifiedLink错误:无法加载库:link_image[1935]:94缺少基本表
07-19 10:55:15.139 E/AndroidRuntime(16539)在java.lang.Runtime.loadLibrary(Runtime.java:434)上
07-19 10:55:15.139 E/AndroidRuntime(16539)位于java.lang.System.loadLibrary(System.java:554)
07-19 10:55:15.139 E/AndroidRuntime(16539)在nativewrapper.NativeObject.(NativeObject.java:30)
07-19 10:55:15.139东/安德律伦time(16539)。。。8个以上
07-19 10:55:15.179 W/ActivityManager(162)强制完成活动my.app.packagename/my.app.FirstActivity
客户的手机型号为三星Galaxy Ace(gt-s5830)。 通过在互联网上挖掘,我从Android链接器()中找到了这段代码:看看它,似乎zygote(pid 94)无法为我的应用程序(pid 1935)加载库,我找不到任何提示或解决方法来修复它,有什么想法吗?
谢谢。

使用最新的ndk版本更新您的应用程序版本

java.lang.UnsatifiedLinkError
发生异常是因为找不到本机库(Windows/SO上的DLL for linux)。在UNIX和其他系统上,这也可能是由于系统上的运行时库与与预构建本机库关联的运行时库之间存在版本差异造成的。

这似乎是静态块中“加载库”的错误

检查这些东西

  • 从库名称的开头删除“lib”,从库名称的结尾删除“.so”。 例如:如果库是libTest.so
  • 静态块中的代码应该是

    static{
    
    System.loadLibrary("Test");
    
    }
    
  • 确保你清理了你的项目

  • “巨大的本地图书馆”。什么库?意味着我的专有库相当大(4.5mb)并且有很多功能。类似于第三方库或者你开发的东西吗?它不是预编译的第三方库,源代码对我来说是可用的,我从Android 1.6开始编译它,过去使用Android-ndk-r4-crystax,现在使用Android-ndk-r6。