【问题标题】:Unable to load .so library files when making a system application制作系统应用时无法加载.so库文件
【发布时间】:2014-01-21 06:54:37
【问题描述】:

我创建了一个应用程序,它将是一个系统应用程序。 当我正常安装应用程序(不是系统应用程序)时,“.so”文件正在加载。但是当我通过将 apk 放入 /system/app/ 使其成为系统应用程序时 ,我收到以下错误

01-09 00:20:26.889: E/AndroidRuntime(2101): java.lang.UnsatisfiedLinkError: Couldn't load iconv from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/com.google.android.maps.jar", zip file "/system/app/My.apk"],nativeLibraryDirectories= [/vendor/lib, /system/lib]]]: findLibrary returned null

我在这方面所做的研究 -

“.o”和“.so”文件似乎位于 /system/lib/ 和 /vendor/lib/ 中。

即使将文件添加到各自的目录后,仍然无法加载库。

任何帮助将不胜感激。

【问题讨论】:

  • 在将 .so 文件推送到 /system/lib/ 后,您是否尝试重新启动目标?
  • 是的,我做到了。但得到同样的错误。此路径返回 null。有没有办法可以将路径设置为环境变量,以便完成这件事?我在应用程序的“libs/armeabi”、“libs/armeabi-v71”和“x86”目录中也有 .so 文件。
  • @shoerat,我解决了这个问题。

标签: java android java-native-interface shared-libraries jnienv


【解决方案1】:

就我而言,问题与权限有关。将“.SO”文件放入各个目录后,我将默认分配的权限600修改为755。效果很好。

【讨论】:

  • 请将此案例添加到stackoverflow.com/questions/9037966/…的类似错误列表中
  • 虽然问题确实存在,但您的设置不正确。您缺少执行位,因此这在强制执行该操作的 ARM 系统上不起作用。 Android 上的普通 .so 文件权限为 755。
  • @ChrisStratton 感谢您的纠正。我没有提到它,但我使用了 755,在我实验室的一台 android 设备上默认为 600。
  • 在哪里更改这些权限?
  • @TaRanLaYal $ su # cp /some/path/on/your/device/your.so /system/lib/ # chmod 755 /system/lib/your.so #reboot
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2018-12-26
  • 1970-01-01
  • 2020-05-15
相关资源
最近更新 更多